@@ -27,13 +27,31 @@ final context = TestContext();
27
27
void main () {
28
28
Future initialEvents;
29
29
30
+ Matcher matchesEvent (String type, Map <String , Object > payload) {
31
+ return isA <DwdsEvent >()
32
+ .having ((e) => e.type, 'type' , type)
33
+ .having ((e) => e.payload.keys, 'payload.keys' , payload.keys)
34
+ .having ((e) => e.payload.values, 'payload.values' , payload.values);
35
+ }
36
+
37
+ Stream <DwdsEvent > pipe (Stream <DwdsEvent > stream, {Timeout timeout}) {
38
+ var controller = StreamController <DwdsEvent >();
39
+ unawaited (stream
40
+ .forEach (controller.add)
41
+ .timeout (timeout? .duration ?? const Duration (seconds: 20 ))
42
+ .catchError ((_) {})
43
+ .then ((value) => controller.close ()));
44
+ return controller.stream;
45
+ }
46
+
30
47
setUpAll (() async {
31
48
setCurrentLogWriter ();
32
49
initialEvents = expectLater (
33
- eventStream,
34
- emitsThrough (predicate ((DwdsEvent event) =>
35
- event.type == DwdsEventKind .compilerUpdateDependencies &&
36
- event.payload['elapsedMilliseconds' ] != null )));
50
+ pipe (eventStream, timeout: const Timeout .factor (5 )),
51
+ emitsThrough (matchesEvent (DwdsEventKind .compilerUpdateDependencies, {
52
+ 'entrypoint' : 'hello_world/main.dart.bootstrap.js' ,
53
+ 'elapsedMilliseconds' : isNotNull
54
+ })));
37
55
await context.setUp (
38
56
serveDevTools: true ,
39
57
enableExpressionEvaluation: true ,
@@ -47,38 +65,29 @@ void main() {
47
65
test ('emits DEVTOOLS_LAUNCH event' , () async {
48
66
// The events stream is a broadcast stream so start listening before the
49
67
// action.
50
- var events = expectLater (
51
- context.testServer.dwds.events,
52
- emitsThrough (predicate (
53
- (DwdsEvent event) => event.type == DwdsEventKind .devtoolsLaunch)));
68
+ var events = expectLater (pipe (context.testServer.dwds.events),
69
+ emitsThrough (matchesEvent (DwdsEventKind .devtoolsLaunch, {})));
54
70
await context.webDriver.driver.keyboard.sendChord ([Keyboard .alt, 'd' ]);
55
71
await events;
56
72
});
57
73
58
74
test ('emits DEBUGGER_READY event' , () async {
59
75
// The events stream is a broadcast stream so start listening before the
60
76
// action.
61
- var events = expectLater (
62
- context.testServer.dwds.events,
63
- emitsThrough (predicate (
64
- (DwdsEvent event) => event.type == DwdsEventKind .debuggerReady)));
77
+ var events = expectLater (pipe (context.testServer.dwds.events),
78
+ emitsThrough (matchesEvent (DwdsEventKind .debuggerReady, {})));
65
79
await context.webDriver.driver.keyboard.sendChord ([Keyboard .alt, 'd' ]);
66
80
await events;
67
- },
68
- skip:
69
- 'https://github.com/dart-lang/webdev/issues/1406' ); // Not implemented yet.
81
+ }, skip: 'https://github.com/dart-lang/webdev/issues/1406' );
70
82
71
83
test ('events can be listened to multiple times' , () async {
72
84
context.testServer.dwds.events.listen ((_) {});
73
85
context.testServer.dwds.events.listen ((_) {});
74
86
});
75
87
76
88
test ('can emit event through service extension' , () async {
77
- var events = expectLater (
78
- context.testServer.dwds.events,
79
- emitsThrough (predicate ((DwdsEvent event) =>
80
- event.type == 'foo-event' && event.payload['data' ] == 1234 )));
81
-
89
+ var events = expectLater (pipe (context.testServer.dwds.events),
90
+ emitsThrough (matchesEvent ('foo-event' , {'data' : 1234 })));
82
91
var response = await context.debugConnection.vmService
83
92
.callServiceExtension ('ext.dwds.emitEvent' , args: {
84
93
'type' : 'foo-event' ,
@@ -90,11 +99,10 @@ void main() {
90
99
91
100
test ('can receive DevtoolsEvent and emit DEBUGGER_READY event' , () async {
92
101
var events = expectLater (
93
- context.testServer.dwds.events,
94
- emitsThrough (predicate ((DwdsEvent event) =>
95
- event.type == DwdsEventKind .debuggerReady &&
96
- event.payload['elapsedMilliseconds' ] != null )));
97
-
102
+ pipe (context.testServer.dwds.events),
103
+ emitsThrough (matchesEvent (DwdsEventKind .debuggerReady, {
104
+ 'elapsedMilliseconds' : isNotNull,
105
+ })));
98
106
var response = await context.debugConnection.vmService
99
107
.callServiceExtension ('ext.dwds.sendEvent' , args: {
100
108
'type' : 'DevtoolsEvent' ,
@@ -122,14 +130,12 @@ void main() {
122
130
test ('emits EVALUATE events on evaluation success' , () async {
123
131
var expression = "helloString('world')" ;
124
132
var events = expectLater (
125
- context.testServer.dwds.events,
126
- emitsThrough (predicate ((DwdsEvent event) =>
127
- event.type == DwdsEventKind .evaluate &&
128
- event.payload['expression' ] == expression &&
129
- event.payload['success' ] == true &&
130
- event.payload['error' ] == null &&
131
- event.payload['exception' ] == null &&
132
- event.payload['elapsedMilliseconds' ] != null )));
133
+ pipe (context.testServer.dwds.events),
134
+ emitsThrough (matchesEvent (DwdsEventKind .evaluate, {
135
+ 'expression' : expression,
136
+ 'success' : isTrue,
137
+ 'elapsedMilliseconds' : isNotNull,
138
+ })));
133
139
await service.evaluate (
134
140
isolate.id,
135
141
bootstrap.id,
@@ -145,14 +151,13 @@ void main() {
145
151
test ('emits EVALUATE events on evaluation failure' , () async {
146
152
var expression = 'some-bad-expression' ;
147
153
var events = expectLater (
148
- context.testServer.dwds.events,
149
- emitsThrough (predicate ((DwdsEvent event) =>
150
- event.type == DwdsEventKind .evaluate &&
151
- event.payload['expression' ] == expression &&
152
- event.payload['success' ] == false &&
153
- event.payload['error' ] is ErrorRef &&
154
- event.payload['exception' ] == null &&
155
- event.payload['elapsedMilliseconds' ] != null )));
154
+ pipe (context.testServer.dwds.events),
155
+ emitsThrough (matchesEvent (DwdsEventKind .evaluate, {
156
+ 'expression' : expression,
157
+ 'success' : isFalse,
158
+ 'error' : isA <ErrorRef >(),
159
+ 'elapsedMilliseconds' : isNotNull,
160
+ })));
156
161
await service.evaluate (
157
162
isolate.id,
158
163
bootstrap.id,
@@ -185,22 +190,21 @@ void main() {
185
190
});
186
191
187
192
test ('emits EVALUATE_IN_FRAME events on RPC error' , () async {
193
+ var expression = 'some-bad-expression' ;
188
194
var events = expectLater (
189
- context.testServer.dwds.events,
190
- emitsThrough (predicate ((DwdsEvent event) =>
191
- event.type == DwdsEventKind .evaluateInFrame &&
192
- event.payload['success' ] == false &&
193
- event.payload['error' ] == null &&
194
- event.payload['elapsedMilliseconds' ] != null &&
195
- event.payload['exception' ] is RPCError &&
196
- (event.payload['exception' ] as RPCError )
197
- .message
198
- .contains ('program is not paused' ))));
195
+ pipe (context.testServer.dwds.events),
196
+ emitsThrough (matchesEvent (DwdsEventKind .evaluateInFrame, {
197
+ 'expression' : expression,
198
+ 'success' : isFalse,
199
+ 'exception' : isA <RPCError >().having (
200
+ (e) => e.message, 'message' , contains ('program is not paused' )),
201
+ 'elapsedMilliseconds' : isNotNull,
202
+ })));
199
203
try {
200
204
await service.evaluateInFrame (
201
205
isolateId,
202
206
0 ,
203
- 'some-bad- expression' ,
207
+ expression,
204
208
);
205
209
} catch (_) {}
206
210
await events;
@@ -216,19 +220,20 @@ void main() {
216
220
217
221
// Evaluation succeeds and return ErrorRef containing compilation error,
218
222
// so event is marked as success.
223
+ var expression = 'some-bad-expression' ;
219
224
var events = expectLater (
220
- context.testServer.dwds.events,
221
- emitsThrough (predicate (( DwdsEvent event) =>
222
- event.type == DwdsEventKind .evaluateInFrame &&
223
- event.payload[ 'success' ] == false &&
224
- event.payload[ 'error' ] is ErrorRef &&
225
- event.payload[ 'exception' ] == null &&
226
- event.payload[ 'elapsedMilliseconds' ] != null )));
225
+ pipe ( context.testServer.dwds.events) ,
226
+ emitsThrough (matchesEvent ( DwdsEventKind .evaluateInFrame, {
227
+ 'expression' : expression,
228
+ 'success' : isFalse,
229
+ 'error' : isA < ErrorRef >(),
230
+ 'elapsedMilliseconds' : isNotNull,
231
+ } )));
227
232
try {
228
233
await service.evaluateInFrame (
229
234
isolateId,
230
235
0 ,
231
- 'some-bad- expression' ,
236
+ expression,
232
237
);
233
238
} catch (_) {
234
239
} finally {
@@ -249,13 +254,12 @@ void main() {
249
254
// Evaluation succeeds and return InstanceRef,
250
255
// so event is marked as success.
251
256
var events = expectLater (
252
- context.testServer.dwds.events,
253
- emitsThrough (predicate ((DwdsEvent event) =>
254
- event.type == DwdsEventKind .evaluateInFrame &&
255
- event.payload['success' ] == true &&
256
- event.payload['error' ] == null &&
257
- event.payload['exception' ] == null &&
258
- event.payload['elapsedMilliseconds' ] != null )));
257
+ pipe (context.testServer.dwds.events),
258
+ emitsThrough (matchesEvent (DwdsEventKind .evaluateInFrame, {
259
+ 'expression' : 'true' ,
260
+ 'success' : isTrue,
261
+ 'elapsedMilliseconds' : isNotNull,
262
+ })));
259
263
try {
260
264
await service.evaluateInFrame (
261
265
isolateId,
@@ -288,12 +292,10 @@ void main() {
288
292
289
293
test ('emits GET_SOURCE_REPORT events' , () async {
290
294
var events = expectLater (
291
- context.testServer.dwds.events,
292
- emitsThrough (
293
- predicate ((DwdsEvent event) =>
294
- event.type == DwdsEventKind .getSourceReport &&
295
- event.payload['elapsedMilliseconds' ] != null ),
296
- ));
295
+ pipe (context.testServer.dwds.events),
296
+ emitsThrough (matchesEvent (DwdsEventKind .getSourceReport, {
297
+ 'elapsedMilliseconds' : isNotNull,
298
+ })));
297
299
await service.getSourceReport (
298
300
isolateId, [SourceReportKind .kPossibleBreakpoints],
299
301
scriptId: mainScript.id);
@@ -312,10 +314,10 @@ void main() {
312
314
313
315
test ('emits GET_SCRIPTS events' , () async {
314
316
var events = expectLater (
315
- context.testServer.dwds.events,
316
- emitsThrough (predicate (( DwdsEvent event) =>
317
- event.type == DwdsEventKind .getScripts &&
318
- event.payload[ 'elapsedMilliseconds' ] != null )));
317
+ pipe ( context.testServer.dwds.events) ,
318
+ emitsThrough (matchesEvent ( DwdsEventKind .getScripts, {
319
+ 'elapsedMilliseconds' : isNotNull,
320
+ } )));
319
321
await service.getScripts (isolateId);
320
322
await events;
321
323
});
@@ -332,10 +334,10 @@ void main() {
332
334
333
335
test ('emits GET_ISOLATE events' , () async {
334
336
var events = expectLater (
335
- context.testServer.dwds.events,
336
- emitsThrough (predicate (( DwdsEvent event) =>
337
- event.type == DwdsEventKind .getIsolate &&
338
- event.payload[ 'elapsedMilliseconds' ] != null )));
337
+ pipe ( context.testServer.dwds.events) ,
338
+ emitsThrough (matchesEvent ( DwdsEventKind .getIsolate, {
339
+ 'elapsedMilliseconds' : isNotNull,
340
+ } )));
339
341
await service.getIsolate (isolateId);
340
342
await events;
341
343
});
@@ -348,10 +350,10 @@ void main() {
348
350
349
351
test ('emits GET_VM events' , () async {
350
352
var events = expectLater (
351
- context.testServer.dwds.events,
352
- emitsThrough (predicate (( DwdsEvent event) =>
353
- event.type == DwdsEventKind .getVM &&
354
- event.payload[ 'elapsedMilliseconds' ] != null )));
353
+ pipe ( context.testServer.dwds.events) ,
354
+ emitsThrough (matchesEvent ( DwdsEventKind .getVM, {
355
+ 'elapsedMilliseconds' : isNotNull,
356
+ } )));
355
357
await service.getVM ();
356
358
await events;
357
359
});
@@ -388,10 +390,11 @@ void main() {
388
390
389
391
test ('emits RESUME events' , () async {
390
392
var events = expectLater (
391
- context.testServer.dwds.events,
392
- emitsThrough (predicate ((DwdsEvent event) =>
393
- event.type == DwdsEventKind .resume &&
394
- event.payload['elapsedMilliseconds' ] != null )));
393
+ pipe (context.testServer.dwds.events),
394
+ emitsThrough (matchesEvent (DwdsEventKind .resume, {
395
+ 'step' : 'Into' ,
396
+ 'elapsedMilliseconds' : isNotNull,
397
+ })));
395
398
await service.resume (isolateId, step: 'Into' );
396
399
await events;
397
400
});
0 commit comments