OLD | NEW |
| (Empty) |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | |
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. | |
4 | |
5 part of unittestTest; | |
6 | |
7 Future _defer(void fn()) { | |
8 return new Future.sync(fn); | |
9 } | |
10 | |
11 String buildStatusString(int passed, int failed, int errors, | |
12 var results, | |
13 {int count: 0, | |
14 String setup: '', String teardown: '', | |
15 String uncaughtError: null, | |
16 String message: ''}) { | |
17 var totalTests = 0; | |
18 var testDetails = new StringBuffer(); | |
19 if (results == null) { | |
20 // no op | |
21 assert(message == ''); | |
22 } else if (results is String) { | |
23 totalTests = passed + failed + errors; | |
24 testDetails.write(':$results:$message'); | |
25 } else { | |
26 totalTests = results.length; | |
27 for (var i = 0; i < results.length; i++) { | |
28 testDetails.write(':${results[i].description}:' | |
29 '${collapseWhitespace(results[i].message)}'); | |
30 } | |
31 } | |
32 return '$passed:$failed:$errors:$totalTests:$count:' | |
33 '$setup:$teardown:$uncaughtError$testDetails'; | |
34 } | |
35 | |
36 class TestConfiguration extends Configuration { | |
37 | |
38 // Some test state that is captured. | |
39 int count = 0; // A count of callbacks. | |
40 String setup = ''; // The name of the test group setup function, if any. | |
41 String teardown = ''; // The name of the group teardown function, if any. | |
42 | |
43 // The port to communicate with the parent isolate | |
44 final SendPort _port; | |
45 String _result; | |
46 | |
47 TestConfiguration(this._port): super.blank(); | |
48 | |
49 void onSummary(int passed, int failed, int errors, List<TestCase> results, | |
50 String uncaughtError) { | |
51 _result = buildStatusString(passed, failed, errors, results, | |
52 count: count, setup: setup, teardown: teardown, | |
53 uncaughtError: uncaughtError); | |
54 } | |
55 | |
56 void onDone(bool success) { | |
57 _port.send(_result); | |
58 } | |
59 } | |
60 | |
61 Function makeDelayedSetup(index, s) => () { | |
62 return new Future.delayed(new Duration(milliseconds: 1), () { | |
63 s.write('l$index U '); | |
64 }); | |
65 }; | |
66 | |
67 Function makeDelayedTeardown(index, s) => () { | |
68 return new Future.delayed(new Duration(milliseconds: 1), () { | |
69 s.write('l$index D '); | |
70 }); | |
71 }; | |
72 | |
73 Function makeImmediateSetup(index, s) => () { | |
74 s.write('l$index U '); | |
75 }; | |
76 | |
77 Function makeImmediateTeardown(index, s) => () { | |
78 s.write('l$index D '); | |
79 }; | |
80 | |
81 void runTestInIsolate(sendport) { | |
82 var testConfig = new TestConfiguration(sendport); | |
83 unittestConfiguration = testConfig; | |
84 testFunction(testConfig); | |
85 } | |
86 | |
87 void main() { | |
88 var replyPort = new ReceivePort(); | |
89 Isolate.spawn(runTestInIsolate, replyPort.sendPort); | |
90 replyPort.first.then((String msg) { | |
91 expect(msg.trim(), expected); | |
92 }); | |
93 } | |
OLD | NEW |