| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 /** | 5 /** |
| 6 * Classes and methods for executing tests. | 6 * Classes and methods for executing tests. |
| 7 * | 7 * |
| 8 * This module includes: | 8 * This module includes: |
| 9 * - Managing parallel execution of tests, including timeout checks. | 9 * - Managing parallel execution of tests, including timeout checks. |
| 10 * - Evaluating the output of each test as pass/fail/crash/timeout. | 10 * - Evaluating the output of each test as pass/fail/crash/timeout. |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 builder.addJson(_bootstrapDependencies); | 214 builder.addJson(_bootstrapDependencies); |
| 215 } | 215 } |
| 216 | 216 |
| 217 bool _equal(CompilationCommand other) => | 217 bool _equal(CompilationCommand other) => |
| 218 super._equal(other) && | 218 super._equal(other) && |
| 219 _outputFile == other._outputFile && | 219 _outputFile == other._outputFile && |
| 220 _neverSkipCompilation == other._neverSkipCompilation && | 220 _neverSkipCompilation == other._neverSkipCompilation && |
| 221 deepJsonCompare(_bootstrapDependencies, other._bootstrapDependencies); | 221 deepJsonCompare(_bootstrapDependencies, other._bootstrapDependencies); |
| 222 } | 222 } |
| 223 | 223 |
| 224 class KernelCompilationCommand extends CompilationCommand { | |
| 225 KernelCompilationCommand._( | |
| 226 String displayName, | |
| 227 String outputFile, | |
| 228 bool neverSkipCompilation, | |
| 229 List<Uri> bootstrapDependencies, | |
| 230 String executable, | |
| 231 List<String> arguments, | |
| 232 Map<String, String> environmentOverrides) | |
| 233 : super._(displayName, outputFile, neverSkipCompilation, | |
| 234 bootstrapDependencies, executable, arguments, | |
| 235 environmentOverrides); | |
| 236 } | |
| 237 | |
| 238 /// This is just a Pair(String, Map) class with hashCode and operator == | 224 /// This is just a Pair(String, Map) class with hashCode and operator == |
| 239 class AddFlagsKey { | 225 class AddFlagsKey { |
| 240 final String flags; | 226 final String flags; |
| 241 final Map env; | 227 final Map env; |
| 242 AddFlagsKey(this.flags, this.env); | 228 AddFlagsKey(this.flags, this.env); |
| 243 // Just use object identity for environment map | 229 // Just use object identity for environment map |
| 244 bool operator ==(other) => | 230 bool operator ==(other) => |
| 245 other is AddFlagsKey && flags == other.flags && env == other.env; | 231 other is AddFlagsKey && flags == other.flags && env == other.env; |
| 246 int get hashCode => flags.hashCode ^ env.hashCode; | 232 int get hashCode => flags.hashCode ^ env.hashCode; |
| 247 } | 233 } |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 657 displayName, | 643 displayName, |
| 658 outputFile, | 644 outputFile, |
| 659 neverSkipCompilation, | 645 neverSkipCompilation, |
| 660 bootstrapDependencies, | 646 bootstrapDependencies, |
| 661 executable, | 647 executable, |
| 662 arguments, | 648 arguments, |
| 663 environment); | 649 environment); |
| 664 return _getUniqueCommand(command); | 650 return _getUniqueCommand(command); |
| 665 } | 651 } |
| 666 | 652 |
| 667 CompilationCommand getKernelCompilationCommand( | |
| 668 String displayName, | |
| 669 outputFile, | |
| 670 neverSkipCompilation, | |
| 671 List<Uri> bootstrapDependencies, | |
| 672 String executable, | |
| 673 List<String> arguments, | |
| 674 Map<String, String> environment) { | |
| 675 var command = new KernelCompilationCommand._( | |
| 676 displayName, | |
| 677 outputFile, | |
| 678 neverSkipCompilation, | |
| 679 bootstrapDependencies, | |
| 680 executable, | |
| 681 arguments, | |
| 682 environment); | |
| 683 return _getUniqueCommand(command); | |
| 684 } | |
| 685 | |
| 686 AnalysisCommand getAnalysisCommand( | 653 AnalysisCommand getAnalysisCommand( |
| 687 String displayName, executable, arguments, environmentOverrides, | 654 String displayName, executable, arguments, environmentOverrides, |
| 688 {String flavor: 'dart2analyzer'}) { | 655 {String flavor: 'dart2analyzer'}) { |
| 689 var command = new AnalysisCommand._( | 656 var command = new AnalysisCommand._( |
| 690 flavor, displayName, executable, arguments, environmentOverrides); | 657 flavor, displayName, executable, arguments, environmentOverrides); |
| 691 return _getUniqueCommand(command); | 658 return _getUniqueCommand(command); |
| 692 } | 659 } |
| 693 | 660 |
| 694 VmCommand getVmCommand(String executable, List<String> arguments, | 661 VmCommand getVmCommand(String executable, List<String> arguments, |
| 695 Map<String, String> environmentOverrides) { | 662 Map<String, String> environmentOverrides) { |
| (...skipping 939 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1635 assert(exitCode != 0); | 1602 assert(exitCode != 0); |
| 1636 return Expectation.COMPILETIME_ERROR; | 1603 return Expectation.COMPILETIME_ERROR; |
| 1637 } | 1604 } |
| 1638 | 1605 |
| 1639 Expectation outcome = | 1606 Expectation outcome = |
| 1640 exitCode == 0 ? Expectation.PASS : Expectation.COMPILETIME_ERROR; | 1607 exitCode == 0 ? Expectation.PASS : Expectation.COMPILETIME_ERROR; |
| 1641 return _negateOutcomeIfNegativeTest(outcome, testCase.isNegative); | 1608 return _negateOutcomeIfNegativeTest(outcome, testCase.isNegative); |
| 1642 } | 1609 } |
| 1643 } | 1610 } |
| 1644 | 1611 |
| 1645 class KernelCompilationCommandOutputImpl extends CompilationCommandOutputImpl { | |
| 1646 KernelCompilationCommandOutputImpl( | |
| 1647 Command command, int exitCode, bool timedOut, | |
| 1648 List<int> stdout, List<int> stderr, | |
| 1649 Duration time, bool compilationSkipped) | |
| 1650 : super(command, exitCode, timedOut, stdout, stderr, time, | |
| 1651 compilationSkipped); | |
| 1652 | |
| 1653 bool get canRunDependendCommands { | |
| 1654 // See [BatchRunnerProcess]: 0 means success, 1 means compile-time error. | |
| 1655 // TODO(asgerf): When the frontend supports it, continue running even if | |
| 1656 // there were compile-time errors. See kernel_sdk issue #18. | |
| 1657 return !hasCrashed && !timedOut && exitCode == 0; | |
| 1658 } | |
| 1659 | |
| 1660 // If the compiler was able to produce a Kernel IR file we want to run the | |
| 1661 // result on the Dart VM. We therefore mark the [KernelCompilationCommand] as | |
| 1662 // successful. | |
| 1663 // => This ensures we test that the DartVM produces correct CompileTime errors | |
| 1664 // as it is supposed to for our test suites. | |
| 1665 bool get successful => canRunDependendCommands; | |
| 1666 } | |
| 1667 | |
| 1668 class JsCommandlineOutputImpl extends CommandOutputImpl | 1612 class JsCommandlineOutputImpl extends CommandOutputImpl |
| 1669 with UnittestSuiteMessagesMixin { | 1613 with UnittestSuiteMessagesMixin { |
| 1670 JsCommandlineOutputImpl(Command command, int exitCode, bool timedOut, | 1614 JsCommandlineOutputImpl(Command command, int exitCode, bool timedOut, |
| 1671 List<int> stdout, List<int> stderr, Duration time) | 1615 List<int> stdout, List<int> stderr, Duration time) |
| 1672 : super(command, exitCode, timedOut, stdout, stderr, time, false, 0); | 1616 : super(command, exitCode, timedOut, stdout, stderr, time, false, 0); |
| 1673 | 1617 |
| 1674 Expectation result(TestCase testCase) { | 1618 Expectation result(TestCase testCase) { |
| 1675 // Handle crashes and timeouts first | 1619 // Handle crashes and timeouts first |
| 1676 if (hasCrashed) return Expectation.CRASH; | 1620 if (hasCrashed) return Expectation.CRASH; |
| 1677 if (hasTimedOut) return Expectation.TIMEOUT; | 1621 if (hasTimedOut) return Expectation.TIMEOUT; |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1732 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); | 1676 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); |
| 1733 } else if (command is BrowserTestCommand) { | 1677 } else if (command is BrowserTestCommand) { |
| 1734 return new HTMLBrowserCommandOutputImpl( | 1678 return new HTMLBrowserCommandOutputImpl( |
| 1735 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); | 1679 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); |
| 1736 } else if (command is AnalysisCommand) { | 1680 } else if (command is AnalysisCommand) { |
| 1737 return new AnalysisCommandOutputImpl( | 1681 return new AnalysisCommandOutputImpl( |
| 1738 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); | 1682 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); |
| 1739 } else if (command is VmCommand) { | 1683 } else if (command is VmCommand) { |
| 1740 return new VmCommandOutputImpl( | 1684 return new VmCommandOutputImpl( |
| 1741 command, exitCode, timedOut, stdout, stderr, time, pid); | 1685 command, exitCode, timedOut, stdout, stderr, time, pid); |
| 1742 } else if (command is KernelCompilationCommand) { | |
| 1743 return new KernelCompilationCommandOutputImpl( | |
| 1744 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); | |
| 1745 } else if (command is AdbPrecompilationCommand) { | 1686 } else if (command is AdbPrecompilationCommand) { |
| 1746 return new VmCommandOutputImpl( | 1687 return new VmCommandOutputImpl( |
| 1747 command, exitCode, timedOut, stdout, stderr, time, pid); | 1688 command, exitCode, timedOut, stdout, stderr, time, pid); |
| 1748 } else if (command is CompilationCommand) { | 1689 } else if (command is CompilationCommand) { |
| 1749 if (command.displayName == 'precompiler' || | 1690 if (command.displayName == 'precompiler' || |
| 1750 command.displayName == 'dart2snapshot') { | 1691 command.displayName == 'dart2snapshot') { |
| 1751 return new VmCommandOutputImpl( | 1692 return new VmCommandOutputImpl( |
| 1752 command, exitCode, timedOut, stdout, stderr, time, pid); | 1693 command, exitCode, timedOut, stdout, stderr, time, pid); |
| 1753 } | 1694 } |
| 1754 return new CompilationCommandOutputImpl( | 1695 return new CompilationCommandOutputImpl( |
| (...skipping 846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2601 } | 2542 } |
| 2602 return runCommand(command.maxNumRetries); | 2543 return runCommand(command.maxNumRetries); |
| 2603 } | 2544 } |
| 2604 | 2545 |
| 2605 Future<CommandOutput> _runCommand(Command command, int timeout) { | 2546 Future<CommandOutput> _runCommand(Command command, int timeout) { |
| 2606 var batchMode = !globalConfiguration['noBatch']; | 2547 var batchMode = !globalConfiguration['noBatch']; |
| 2607 var dart2jsBatchMode = globalConfiguration['dart2js_batch']; | 2548 var dart2jsBatchMode = globalConfiguration['dart2js_batch']; |
| 2608 | 2549 |
| 2609 if (command is BrowserTestCommand) { | 2550 if (command is BrowserTestCommand) { |
| 2610 return _startBrowserControllerTest(command, timeout); | 2551 return _startBrowserControllerTest(command, timeout); |
| 2611 } else if (command is KernelCompilationCommand) { | |
| 2612 // For now, we always run dartk in batch mode. | |
| 2613 var name = command.displayName; | |
| 2614 assert(name == 'dartk'); | |
| 2615 return _getBatchRunner(name) | |
| 2616 .runCommand(name, command, timeout, command.arguments); | |
| 2617 } else if (command is CompilationCommand && dart2jsBatchMode) { | 2552 } else if (command is CompilationCommand && dart2jsBatchMode) { |
| 2618 return _getBatchRunner("dart2js") | 2553 return _getBatchRunner("dart2js") |
| 2619 .runCommand("dart2js", command, timeout, command.arguments); | 2554 .runCommand("dart2js", command, timeout, command.arguments); |
| 2620 } else if (command is AnalysisCommand && batchMode) { | 2555 } else if (command is AnalysisCommand && batchMode) { |
| 2621 return _getBatchRunner(command.flavor) | 2556 return _getBatchRunner(command.flavor) |
| 2622 .runCommand(command.flavor, command, timeout, command.arguments); | 2557 .runCommand(command.flavor, command, timeout, command.arguments); |
| 2623 } else if (command is ScriptCommand) { | 2558 } else if (command is ScriptCommand) { |
| 2624 return command.run(); | 2559 return command.run(); |
| 2625 } else if (command is AdbPrecompilationCommand) { | 2560 } else if (command is AdbPrecompilationCommand) { |
| 2626 assert(adbDevicePool != null); | 2561 assert(adbDevicePool != null); |
| (...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3139 } | 3074 } |
| 3140 } | 3075 } |
| 3141 | 3076 |
| 3142 void eventAllTestsDone() { | 3077 void eventAllTestsDone() { |
| 3143 for (var listener in _eventListener) { | 3078 for (var listener in _eventListener) { |
| 3144 listener.allDone(); | 3079 listener.allDone(); |
| 3145 } | 3080 } |
| 3146 _allDone(); | 3081 _allDone(); |
| 3147 } | 3082 } |
| 3148 } | 3083 } |
| OLD | NEW |