| 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 1937 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1948 'run_executable' : | 1948 'run_executable' : |
| 1949 isWindows ? | 1949 isWindows ? |
| 1950 'sdk\\bin\\dartanalyzer_developer.bat' | 1950 'sdk\\bin\\dartanalyzer_developer.bat' |
| 1951 : 'sdk/bin/dartanalyzer_developer', | 1951 : 'sdk/bin/dartanalyzer_developer', |
| 1952 'run_arguments' : ['--batch'], | 1952 'run_arguments' : ['--batch'], |
| 1953 }, | 1953 }, |
| 1954 'dart2analyzer' : { | 1954 'dart2analyzer' : { |
| 1955 // This is a unix shell script, no windows equivalent available | 1955 // This is a unix shell script, no windows equivalent available |
| 1956 'run_executable' : 'editor/tools/analyzer', | 1956 'run_executable' : 'editor/tools/analyzer', |
| 1957 'run_arguments' : ['--batch'], | 1957 'run_arguments' : ['--batch'], |
| 1958 }, | 1958 }, |
| 1959 }; | 1959 }; |
| 1960 | 1960 |
| 1961 Completer<CommandOutput> _completer; | 1961 Completer<CommandOutput> _completer; |
| 1962 Command _command; | 1962 Command _command; |
| 1963 List<String> _arguments; | 1963 List<String> _arguments; |
| 1964 String _runnerType; | 1964 String _runnerType; |
| 1965 | 1965 |
| 1966 io.Process _process; | 1966 io.Process _process; |
| 1967 Map _processEnvironmentOverrides; | 1967 Map _processEnvironmentOverrides; |
| 1968 Completer _stdoutCompleter; | 1968 Completer _stdoutCompleter; |
| 1969 Completer _stderrCompleter; | 1969 Completer _stderrCompleter; |
| 1970 StreamSubscription<String> _stdoutSubscription; | 1970 StreamSubscription<String> _stdoutSubscription; |
| 1971 StreamSubscription<String> _stderrSubscription; | 1971 StreamSubscription<String> _stderrSubscription; |
| 1972 Function _processExitHandler; | 1972 Function _processExitHandler; |
| 1973 | 1973 |
| 1974 bool _currentlyRunning = false; | 1974 bool _currentlyRunning = false; |
| 1975 OutputLog _testStdout; | 1975 OutputLog _testStdout; |
| 1976 OutputLog _testStderr; | 1976 OutputLog _testStderr; |
| 1977 String _status; | 1977 String _status; |
| 1978 DateTime _startTime; | 1978 DateTime _startTime; |
| 1979 Timer _timer; | 1979 Timer _timer; |
| 1980 | 1980 |
| 1981 BatchRunnerProcess(); | 1981 final String _executable; |
| 1982 |
| 1983 BatchRunnerProcess(this._executable); |
| 1982 | 1984 |
| 1983 Future<CommandOutput> runCommand(String runnerType, ProcessCommand command, | 1985 Future<CommandOutput> runCommand(String runnerType, ProcessCommand command, |
| 1984 int timeout, List<String> arguments) { | 1986 int timeout, List<String> arguments) { |
| 1985 assert(_completer == null); | 1987 assert(_completer == null); |
| 1986 assert(!_currentlyRunning); | 1988 assert(!_currentlyRunning); |
| 1987 | 1989 |
| 1988 _completer = new Completer<CommandOutput>(); | 1990 _completer = new Completer<CommandOutput>(); |
| 1989 bool sameRunnerType = _runnerType == runnerType && | 1991 bool sameRunnerType = _runnerType == runnerType && |
| 1990 _dictEquals(_processEnvironmentOverrides, command.environmentOverrides); | 1992 _dictEquals(_processEnvironmentOverrides, command.environmentOverrides); |
| 1991 _runnerType = runnerType; | 1993 _runnerType = runnerType; |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2084 } | 2086 } |
| 2085 return handler; | 2087 return handler; |
| 2086 } | 2088 } |
| 2087 | 2089 |
| 2088 void _timeoutHandler() { | 2090 void _timeoutHandler() { |
| 2089 _processExitHandler = makeExitHandler(">>> TEST TIMEOUT"); | 2091 _processExitHandler = makeExitHandler(">>> TEST TIMEOUT"); |
| 2090 _process.kill(); | 2092 _process.kill(); |
| 2091 } | 2093 } |
| 2092 | 2094 |
| 2093 _startProcess(callback) { | 2095 _startProcess(callback) { |
| 2094 var executable = batchRunnerTypes[_runnerType]['run_executable']; | 2096 var executable; |
| 2095 var arguments = batchRunnerTypes[_runnerType]['run_arguments']; | 2097 var arguments; |
| 2098 if (_runnerType == 'dart2js') { |
| 2099 executable = _executable; |
| 2100 arguments = ['--batch']; |
| 2101 } else { |
| 2102 executable = batchRunnerTypes[_runnerType]['run_executable']; |
| 2103 arguments = batchRunnerTypes[_runnerType]['run_arguments']; |
| 2104 } |
| 2096 var environment = new Map.from(io.Platform.environment); | 2105 var environment = new Map.from(io.Platform.environment); |
| 2097 if (_processEnvironmentOverrides != null) { | 2106 if (_processEnvironmentOverrides != null) { |
| 2098 for (var key in _processEnvironmentOverrides.keys) { | 2107 for (var key in _processEnvironmentOverrides.keys) { |
| 2099 environment[key] = _processEnvironmentOverrides[key]; | 2108 environment[key] = _processEnvironmentOverrides[key]; |
| 2100 } | 2109 } |
| 2101 } | 2110 } |
| 2102 Future processFuture = io.Process.start(executable, | 2111 Future processFuture = io.Process.start(executable, |
| 2103 arguments, | 2112 arguments, |
| 2104 environment: environment); | 2113 environment: environment); |
| 2105 processFuture.then((io.Process p) { | 2114 processFuture.then((io.Process p) { |
| (...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2523 }); | 2532 }); |
| 2524 } | 2533 } |
| 2525 return runCommand(command.maxNumRetries); | 2534 return runCommand(command.maxNumRetries); |
| 2526 } | 2535 } |
| 2527 | 2536 |
| 2528 Future<CommandOutput> _runCommand(Command command, int timeout) { | 2537 Future<CommandOutput> _runCommand(Command command, int timeout) { |
| 2529 var batchMode = !globalConfiguration['noBatch']; | 2538 var batchMode = !globalConfiguration['noBatch']; |
| 2530 | 2539 |
| 2531 if (command is BrowserTestCommand) { | 2540 if (command is BrowserTestCommand) { |
| 2532 return _startBrowserControllerTest(command, timeout); | 2541 return _startBrowserControllerTest(command, timeout); |
| 2542 } else if (command is CompilationCommand && batchMode) { |
| 2543 return _getBatchRunner(command.executable, "dart2js") |
| 2544 .runCommand("dart2js", command, timeout, command.arguments); |
| 2533 } else if (command is AnalysisCommand && batchMode) { | 2545 } else if (command is AnalysisCommand && batchMode) { |
| 2534 return _getBatchRunner(command.flavor) | 2546 return _getBatchRunner(null, command.flavor) |
| 2535 .runCommand(command.flavor, command, timeout, command.arguments); | 2547 .runCommand(command.flavor, command, timeout, command.arguments); |
| 2536 } else if (command is ScriptCommand) { | 2548 } else if (command is ScriptCommand) { |
| 2537 return command.run(); | 2549 return command.run(); |
| 2538 } else { | 2550 } else { |
| 2539 return new RunningProcess(command, timeout).run(); | 2551 return new RunningProcess(command, timeout).run(); |
| 2540 } | 2552 } |
| 2541 } | 2553 } |
| 2542 | 2554 |
| 2543 BatchRunnerProcess _getBatchRunner(String identifier) { | 2555 BatchRunnerProcess _getBatchRunner(String executable, String identifier) { |
| 2544 // Start batch processes if needed | 2556 // Start batch processes if needed |
| 2545 var runners = _batchProcesses[identifier]; | 2557 var runners = _batchProcesses[identifier]; |
| 2546 if (runners == null) { | 2558 if (runners == null) { |
| 2547 runners = new List<BatchRunnerProcess>(maxProcesses); | 2559 runners = new List<BatchRunnerProcess>(maxProcesses); |
| 2548 for (int i = 0; i < maxProcesses; i++) { | 2560 for (int i = 0; i < maxProcesses; i++) { |
| 2549 runners[i] = new BatchRunnerProcess(); | 2561 runners[i] = new BatchRunnerProcess(executable); |
| 2550 } | 2562 } |
| 2551 _batchProcesses[identifier] = runners; | 2563 _batchProcesses[identifier] = runners; |
| 2552 } | 2564 } |
| 2553 | 2565 |
| 2554 for (var runner in runners) { | 2566 for (var runner in runners) { |
| 2555 if (!runner._currentlyRunning) return runner; | 2567 if (!runner._currentlyRunning) return runner; |
| 2556 } | 2568 } |
| 2557 throw new Exception('Unable to find inactive batch runner.'); | 2569 throw new Exception('Unable to find inactive batch runner.'); |
| 2558 } | 2570 } |
| 2559 | 2571 |
| (...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2970 } | 2982 } |
| 2971 } | 2983 } |
| 2972 | 2984 |
| 2973 void eventAllTestsDone() { | 2985 void eventAllTestsDone() { |
| 2974 for (var listener in _eventListener) { | 2986 for (var listener in _eventListener) { |
| 2975 listener.allDone(); | 2987 listener.allDone(); |
| 2976 } | 2988 } |
| 2977 _allDone(); | 2989 _allDone(); |
| 2978 } | 2990 } |
| 2979 } | 2991 } |
| OLD | NEW |