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. |
11 */ | 11 */ |
12 library test_runner; | 12 library test_runner; |
13 | 13 |
14 import "dart:async"; | 14 import "dart:async"; |
15 import "dart:collection" show Queue; | 15 import "dart:collection" show Queue; |
16 import "dart:convert" show LineSplitter, UTF8, JSON; | 16 import "dart:convert" show LineSplitter, UTF8, JSON; |
17 // We need to use the 'io' prefix here, otherwise io.exitCode will shadow | 17 // We need to use the 'io' prefix here, otherwise io.exitCode will shadow |
18 // CommandOutput.exitCode in subclasses of CommandOutput. | 18 // CommandOutput.exitCode in subclasses of CommandOutput. |
19 import "dart:io" as io; | 19 import "dart:io" as io; |
20 import "dart:math" as math; | 20 import "dart:math" as math; |
21 | |
22 import 'package:yaml/yaml.dart'; | |
23 | |
24 import 'android.dart'; | 21 import 'android.dart'; |
25 import 'dependency_graph.dart' as dgraph; | 22 import 'dependency_graph.dart' as dgraph; |
26 import "browser_controller.dart"; | 23 import "browser_controller.dart"; |
27 import "path.dart"; | 24 import "path.dart"; |
28 import "status_file_parser.dart"; | 25 import "status_file_parser.dart"; |
29 import "test_progress.dart"; | 26 import "test_progress.dart"; |
30 import "test_suite.dart"; | 27 import "test_suite.dart"; |
31 import "utils.dart"; | 28 import "utils.dart"; |
32 import 'record_and_replay.dart'; | 29 import 'record_and_replay.dart'; |
33 | 30 |
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
466 String _destinationFile; | 463 String _destinationFile; |
467 Map<String, Map> _dependencyOverrides; | 464 Map<String, Map> _dependencyOverrides; |
468 | 465 |
469 ModifyPubspecYamlCommand._( | 466 ModifyPubspecYamlCommand._( |
470 this._pubspecYamlFile, this._destinationFile, this._dependencyOverrides) | 467 this._pubspecYamlFile, this._destinationFile, this._dependencyOverrides) |
471 : super._("modify_pubspec") { | 468 : super._("modify_pubspec") { |
472 assert(_pubspecYamlFile.endsWith("pubspec.yaml")); | 469 assert(_pubspecYamlFile.endsWith("pubspec.yaml")); |
473 assert(_destinationFile.endsWith("pubspec.yaml")); | 470 assert(_destinationFile.endsWith("pubspec.yaml")); |
474 } | 471 } |
475 | 472 |
476 static Map<String, Map> _filterOverrides( | |
477 String pubspec, Map<String, Map> overrides) { | |
478 if (overrides.isEmpty) return overrides; | |
479 var yaml = loadYaml(pubspec); | |
480 var deps = yaml['dependencies']; | |
481 var filteredOverrides = <String, Map>{}; | |
482 if (deps != null) { | |
483 for (var d in deps.keys) { | |
484 if (!overrides.containsKey(d)) { | |
485 // pub depends on compiler_unsupported instead of compiler | |
486 // The dependency is so hackish that we currently ignore it here. | |
487 if (d == 'compiler_unsupported') continue; | |
488 throw "Repo doesn't have package $d used in $pubspec"; | |
489 } | |
490 filteredOverrides[d] = overrides[d]; | |
491 } | |
492 } | |
493 return filteredOverrides; | |
494 } | |
495 | |
496 String get reproductionCommand => | 473 String get reproductionCommand => |
497 "Adding necessary dependency overrides to '$_pubspecYamlFile' " | 474 "Adding necessary dependency overrides to '$_pubspecYamlFile' " |
498 "(destination = $_destinationFile)."; | 475 "(destination = $_destinationFile)."; |
499 | 476 |
500 Future<ScriptCommandOutputImpl> run() { | 477 Future<ScriptCommandOutputImpl> run() { |
501 var watch = new Stopwatch()..start(); | 478 var watch = new Stopwatch()..start(); |
502 | 479 |
503 var pubspecLockFile = _destinationFile.substring( | 480 var pubspecLockFile = _destinationFile.substring( |
504 0, _destinationFile.length - ".yaml".length) + | 481 0, _destinationFile.length - ".yaml".length) + |
505 ".lock"; | 482 ".lock"; |
506 | 483 |
507 var file = new io.File(_pubspecYamlFile); | 484 var file = new io.File(_pubspecYamlFile); |
508 var destinationFile = new io.File(_destinationFile); | 485 var destinationFile = new io.File(_destinationFile); |
509 var lockfile = new io.File(pubspecLockFile); | 486 var lockfile = new io.File(pubspecLockFile); |
510 return file.readAsString().then((String yamlString) { | 487 return file.readAsString().then((String yamlString) { |
511 var overrides = _filterOverrides(yamlString, _dependencyOverrides); | |
512 var dependencyOverrideSection = new StringBuffer(); | 488 var dependencyOverrideSection = new StringBuffer(); |
513 if (_dependencyOverrides.isNotEmpty) { | 489 if (_dependencyOverrides.isNotEmpty) { |
514 dependencyOverrideSection.write("\n" | 490 dependencyOverrideSection.write("\n" |
515 "# This section was autogenerated by test.py!\n" | 491 "# This section was autogenerated by test.py!\n" |
516 "dependency_overrides:\n"); | 492 "dependency_overrides:\n"); |
517 overrides.forEach((String packageName, Map override) { | 493 _dependencyOverrides.forEach((String packageName, Map override) { |
518 dependencyOverrideSection.write(" $packageName:\n"); | 494 dependencyOverrideSection.write(" $packageName:\n"); |
519 override.forEach((overrideKey, overrideValue) { | 495 override.forEach((overrideKey, overrideValue) { |
520 dependencyOverrideSection | 496 dependencyOverrideSection |
521 .write(" $overrideKey: $overrideValue\n"); | 497 .write(" $overrideKey: $overrideValue\n"); |
522 }); | 498 }); |
523 }); | 499 }); |
524 } | 500 } |
525 var modifiedYamlString = "$yamlString\n$dependencyOverrideSection"; | 501 var modifiedYamlString = "$yamlString\n$dependencyOverrideSection"; |
526 return destinationFile.writeAsString(modifiedYamlString).then((_) { | 502 return destinationFile.writeAsString(modifiedYamlString).then((_) { |
527 lockfile.exists().then((bool lockfileExists) { | 503 lockfile.exists().then((bool lockfileExists) { |
(...skipping 2523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3051 } | 3027 } |
3052 } | 3028 } |
3053 | 3029 |
3054 void eventAllTestsDone() { | 3030 void eventAllTestsDone() { |
3055 for (var listener in _eventListener) { | 3031 for (var listener in _eventListener) { |
3056 listener.allDone(); | 3032 listener.allDone(); |
3057 } | 3033 } |
3058 _allDone(); | 3034 _allDone(); |
3059 } | 3035 } |
3060 } | 3036 } |
OLD | NEW |