| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 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 | 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 import "dart:io"; | 5 import "dart:io"; |
| 6 import "dart:isolate"; | 6 import "dart:isolate"; |
| 7 import "dart:async"; | 7 import "dart:async"; |
| 8 import "../../../tools/testing/dart/test_runner.dart"; | 8 import "../../../tools/testing/dart/test_runner.dart"; |
| 9 import "../../../tools/testing/dart/test_suite.dart"; | 9 import "../../../tools/testing/dart/test_suite.dart"; |
| 10 import "../../../tools/testing/dart/test_progress.dart" as progress; | 10 import "../../../tools/testing/dart/test_progress.dart" as progress; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 numCompletedTests++; | 34 numCompletedTests++; |
| 35 if (testCase.displayName == "fail-unexpected") { | 35 if (testCase.displayName == "fail-unexpected") { |
| 36 if (!testCase.unexpectedOutput) { | 36 if (!testCase.unexpectedOutput) { |
| 37 var stdout = | 37 var stdout = |
| 38 new String.fromCharCodes(testCase.lastCommandOutput.stdout); | 38 new String.fromCharCodes(testCase.lastCommandOutput.stdout); |
| 39 var stderr = | 39 var stderr = |
| 40 new String.fromCharCodes(testCase.lastCommandOutput.stderr); | 40 new String.fromCharCodes(testCase.lastCommandOutput.stderr); |
| 41 print("stdout = [$stdout]"); | 41 print("stdout = [$stdout]"); |
| 42 print("stderr = [$stderr]"); | 42 print("stderr = [$stderr]"); |
| 43 throw "Test case ${testCase.displayName} passed unexpectedly, " | 43 throw "Test case ${testCase.displayName} passed unexpectedly, " |
| 44 "result == ${testCase.result}"; | 44 "result == ${testCase.result}"; |
| 45 } | 45 } |
| 46 } else { | 46 } else { |
| 47 if (testCase.unexpectedOutput) { | 47 if (testCase.unexpectedOutput) { |
| 48 var stdout = | 48 var stdout = |
| 49 new String.fromCharCodes(testCase.lastCommandOutput.stdout); | 49 new String.fromCharCodes(testCase.lastCommandOutput.stdout); |
| 50 var stderr = | 50 var stderr = |
| 51 new String.fromCharCodes(testCase.lastCommandOutput.stderr); | 51 new String.fromCharCodes(testCase.lastCommandOutput.stderr); |
| 52 print("stdout = [$stdout]"); | 52 print("stdout = [$stdout]"); |
| 53 print("stderr = [$stderr]"); | 53 print("stderr = [$stderr]"); |
| 54 throw "Test case ${testCase.displayName} failed, " | 54 throw "Test case ${testCase.displayName} failed, " |
| 55 "result == ${testCase.result}"; | 55 "result == ${testCase.result}"; |
| 56 } | 56 } |
| 57 } | 57 } |
| 58 } | 58 } |
| 59 | 59 |
| 60 static void finished() { | 60 static void finished() { |
| 61 if (numTests != numCompletedTests) { | 61 if (numTests != numCompletedTests) { |
| 62 throw "bad completion count. " | 62 throw "bad completion count. " |
| 63 "expected: $numTests, actual: $numCompletedTests"; | 63 "expected: $numTests, actual: $numCompletedTests"; |
| 64 } | 64 } |
| 65 } | 65 } |
| 66 } | 66 } |
| 67 | 67 |
| 68 | |
| 69 class CustomTestSuite extends TestSuite { | 68 class CustomTestSuite extends TestSuite { |
| 70 CustomTestSuite(Map configuration) : super(configuration, "CustomTestSuite"); | 69 CustomTestSuite(Map configuration) : super(configuration, "CustomTestSuite"); |
| 71 | 70 |
| 72 void forEachTest(TestCaseEvent onTest, Map testCache, [onDone]) { | 71 void forEachTest(TestCaseEvent onTest, Map testCache, [onDone]) { |
| 73 void enqueueTestCase(testCase) { | 72 void enqueueTestCase(testCase) { |
| 74 TestController.numTests++; | 73 TestController.numTests++; |
| 75 onTest(testCase); | 74 onTest(testCase); |
| 76 } | 75 } |
| 77 | 76 |
| 78 var testCaseCrash = _makeCrashTestCase("crash", [Expectation.CRASH]); | 77 var testCaseCrash = _makeCrashTestCase("crash", [Expectation.CRASH]); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 89 enqueueTestCase(testCaseFailUnexpected); | 88 enqueueTestCase(testCaseFailUnexpected); |
| 90 | 89 |
| 91 if (onDone != null) { | 90 if (onDone != null) { |
| 92 onDone(); | 91 onDone(); |
| 93 } | 92 } |
| 94 } | 93 } |
| 95 | 94 |
| 96 TestCase _makeNormalTestCase(name, expectations) { | 95 TestCase _makeNormalTestCase(name, expectations) { |
| 97 var args = packageOptions(); | 96 var args = packageOptions(); |
| 98 args.addAll([Platform.script.toFilePath(), name]); | 97 args.addAll([Platform.script.toFilePath(), name]); |
| 99 var command = CommandBuilder.instance.getProcessCommand( | 98 var command = CommandBuilder.instance |
| 100 'custom', Platform.executable, | 99 .getProcessCommand('custom', Platform.executable, args, {}); |
| 101 args, | |
| 102 {}); | |
| 103 return _makeTestCase(name, DEFAULT_TIMEOUT, command, expectations); | 100 return _makeTestCase(name, DEFAULT_TIMEOUT, command, expectations); |
| 104 } | 101 } |
| 105 | 102 |
| 106 _makeCrashTestCase(name, expectations) { | 103 _makeCrashTestCase(name, expectations) { |
| 107 var crashCommand = CommandBuilder.instance.getProcessCommand( | 104 var crashCommand = CommandBuilder.instance.getProcessCommand( |
| 108 'custom_crash', getProcessTestFileName(), ["0", "0", "1", "1"], | 105 'custom_crash', getProcessTestFileName(), ["0", "0", "1", "1"], {}); |
| 109 {}); | |
| 110 // The crash test sometimes times out. Run it with a large timeout | 106 // The crash test sometimes times out. Run it with a large timeout |
| 111 // to help diagnose the delay. | 107 // to help diagnose the delay. |
| 112 // The test loads a new executable, which may sometimes take a long time. | 108 // The test loads a new executable, which may sometimes take a long time. |
| 113 // It involves a wait on the VM event loop, and possible system | 109 // It involves a wait on the VM event loop, and possible system |
| 114 // delays. | 110 // delays. |
| 115 return _makeTestCase(name, LONG_TIMEOUT, crashCommand, expectations); | 111 return _makeTestCase(name, LONG_TIMEOUT, crashCommand, expectations); |
| 116 } | 112 } |
| 117 | 113 |
| 118 _makeTestCase(name, timeout, command, expectations) { | 114 _makeTestCase(name, timeout, command, expectations) { |
| 119 var configuration = new TestOptionsParser() | 115 var configuration = |
| 120 .parse(['--timeout', '$timeout'])[0]; | 116 new TestOptionsParser().parse(['--timeout', '$timeout'])[0]; |
| 121 return new TestCase(name, | 117 return new TestCase(name, [command], configuration, |
| 122 [command], | 118 new Set<Expectation>.from(expectations)); |
| 123 configuration, | |
| 124 new Set<Expectation>.from(expectations)); | |
| 125 } | 119 } |
| 126 } | 120 } |
| 127 | 121 |
| 128 void testProcessQueue() { | 122 void testProcessQueue() { |
| 129 var maxProcesses = 2; | 123 var maxProcesses = 2; |
| 130 var maxBrowserProcesses = maxProcesses; | 124 var maxBrowserProcesses = maxProcesses; |
| 131 var config = new TestOptionsParser().parse(['--nobatch'])[0]; | 125 var config = new TestOptionsParser().parse(['--nobatch'])[0]; |
| 132 new ProcessQueue(config, maxProcesses, maxBrowserProcesses, | 126 new ProcessQueue( |
| 133 new DateTime.now(), [new CustomTestSuite(config)], | 127 config, |
| 134 [new EventListener()], TestController.finished); | 128 maxProcesses, |
| 129 maxBrowserProcesses, |
| 130 new DateTime.now(), |
| 131 [new CustomTestSuite(config)], |
| 132 [new EventListener()], |
| 133 TestController.finished); |
| 135 } | 134 } |
| 136 | 135 |
| 137 class EventListener extends progress.EventListener{ | 136 class EventListener extends progress.EventListener { |
| 138 void done(TestCase test) { | 137 void done(TestCase test) { |
| 139 TestController.processCompletedTest(test); | 138 TestController.processCompletedTest(test); |
| 140 } | 139 } |
| 141 } | 140 } |
| 142 | 141 |
| 143 void main(List<String> arguments) { | 142 void main(List<String> arguments) { |
| 144 // This script is in [sdk]/tests/standalone/io. | 143 // This script is in [sdk]/tests/standalone/io. |
| 145 TestUtils.setDartDirUri(Platform.script.resolve('../../..')); | 144 TestUtils.setDartDirUri(Platform.script.resolve('../../..')); |
| 146 // Run the test_runner_test if there are no command-line options. | 145 // Run the test_runner_test if there are no command-line options. |
| 147 // Otherwise, run one of the component tests that always pass, | 146 // Otherwise, run one of the component tests that always pass, |
| 148 // fail, or timeout. | 147 // fail, or timeout. |
| 149 if (arguments.isEmpty) { | 148 if (arguments.isEmpty) { |
| 150 testProcessQueue(); | 149 testProcessQueue(); |
| 151 } else { | 150 } else { |
| 152 switch (arguments[0]) { | 151 switch (arguments[0]) { |
| 153 case 'pass': | 152 case 'pass': |
| 154 return; | 153 return; |
| 155 case 'fail-unexpected': | 154 case 'fail-unexpected': |
| 156 case 'fail': | 155 case 'fail': |
| 157 throw "This test always fails, to test the test scripts."; | 156 throw "This test always fails, to test the test scripts."; |
| 158 break; | 157 break; |
| 159 case 'timeout': | 158 case 'timeout': |
| 160 // This process should be killed by the test after DEFAULT_TIMEOUT | 159 // This process should be killed by the test after DEFAULT_TIMEOUT |
| 161 new Timer(new Duration(hours: 42), (){ }); | 160 new Timer(new Duration(hours: 42), () {}); |
| 162 break; | 161 break; |
| 163 default: | 162 default: |
| 164 throw "Unknown option ${arguments[0]} passed to test_runner_test"; | 163 throw "Unknown option ${arguments[0]} passed to test_runner_test"; |
| 165 } | 164 } |
| 166 } | 165 } |
| 167 } | 166 } |
| OLD | NEW |