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 library test.runner.browser.iframe_listener; | 5 library test.runner.browser.iframe_listener; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:convert'; | 8 import 'dart:convert'; |
9 import 'dart:html' hide Metadata; | 9 import 'dart:html' hide Metadata; |
10 | 10 |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 | 124 |
125 /// Send information about [_suite] across [channel] and start listening for | 125 /// Send information about [_suite] across [channel] and start listening for |
126 /// commands to run the tests. | 126 /// commands to run the tests. |
127 void _listen(MultiChannel channel) { | 127 void _listen(MultiChannel channel) { |
128 channel.sink.add({ | 128 channel.sink.add({ |
129 "type": "success", | 129 "type": "success", |
130 "root": _serializeGroup(channel, _suite.group) | 130 "root": _serializeGroup(channel, _suite.group) |
131 }); | 131 }); |
132 } | 132 } |
133 | 133 |
134 /// Serializes [entries] into a JSON-safe map. | 134 /// Serializes [group] into a JSON-safe map. |
135 Map _serializeGroup(MultiChannel channel, Group group) { | 135 Map _serializeGroup(MultiChannel channel, Group group) { |
136 return { | 136 return { |
137 "type": "group", | 137 "type": "group", |
138 "name": group.name, | 138 "name": group.name, |
139 "metadata": group.metadata.serialize(), | 139 "metadata": group.metadata.serialize(), |
| 140 "setUpAll": _serializeTest(channel, group.setUpAll), |
| 141 "tearDownAll": _serializeTest(channel, group.tearDownAll), |
140 "entries": group.entries.map((entry) { | 142 "entries": group.entries.map((entry) { |
141 if (entry is Group) return _serializeGroup(channel, entry); | 143 return entry is Group |
| 144 ? _serializeGroup(channel, entry) |
| 145 : _serializeTest(channel, entry); |
| 146 }).toList() |
| 147 }; |
| 148 } |
142 | 149 |
143 var test = entry as Test; | 150 /// Serializes [test] into a JSON-safe map. |
144 var testChannel = channel.virtualChannel(); | 151 /// |
145 testChannel.stream.listen((message) { | 152 /// Returns `null` if [test] is `null`. |
146 assert(message['command'] == 'run'); | 153 Map _serializeTest(MultiChannel channel, Test test) { |
147 _runTest(test, channel.virtualChannel(message['channel'])); | 154 if (test == null) return null; |
148 }); | |
149 | 155 |
150 return { | 156 var testChannel = channel.virtualChannel(); |
151 "type": "test", | 157 testChannel.stream.listen((message) { |
152 "name": test.name, | 158 assert(message['command'] == 'run'); |
153 "metadata": test.metadata.serialize(), | 159 _runTest(test, channel.virtualChannel(message['channel'])); |
154 "channel": testChannel.id | 160 }); |
155 }; | 161 |
156 }).toList() | 162 return { |
| 163 "type": "test", |
| 164 "name": test.name, |
| 165 "metadata": test.metadata.serialize(), |
| 166 "channel": testChannel.id |
157 }; | 167 }; |
158 } | 168 } |
159 | 169 |
160 /// Runs [test] and sends the results across [channel]. | 170 /// Runs [test] and sends the results across [channel]. |
161 void _runTest(Test test, MultiChannel channel) { | 171 void _runTest(Test test, MultiChannel channel) { |
162 var liveTest = test.load(_suite); | 172 var liveTest = test.load(_suite); |
163 | 173 |
164 channel.stream.listen((message) { | 174 channel.stream.listen((message) { |
165 assert(message['command'] == 'close'); | 175 assert(message['command'] == 'close'); |
166 liveTest.close(); | 176 liveTest.close(); |
(...skipping 16 matching lines...) Expand all Loading... |
183 }); | 193 }); |
184 | 194 |
185 liveTest.onPrint.listen((line) { | 195 liveTest.onPrint.listen((line) { |
186 print(line); | 196 print(line); |
187 channel.sink.add({"type": "print", "line": line}); | 197 channel.sink.add({"type": "print", "line": line}); |
188 }); | 198 }); |
189 | 199 |
190 liveTest.run().then((_) => channel.sink.add({"type": "complete"})); | 200 liveTest.run().then((_) => channel.sink.add({"type": "complete"})); |
191 } | 201 } |
192 } | 202 } |
OLD | NEW |