Chromium Code Reviews| 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 class KernelTransformationCommand extends CompilationCommand { | |
| 239 final bool useBatchMode; | |
| 240 | |
| 241 KernelTransformationCommand._( | |
| 242 String displayName, | |
| 243 String outputFile, | |
| 244 bool neverSkipCompilation, | |
| 245 List<Uri> bootstrapDependencies, | |
| 246 String executable, | |
| 247 List<String> arguments, | |
| 248 Map<String, String> environmentOverrides, | |
| 249 this.useBatchMode) | |
| 250 : super._(displayName, outputFile, neverSkipCompilation, | |
| 251 bootstrapDependencies, executable, arguments, | |
| 252 environmentOverrides); | |
|
Bill Hesse
2016/10/21 12:17:39
Override operator == to include useBatchMode?
Vyacheslav Egorov (Google)
2016/10/21 13:39:44
I removed this class because it is not used anymor
| |
| 253 } | |
| 254 | |
| 255 | |
| 224 /// This is just a Pair(String, Map) class with hashCode and operator == | 256 /// This is just a Pair(String, Map) class with hashCode and operator == |
| 225 class AddFlagsKey { | 257 class AddFlagsKey { |
| 226 final String flags; | 258 final String flags; |
| 227 final Map env; | 259 final Map env; |
| 228 AddFlagsKey(this.flags, this.env); | 260 AddFlagsKey(this.flags, this.env); |
| 229 // Just use object identity for environment map | 261 // Just use object identity for environment map |
| 230 bool operator ==(other) => | 262 bool operator ==(other) => |
| 231 other is AddFlagsKey && flags == other.flags && env == other.env; | 263 other is AddFlagsKey && flags == other.flags && env == other.env; |
| 232 int get hashCode => flags.hashCode ^ env.hashCode; | 264 int get hashCode => flags.hashCode ^ env.hashCode; |
| 233 } | 265 } |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 643 displayName, | 675 displayName, |
| 644 outputFile, | 676 outputFile, |
| 645 neverSkipCompilation, | 677 neverSkipCompilation, |
| 646 bootstrapDependencies, | 678 bootstrapDependencies, |
| 647 executable, | 679 executable, |
| 648 arguments, | 680 arguments, |
| 649 environment); | 681 environment); |
| 650 return _getUniqueCommand(command); | 682 return _getUniqueCommand(command); |
| 651 } | 683 } |
| 652 | 684 |
| 685 CompilationCommand getKernelCompilationCommand( | |
| 686 String displayName, | |
| 687 outputFile, | |
| 688 neverSkipCompilation, | |
| 689 List<Uri> bootstrapDependencies, | |
| 690 String executable, | |
| 691 List<String> arguments, | |
| 692 Map<String, String> environment) { | |
| 693 var command = new KernelCompilationCommand._( | |
| 694 displayName, | |
| 695 outputFile, | |
| 696 neverSkipCompilation, | |
| 697 bootstrapDependencies, | |
| 698 executable, | |
| 699 arguments, | |
| 700 environment); | |
| 701 return _getUniqueCommand(command); | |
| 702 } | |
| 703 | |
| 704 CompilationCommand getKernelTransformationCommand( | |
| 705 String transformation, | |
| 706 String executable, | |
| 707 List<String> arguments, | |
| 708 String outputFile, | |
| 709 Map<String, String> environment, | |
| 710 bool useBatchMode) { | |
| 711 var command = new KernelTransformationCommand._( | |
| 712 "kernel_transformation_$transformation", | |
| 713 outputFile, | |
| 714 false, | |
| 715 const [], | |
| 716 executable, | |
| 717 arguments, | |
| 718 environment, | |
| 719 useBatchMode); | |
| 720 return _getUniqueCommand(command); | |
| 721 } | |
| 722 | |
| 723 | |
| 653 AnalysisCommand getAnalysisCommand( | 724 AnalysisCommand getAnalysisCommand( |
| 654 String displayName, executable, arguments, environmentOverrides, | 725 String displayName, executable, arguments, environmentOverrides, |
| 655 {String flavor: 'dart2analyzer'}) { | 726 {String flavor: 'dart2analyzer'}) { |
| 656 var command = new AnalysisCommand._( | 727 var command = new AnalysisCommand._( |
| 657 flavor, displayName, executable, arguments, environmentOverrides); | 728 flavor, displayName, executable, arguments, environmentOverrides); |
| 658 return _getUniqueCommand(command); | 729 return _getUniqueCommand(command); |
| 659 } | 730 } |
| 660 | 731 |
| 661 VmCommand getVmCommand(String executable, List<String> arguments, | 732 VmCommand getVmCommand(String executable, List<String> arguments, |
| 662 Map<String, String> environmentOverrides) { | 733 Map<String, String> environmentOverrides) { |
| (...skipping 939 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1602 assert(exitCode != 0); | 1673 assert(exitCode != 0); |
| 1603 return Expectation.COMPILETIME_ERROR; | 1674 return Expectation.COMPILETIME_ERROR; |
| 1604 } | 1675 } |
| 1605 | 1676 |
| 1606 Expectation outcome = | 1677 Expectation outcome = |
| 1607 exitCode == 0 ? Expectation.PASS : Expectation.COMPILETIME_ERROR; | 1678 exitCode == 0 ? Expectation.PASS : Expectation.COMPILETIME_ERROR; |
| 1608 return _negateOutcomeIfNegativeTest(outcome, testCase.isNegative); | 1679 return _negateOutcomeIfNegativeTest(outcome, testCase.isNegative); |
| 1609 } | 1680 } |
| 1610 } | 1681 } |
| 1611 | 1682 |
| 1683 class KernelCompilationCommandOutputImpl extends CompilationCommandOutputImpl { | |
| 1684 KernelCompilationCommandOutputImpl( | |
| 1685 Command command, int exitCode, bool timedOut, | |
| 1686 List<int> stdout, List<int> stderr, | |
| 1687 Duration time, bool compilationSkipped) | |
| 1688 : super(command, exitCode, timedOut, stdout, stderr, time, | |
| 1689 compilationSkipped); | |
| 1690 | |
| 1691 bool get canRunDependendCommands { | |
| 1692 // See [BatchRunnerProcess]: 0 means success, 1 means compile-time error. | |
| 1693 // TODO(asgerf): When the frontend supports it, continue running even if | |
| 1694 // there were compile-time errors. See kernel_sdk issue #18. | |
| 1695 return !hasCrashed && !timedOut && exitCode == 0; | |
| 1696 } | |
| 1697 | |
| 1698 // If the compiler was able to produce a Kernel IR file we want to run the | |
| 1699 // result on the Dart VM. We therefore mark the [KernelCompilationCommand] as | |
| 1700 // successful. | |
| 1701 // => This ensures we test that the DartVM produces correct CompileTime errors | |
| 1702 // as it is supposed to for our test suites. | |
| 1703 bool get successful => canRunDependendCommands; | |
| 1704 } | |
| 1705 | |
| 1706 class KernelTransformationCommandOutputImpl extends CompilationCommandOutputImpl { | |
| 1707 KernelTransformationCommandOutputImpl( | |
| 1708 Command command, int exitCode, bool timedOut, | |
| 1709 List<int> stdout, List<int> stderr, | |
| 1710 Duration time, bool compilationSkipped) | |
| 1711 : super(command, exitCode, timedOut, stdout, stderr, time, | |
| 1712 compilationSkipped); | |
| 1713 | |
| 1714 bool get canRunDependendCommands { | |
| 1715 return !hasCrashed && !timedOut && exitCode == 0; | |
| 1716 } | |
| 1717 | |
| 1718 bool get successful => canRunDependendCommands; | |
| 1719 } | |
| 1720 | |
| 1612 class JsCommandlineOutputImpl extends CommandOutputImpl | 1721 class JsCommandlineOutputImpl extends CommandOutputImpl |
| 1613 with UnittestSuiteMessagesMixin { | 1722 with UnittestSuiteMessagesMixin { |
| 1614 JsCommandlineOutputImpl(Command command, int exitCode, bool timedOut, | 1723 JsCommandlineOutputImpl(Command command, int exitCode, bool timedOut, |
| 1615 List<int> stdout, List<int> stderr, Duration time) | 1724 List<int> stdout, List<int> stderr, Duration time) |
| 1616 : super(command, exitCode, timedOut, stdout, stderr, time, false, 0); | 1725 : super(command, exitCode, timedOut, stdout, stderr, time, false, 0); |
| 1617 | 1726 |
| 1618 Expectation result(TestCase testCase) { | 1727 Expectation result(TestCase testCase) { |
| 1619 // Handle crashes and timeouts first | 1728 // Handle crashes and timeouts first |
| 1620 if (hasCrashed) return Expectation.CRASH; | 1729 if (hasCrashed) return Expectation.CRASH; |
| 1621 if (hasTimedOut) return Expectation.TIMEOUT; | 1730 if (hasTimedOut) return Expectation.TIMEOUT; |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1676 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); | 1785 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); |
| 1677 } else if (command is BrowserTestCommand) { | 1786 } else if (command is BrowserTestCommand) { |
| 1678 return new HTMLBrowserCommandOutputImpl( | 1787 return new HTMLBrowserCommandOutputImpl( |
| 1679 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); | 1788 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); |
| 1680 } else if (command is AnalysisCommand) { | 1789 } else if (command is AnalysisCommand) { |
| 1681 return new AnalysisCommandOutputImpl( | 1790 return new AnalysisCommandOutputImpl( |
| 1682 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); | 1791 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); |
| 1683 } else if (command is VmCommand) { | 1792 } else if (command is VmCommand) { |
| 1684 return new VmCommandOutputImpl( | 1793 return new VmCommandOutputImpl( |
| 1685 command, exitCode, timedOut, stdout, stderr, time, pid); | 1794 command, exitCode, timedOut, stdout, stderr, time, pid); |
| 1795 } else if (command is KernelCompilationCommand) { | |
| 1796 return new KernelCompilationCommandOutputImpl( | |
| 1797 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); | |
| 1798 } else if (command is KernelTransformationCommand) { | |
| 1799 return new KernelTransformationCommandOutputImpl( | |
| 1800 command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); | |
| 1686 } else if (command is AdbPrecompilationCommand) { | 1801 } else if (command is AdbPrecompilationCommand) { |
| 1687 return new VmCommandOutputImpl( | 1802 return new VmCommandOutputImpl( |
| 1688 command, exitCode, timedOut, stdout, stderr, time, pid); | 1803 command, exitCode, timedOut, stdout, stderr, time, pid); |
| 1689 } else if (command is CompilationCommand) { | 1804 } else if (command is CompilationCommand) { |
| 1690 if (command.displayName == 'precompiler' || | 1805 if (command.displayName == 'precompiler' || |
| 1691 command.displayName == 'dart2snapshot') { | 1806 command.displayName == 'dart2snapshot') { |
| 1692 return new VmCommandOutputImpl( | 1807 return new VmCommandOutputImpl( |
| 1693 command, exitCode, timedOut, stdout, stderr, time, pid); | 1808 command, exitCode, timedOut, stdout, stderr, time, pid); |
| 1694 } | 1809 } |
| 1695 return new CompilationCommandOutputImpl( | 1810 return new CompilationCommandOutputImpl( |
| (...skipping 846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2542 } | 2657 } |
| 2543 return runCommand(command.maxNumRetries); | 2658 return runCommand(command.maxNumRetries); |
| 2544 } | 2659 } |
| 2545 | 2660 |
| 2546 Future<CommandOutput> _runCommand(Command command, int timeout) { | 2661 Future<CommandOutput> _runCommand(Command command, int timeout) { |
| 2547 var batchMode = !globalConfiguration['noBatch']; | 2662 var batchMode = !globalConfiguration['noBatch']; |
| 2548 var dart2jsBatchMode = globalConfiguration['dart2js_batch']; | 2663 var dart2jsBatchMode = globalConfiguration['dart2js_batch']; |
| 2549 | 2664 |
| 2550 if (command is BrowserTestCommand) { | 2665 if (command is BrowserTestCommand) { |
| 2551 return _startBrowserControllerTest(command, timeout); | 2666 return _startBrowserControllerTest(command, timeout); |
| 2667 } else if (command is KernelTransformationCommand) { | |
| 2668 if (command.useBatchMode) { | |
| 2669 // For now, we always run transform.dart in batch mode (if we can). | |
| 2670 var name = command.displayName; | |
| 2671 return _getBatchRunner(name) | |
| 2672 .runCommand(name, command, timeout, command.arguments); | |
| 2673 } else { | |
| 2674 return new RunningProcess(command, timeout).run(); | |
| 2675 } | |
| 2676 } else if (command is KernelCompilationCommand) { | |
| 2677 // For now, we always run dartk in batch mode. | |
| 2678 var name = command.displayName; | |
| 2679 assert(name == 'dartk'); | |
| 2680 return _getBatchRunner(name) | |
| 2681 .runCommand(name, command, timeout, command.arguments); | |
| 2552 } else if (command is CompilationCommand && dart2jsBatchMode) { | 2682 } else if (command is CompilationCommand && dart2jsBatchMode) { |
| 2553 return _getBatchRunner("dart2js") | 2683 return _getBatchRunner("dart2js") |
| 2554 .runCommand("dart2js", command, timeout, command.arguments); | 2684 .runCommand("dart2js", command, timeout, command.arguments); |
| 2555 } else if (command is AnalysisCommand && batchMode) { | 2685 } else if (command is AnalysisCommand && batchMode) { |
| 2556 return _getBatchRunner(command.flavor) | 2686 return _getBatchRunner(command.flavor) |
| 2557 .runCommand(command.flavor, command, timeout, command.arguments); | 2687 .runCommand(command.flavor, command, timeout, command.arguments); |
| 2558 } else if (command is ScriptCommand) { | 2688 } else if (command is ScriptCommand) { |
| 2559 return command.run(); | 2689 return command.run(); |
| 2560 } else if (command is AdbPrecompilationCommand) { | 2690 } else if (command is AdbPrecompilationCommand) { |
| 2561 assert(adbDevicePool != null); | 2691 assert(adbDevicePool != null); |
| (...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3074 } | 3204 } |
| 3075 } | 3205 } |
| 3076 | 3206 |
| 3077 void eventAllTestsDone() { | 3207 void eventAllTestsDone() { |
| 3078 for (var listener in _eventListener) { | 3208 for (var listener in _eventListener) { |
| 3079 listener.allDone(); | 3209 listener.allDone(); |
| 3080 } | 3210 } |
| 3081 _allDone(); | 3211 _allDone(); |
| 3082 } | 3212 } |
| 3083 } | 3213 } |
| OLD | NEW |