OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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"); | 5 #library("test_runner"); |
6 | 6 |
7 #import("status_file_parser.dart"); | 7 #import("status_file_parser.dart"); |
8 #import("test_progress.dart"); | 8 #import("test_progress.dart"); |
| 9 #import("test_suite.dart"); |
9 | 10 |
10 /** | 11 /** |
11 * Classes and methods for executing tests. | 12 * Classes and methods for executing tests. |
12 * | 13 * |
13 * This module includes: | 14 * This module includes: |
14 * - Managing parallel execution of tests, including timeout checks. | 15 * - Managing parallel execution of tests, including timeout checks. |
15 * - Evaluating the output of each test as pass/fail/crash/timeout. | 16 * - Evaluating the output of each test as pass/fail/crash/timeout. |
16 */ | 17 */ |
17 | 18 |
18 final int NO_TIMEOUT = 0; | 19 final int NO_TIMEOUT = 0; |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 } | 155 } |
155 | 156 |
156 void timeoutHandler(Timer unusedTimer) { | 157 void timeoutHandler(Timer unusedTimer) { |
157 timedOut = true; | 158 timedOut = true; |
158 process.kill(); | 159 process.kill(); |
159 } | 160 } |
160 } | 161 } |
161 | 162 |
162 | 163 |
163 class ProcessQueue { | 164 class ProcessQueue { |
164 int numProcesses = 0; | 165 int _numProcesses = 0; |
165 final int maxProcesses; | 166 int _activeTestListers = 0; |
166 Queue<TestCase> tests; | 167 final int _maxProcesses; |
167 ProgressIndicator progress; | 168 Queue<TestCase> _tests; |
168 var onDone; | 169 ProgressIndicator _progress; |
169 | 170 |
170 ProcessQueue(int this.maxProcesses, | 171 ProcessQueue(int this._maxProcesses, |
171 String progress, | 172 String progress, |
172 Date start_time, | 173 Date start_time) |
173 this.onDone) | 174 : _tests = new Queue<TestCase>(), |
174 : tests = new Queue<TestCase>(), | 175 _progress = new ProgressIndicator.fromName(progress, start_time); |
175 progress = new ProgressIndicator.fromName(progress, start_time); | |
176 | 176 |
177 tryRunTest() { | 177 addTestSuite(TestSuite testSuite) { |
178 if (tests.isEmpty() && numProcesses == 0) { | 178 _activeTestListers++; |
179 progress.allDone(); | 179 testSuite.forEachTest(_runTest, _testListerDone); |
180 onDone(); | 180 } |
| 181 |
| 182 _testListerDone() { |
| 183 _activeTestListers--; |
| 184 _checkDone(); |
| 185 } |
| 186 |
| 187 _checkDone() { |
| 188 if (_activeTestListers == 0 && _tests.isEmpty() && _numProcesses == 0) { |
| 189 _progress.allDone(); |
181 } | 190 } |
182 if (numProcesses < maxProcesses && !tests.isEmpty()) { | 191 } |
183 TestCase test = tests.removeFirst(); | 192 |
184 progress.start(test); | 193 _runTest(TestCase test) { |
| 194 _progress.testAdded(); |
| 195 _tests.add(test); |
| 196 _tryRunTest(); |
| 197 } |
| 198 |
| 199 _tryRunTest() { |
| 200 _checkDone(); |
| 201 if (_numProcesses < _maxProcesses && !_tests.isEmpty()) { |
| 202 TestCase test = _tests.removeFirst(); |
| 203 _progress.start(test); |
185 Function oldCallback = test.completedHandler; | 204 Function oldCallback = test.completedHandler; |
186 Function wrapper = (TestCase test_arg) { | 205 Function wrapper = (TestCase test_arg) { |
187 numProcesses--; | 206 _numProcesses--; |
188 progress.done(test_arg); | 207 _progress.done(test_arg); |
189 tryRunTest(); | 208 _tryRunTest(); |
190 oldCallback(test_arg); | 209 oldCallback(test_arg); |
191 }; | 210 }; |
192 test.completedHandler = wrapper; | 211 test.completedHandler = wrapper; |
193 new RunningProcess(test, test.timeout).start(); | 212 new RunningProcess(test, test.timeout).start(); |
194 numProcesses++; | 213 _numProcesses++; |
195 } | 214 } |
196 } | 215 } |
197 | |
198 runTest(TestCase test) { | |
199 progress.testAdded(); | |
200 tests.add(test); | |
201 tryRunTest(); | |
202 } | |
203 } | 216 } |
OLD | NEW |