Index: utils/testrunner/standard_test_runner.dart |
diff --git a/utils/testrunner/standard_test_runner.dart b/utils/testrunner/standard_test_runner.dart |
deleted file mode 100644 |
index cb39ff286e02cae7d55289d57c0f4d438203fc21..0000000000000000000000000000000000000000 |
--- a/utils/testrunner/standard_test_runner.dart |
+++ /dev/null |
@@ -1,268 +0,0 @@ |
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-part of test_controller; |
- |
-/** Path to DRT executable. */ |
-String drt; |
- |
-/** Whether to include elapsed time. */ |
-bool includeTime; |
- |
-/** Whether to regenerate layout test files. */ |
-bool regenerate; |
- |
-/** Whether to output test summary. */ |
-bool summarize; |
- |
-/** Whether to print results immediately as they come in. */ |
-bool immediate; |
- |
-/** Format strings to use for test result messages. */ |
-String listFormat, passFormat, failFormat, errorFormat; |
- |
-/** Path of the running test file. */ |
-String testfile; |
- |
-/** The filters must be set by the caller. */ |
-List includeFilters; |
-List excludeFilters; |
- |
-/** The print function to use. */ |
-Function tprint; |
- |
-/** A callback function to notify the caller we are done. */ |
-Function notifyDone; |
- |
-/** The action function to use. */ |
-Function action; |
- |
-/** |
- * A special marker string used to separate group names and |
- * identify non-debug output. |
- */ |
-final marker = '###'; |
- |
-class Macros { |
- static const String testTime = '<TIME>'; |
- static const String testfile = '<FILENAME>'; |
- static const String testGroup = '<GROUPNAME>'; |
- static const String testDescription = '<TESTNAME>'; |
- static const String testMessage = '<MESSAGE>'; |
- static const String testStacktrace = '<STACK>'; |
-} |
- |
-class TestRunnerConfiguration extends SimpleConfiguration { |
- get name => 'Minimal test runner configuration'; |
- get autoStart => false; |
- |
- void onInit() {} |
- |
- String formatMessage(filename, groupname, |
- [ testname = '', testTime = '', result = '', |
- message = '', stack = '' ]) { |
- var format = errorFormat; |
- if (result == 'pass') format = passFormat; |
- else if (result == 'fail') format = failFormat; |
- return format. |
- replaceAll(Macros.testTime, testTime). |
- replaceAll(Macros.testfile, filename). |
- replaceAll(Macros.testGroup, groupname). |
- replaceAll(Macros.testDescription, testname). |
- replaceAll(Macros.testMessage, message). |
- replaceAll(Macros.testStacktrace, stack); |
- } |
- |
- String elapsed(TestCase t) { |
- if (includeTime) { |
- double duration = t.runningTime.inMilliseconds.toDouble(); |
- duration /= 1000; |
- return '${duration.toStringAsFixed(3)}s '; |
- } else { |
- return ''; |
- } |
- } |
- |
- void dumpTestResult(source, TestCase t) { |
- var groupName = '', testName = ''; |
- var idx = t.description.lastIndexOf(marker); |
- if (idx >= 0) { |
- groupName = t.description.substring(0, idx).replaceAll(marker, ' '); |
- testName = t.description.substring(idx+3); |
- } else { |
- testName = t.description; |
- } |
- var stack = (t.stackTrace == null) ? '' : '${t.stackTrace} '; |
- var message = (t.message.length > 0) ? '${t.message} ' : ''; |
- var duration = elapsed(t); |
- tprint(formatMessage(source, '$groupName ', '$testName ', |
- duration, t.result, message, stack)); |
- } |
- |
- void onTestResult(TestCase testCase) { |
- if (immediate) { |
- dumpTestResult('$testfile ', testCase); |
- } |
- } |
- |
- void printSummary(int passed, int failed, int errors, |
- [String uncaughtError = '']) { |
- tprint(''); |
- if (passed == 0 && failed == 0 && errors == 0) { |
- tprint('$testfile: No tests found.'); |
- } else if (failed == 0 && errors == 0 && uncaughtError == null) { |
- tprint('$testfile: All $passed tests passed.'); |
- } else { |
- if (uncaughtError != null) { |
- tprint('$testfile: Top-level uncaught error: $uncaughtError'); |
- } |
- tprint('$testfile: $passed PASSED, $failed FAILED, $errors ERRORS'); |
- } |
- } |
- |
- void onSummary(int passed, int failed, int errors, |
- List<TestCase> results, String uncaughtError) { |
- if (!immediate) { |
- for (final testCase in results) { |
- dumpTestResult('$testfile ', testCase); |
- } |
- } |
- if (summarize) { |
- printSummary(passed, failed, errors, uncaughtError); |
- } |
- } |
- |
- void onDone(bool success) { |
- if (notifyDone != null) { |
- notifyDone(success ? 0 : -1); |
- } |
- } |
-} |
- |
-String formatListMessage(filename, groupname, [ testname = '']) { |
- return listFormat. |
- replaceAll(Macros.testfile, filename). |
- replaceAll(Macros.testGroup, groupname). |
- replaceAll(Macros.testDescription, testname); |
-} |
- |
-listGroups() { |
- List tests = testCases; |
- Map groups = {}; |
- for (var t in tests) { |
- var groupName, testName = ''; |
- var idx = t.description.lastIndexOf(marker); |
- if (idx >= 0) { |
- groupName = t.description.substring(0, idx).replaceAll(marker, ' '); |
- if (!groups.containsKey(groupName)) { |
- groups[groupName] = ''; |
- } |
- } |
- } |
- for (var g in groups.keys) { |
- var msg = formatListMessage('$testfile ', '$g '); |
- print('$marker$msg'); |
- } |
- if (notifyDone != null) { |
- notifyDone(0); |
- } |
-} |
- |
-listTests() { |
- List tests = testCases; |
- for (var t in tests) { |
- var groupName, testName = ''; |
- var idx = t.description.lastIndexOf(marker); |
- if (idx >= 0) { |
- groupName = t.description.substring(0, idx).replaceAll(marker, ' '); |
- testName = t.description.substring(idx+3); |
- } else { |
- groupName = ''; |
- testName = t.description; |
- } |
- var msg = formatListMessage('$testfile ', '$groupName ', '$testName '); |
- print('$marker$msg'); |
- } |
- if (notifyDone != null) { |
- notifyDone(0); |
- } |
-} |
- |
-// Support for running in isolates. |
- |
-class TestRunnerChildConfiguration extends SimpleConfiguration { |
- get name => 'Test runner child configuration'; |
- get autoStart => false; |
- |
- void onSummary(int passed, int failed, int errors, |
- List<TestCase> results, String uncaughtError) { |
- TestCase test = results[0]; |
- parentPort.send([test.result, test.runningTime.inMilliseconds, |
- test.message, test.stackTrace.toString()]); |
- } |
-} |
- |
-var parentPort; |
-runChildTest(message) { |
- var testName = message[0]; |
- parentPort = message[1]; |
- unittestConfiguration = new TestRunnerChildConfiguration(); |
- groupSep = marker; |
- group('', test.main); |
- filterTests(testName); |
- runTests(); |
-} |
- |
-isolatedTestParentWrapper(testCase) => () { |
- ReceivePort response = new ReceivePort(); |
- return Isolate.spawn(runChildTest, [testCase.description, response.sendPort]) |
- .then((_) => response.first) |
- .then((results) { |
- var result = results[0]; |
- var duration = new Duration(milliseconds: results[1]); |
- var message = results[2]; |
- var stack = results[3]; |
- if (result == 'fail') { |
- testCase.fail(message, stack); |
- } else if (result == 'error') { |
- testCase.error(message, stack); |
- } |
- }); |
-}; |
- |
-runIsolateTests() { |
- // Replace each test with a wrapped version first. |
- for (var i = 0; i < testCases.length; i++) { |
- testCases[i].testFunction = isolatedTestParentWrapper(testCases[i]); |
- } |
- runTests(); |
-} |
- |
-// Main |
- |
-filterTest(t) { |
- var name = t.description.replaceAll(marker, " "); |
- if (includeFilters.length > 0) { |
- for (var f in includeFilters) { |
- if (name.indexOf(f) >= 0) return true; |
- } |
- return false; |
- } else if (excludeFilters.length > 0) { |
- for (var f in excludeFilters) { |
- if (name.indexOf(f) >= 0) return false; |
- } |
- return true; |
- } else { |
- return true; |
- } |
-} |
- |
-process(testMain, action) { |
- groupSep = marker; |
- unittestConfiguration = new TestRunnerConfiguration(); |
- group('', testMain); |
- // Do any user-specified test filtering. |
- filterTests(filterTest); |
- action(); |
-} |