OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 @TestOn("vm") | 5 @TestOn("vm") |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:isolate'; | 8 import 'dart:isolate'; |
9 | 9 |
| 10 import 'package:test/src/backend/group.dart'; |
10 import 'package:test/src/backend/invoker.dart'; | 11 import 'package:test/src/backend/invoker.dart'; |
11 import 'package:test/src/backend/live_test.dart'; | 12 import 'package:test/src/backend/live_test.dart'; |
12 import 'package:test/src/backend/metadata.dart'; | 13 import 'package:test/src/backend/metadata.dart'; |
13 import 'package:test/src/backend/state.dart'; | 14 import 'package:test/src/backend/state.dart'; |
14 import 'package:test/src/backend/suite.dart'; | 15 import 'package:test/src/backend/suite.dart'; |
15 import 'package:test/src/runner/vm/isolate_listener.dart'; | 16 import 'package:test/src/runner/vm/isolate_listener.dart'; |
16 import 'package:test/src/runner/vm/isolate_test.dart'; | 17 import 'package:test/src/runner/vm/isolate_test.dart'; |
17 import 'package:test/src/util/remote_exception.dart'; | 18 import 'package:test/src/util/remote_exception.dart'; |
18 import 'package:test/test.dart'; | 19 import 'package:test/test.dart'; |
19 | 20 |
(...skipping 14 matching lines...) Expand all Loading... |
34 if (_isolate != null) _isolate.kill(); | 35 if (_isolate != null) _isolate.kill(); |
35 _isolate = null; | 36 _isolate = null; |
36 | 37 |
37 if (_liveTest != null) _liveTest.close(); | 38 if (_liveTest != null) _liveTest.close(); |
38 _liveTest = null; | 39 _liveTest = null; |
39 }); | 40 }); |
40 | 41 |
41 test("sends a list of available tests and groups on startup", () async { | 42 test("sends a list of available tests and groups on startup", () async { |
42 var response = await (await _spawnIsolate(_successfulTests)).first; | 43 var response = await (await _spawnIsolate(_successfulTests)).first; |
43 expect(response, containsPair("type", "success")); | 44 expect(response, containsPair("type", "success")); |
44 expect(response, contains("entries")); | 45 expect(response, contains("root")); |
45 | 46 |
46 var tests = response["entries"]; | 47 var root = response["root"]; |
| 48 expect(root, containsPair("type", "group")); |
| 49 expect(root, containsPair("name", null)); |
| 50 |
| 51 var tests = root["entries"]; |
47 expect(tests, hasLength(3)); | 52 expect(tests, hasLength(3)); |
48 expect(tests[0], containsPair("name", "successful 1")); | 53 expect(tests[0], containsPair("name", "successful 1")); |
49 expect(tests[1], containsPair("name", "successful 2")); | 54 expect(tests[1], containsPair("name", "successful 2")); |
50 expect(tests[2], containsPair("type", "group")); | 55 expect(tests[2], containsPair("type", "group")); |
51 expect(tests[2], containsPair("name", "successful")); | 56 expect(tests[2], containsPair("name", "successful")); |
52 expect(tests[2], contains("entries")); | 57 expect(tests[2], contains("entries")); |
53 expect(tests[2]["entries"][0], containsPair("name", "successful 3")); | 58 expect(tests[2]["entries"][0], containsPair("name", "successful 3")); |
54 }); | 59 }); |
55 | 60 |
56 test("waits for a returned future sending a response", () async { | 61 test("waits for a returned future sending a response", () async { |
57 var response = await (await _spawnIsolate(_asyncTests)).first; | 62 var response = await (await _spawnIsolate(_asyncTests)).first; |
58 expect(response, containsPair("type", "success")); | 63 expect(response, containsPair("type", "success")); |
59 expect(response, contains("entries")); | 64 expect(response, contains("root")); |
60 | 65 |
61 var tests = response["entries"]; | 66 var tests = response["root"]["entries"]; |
62 expect(tests, hasLength(3)); | 67 expect(tests, hasLength(3)); |
63 expect(tests[0], containsPair("name", "successful 1")); | 68 expect(tests[0], containsPair("name", "successful 1")); |
64 expect(tests[1], containsPair("name", "successful 2")); | 69 expect(tests[1], containsPair("name", "successful 2")); |
65 expect(tests[2], containsPair("name", "successful 3")); | 70 expect(tests[2], containsPair("name", "successful 3")); |
66 }); | 71 }); |
67 | 72 |
68 test("sends an error response if loading fails", () async { | 73 test("sends an error response if loading fails", () async { |
69 var response = await (await _spawnIsolate(_loadError)).first; | 74 var response = await (await _spawnIsolate(_loadError)).first; |
70 expect(response, containsPair("type", "error")); | 75 expect(response, containsPair("type", "error")); |
71 expect(response, contains("error")); | 76 expect(response, contains("error")); |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 }); | 264 }); |
260 } | 265 } |
261 | 266 |
262 /// Loads the first test defined in [entryPoint] in another isolate. | 267 /// Loads the first test defined in [entryPoint] in another isolate. |
263 /// | 268 /// |
264 /// This test will be automatically closed when the test is finished. | 269 /// This test will be automatically closed when the test is finished. |
265 Future<LiveTest> _isolateTest(void entryPoint(SendPort sendPort)) async { | 270 Future<LiveTest> _isolateTest(void entryPoint(SendPort sendPort)) async { |
266 var response = await (await _spawnIsolate(entryPoint)).first; | 271 var response = await (await _spawnIsolate(entryPoint)).first; |
267 expect(response, containsPair("type", "success")); | 272 expect(response, containsPair("type", "success")); |
268 | 273 |
269 var testMap = response["entries"].first; | 274 var testMap = response["root"]["entries"].first; |
270 expect(testMap, containsPair("type", "test")); | 275 expect(testMap, containsPair("type", "test")); |
271 var metadata = new Metadata.deserialize(testMap["metadata"]); | 276 var metadata = new Metadata.deserialize(testMap["metadata"]); |
272 var test = new IsolateTest(testMap["name"], metadata, testMap["sendPort"]); | 277 var test = new IsolateTest(testMap["name"], metadata, testMap["sendPort"]); |
273 var suite = new Suite([test]); | 278 var suite = new Suite(new Group.root([test])); |
274 _liveTest = test.load(suite); | 279 _liveTest = test.load(suite); |
275 return _liveTest; | 280 return _liveTest; |
276 } | 281 } |
277 | 282 |
278 /// Spawns an isolate from [entryPoint], sends it a new [SendPort], and returns | 283 /// Spawns an isolate from [entryPoint], sends it a new [SendPort], and returns |
279 /// the corresponding [ReceivePort]. | 284 /// the corresponding [ReceivePort]. |
280 /// | 285 /// |
281 /// This isolate will be automatically killed when the test is finished. | 286 /// This isolate will be automatically killed when the test is finished. |
282 Future<ReceivePort> _spawnIsolate(void entryPoint(SendPort sendPort)) async { | 287 Future<ReceivePort> _spawnIsolate(void entryPoint(SendPort sendPort)) async { |
283 var receivePort = new ReceivePort(); | 288 var receivePort = new ReceivePort(); |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 /// An isolate entrypoint that defines a test that prints twice. | 403 /// An isolate entrypoint that defines a test that prints twice. |
399 void _printTest(SendPort sendPort) { | 404 void _printTest(SendPort sendPort) { |
400 IsolateListener.start(sendPort, new Metadata(), () => () { | 405 IsolateListener.start(sendPort, new Metadata(), () => () { |
401 test("prints", () { | 406 test("prints", () { |
402 print("Hello,"); | 407 print("Hello,"); |
403 return new Future(() => print("world!")); | 408 return new Future(() => print("world!")); |
404 }); | 409 }); |
405 }); | 410 }); |
406 } | 411 } |
407 | 412 |
OLD | NEW |