Chromium Code Reviews| 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 library test_options_parser; | 5 library test_options_parser; |
| 6 | 6 |
| 7 import "dart:io"; | 7 import "dart:io"; |
| 8 import "drt_updater.dart"; | 8 import "drt_updater.dart"; |
| 9 import "test_suite.dart"; | 9 import "test_suite.dart"; |
| 10 import "path.dart"; | 10 import "path.dart"; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 76 | 76 |
| 77 dart2app: | 77 dart2app: |
| 78 dart2appjit: Compile the Dart code into an app snapshot before running test | 78 dart2appjit: Compile the Dart code into an app snapshot before running test |
| 79 (only valid with dart_app runtime) | 79 (only valid with dart_app runtime) |
| 80 | 80 |
| 81 dartk: Compile the Dart source into Kernel before running test. | 81 dartk: Compile the Dart source into Kernel before running test. |
| 82 | 82 |
| 83 dartkp: Compiler the Dart source into Kernel and then Kernel into AOT | 83 dartkp: Compiler the Dart source into Kernel and then Kernel into AOT |
| 84 snapshot before running the test.''', | 84 snapshot before running the test.''', |
| 85 ['-c', '--compiler'], | 85 ['-c', '--compiler'], |
| 86 ['none', 'precompiler', 'dart2js', 'dart2analyzer', 'dart2app', | 86 [ |
| 87 'dart2appjit', 'dartk', 'dartkp'], | 87 'none', |
| 88 'precompiler', | |
| 89 'dart2js', | |
| 90 'dart2analyzer', | |
| 91 'dart2app', | |
| 92 'dart2appjit', | |
| 93 'dartk', | |
| 94 'dartkp' | |
| 95 ], | |
| 88 'none'), | 96 'none'), |
| 89 // TODO(antonm): fix the option drt. | 97 // TODO(antonm): fix the option drt. |
| 90 new _TestOptionSpecification( | 98 new _TestOptionSpecification( |
| 91 'runtime', | 99 'runtime', |
| 92 '''Where the tests should be run. | 100 '''Where the tests should be run. |
| 93 vm: Run Dart code on the standalone dart vm. | 101 vm: Run Dart code on the standalone dart vm. |
| 94 | 102 |
| 95 dart_precompiled: Run a precompiled snapshot on a variant of the standalone | 103 dart_precompiled: Run a precompiled snapshot on a variant of the standalone |
| 96 dart vm lacking a JIT. | 104 dart vm lacking a JIT. |
| 97 | 105 |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 191 'cps_ir', | 199 'cps_ir', |
| 192 'Run the compiler with the cps based backend', | 200 'Run the compiler with the cps based backend', |
| 193 ['--cps-ir'], | 201 ['--cps-ir'], |
| 194 [], | 202 [], |
| 195 false, | 203 false, |
| 196 type: 'bool'), | 204 type: 'bool'), |
| 197 new _TestOptionSpecification( | 205 new _TestOptionSpecification( |
| 198 'noopt', 'Run an in-place precompilation', ['--noopt'], [], false, | 206 'noopt', 'Run an in-place precompilation', ['--noopt'], [], false, |
| 199 type: 'bool'), | 207 type: 'bool'), |
| 200 new _TestOptionSpecification( | 208 new _TestOptionSpecification( |
| 201 'fast_startup', 'Pass the --fast-startup flag to dart2js', | 209 'fast_startup', |
| 202 ['--fast-startup'], [], false, | 210 'Pass the --fast-startup flag to dart2js', |
| 211 ['--fast-startup'], | |
| 212 [], | |
| 213 false, | |
| 214 type: 'bool'), | |
| 215 new _TestOptionSpecification('hot_reload', 'Run hot reload stress tests', | |
| 216 ['--hot-reload'], [], false, | |
| 203 type: 'bool'), | 217 type: 'bool'), |
| 204 new _TestOptionSpecification( | 218 new _TestOptionSpecification( |
| 205 'hot_reload', 'Run hot reload stress tests', ['--hot-reload'], [], | |
| 206 false, type: 'bool'), | |
| 207 new _TestOptionSpecification( | |
| 208 'hot_reload_rollback', | 219 'hot_reload_rollback', |
| 209 'Run hot reload rollback stress tests', ['--hot-reload-rollback'], | 220 'Run hot reload rollback stress tests', |
| 221 ['--hot-reload-rollback'], | |
| 210 [], | 222 [], |
| 211 false, type: 'bool'), | 223 false, |
| 224 type: 'bool'), | |
|
eernst
2016/11/21 16:41:50
Confusing! Just to check that my understanding mat
| |
| 212 new _TestOptionSpecification( | 225 new _TestOptionSpecification( |
| 213 'use_blobs', | 226 'use_blobs', |
| 214 'Use mmap instead of shared libraries for precompilation', | 227 'Use mmap instead of shared libraries for precompilation', |
| 215 ['--use-blobs'], [], false, type: 'bool'), | 228 ['--use-blobs'], |
| 229 [], | |
| 230 false, | |
| 231 type: 'bool'), | |
| 216 new _TestOptionSpecification( | 232 new _TestOptionSpecification( |
| 217 'timeout', 'Timeout in seconds', ['-t', '--timeout'], [], -1, | 233 'timeout', 'Timeout in seconds', ['-t', '--timeout'], [], -1, |
| 218 type: 'int'), | 234 type: 'int'), |
| 219 new _TestOptionSpecification( | 235 new _TestOptionSpecification( |
| 220 'progress', | 236 'progress', |
| 221 'Progress indication mode', | 237 'Progress indication mode', |
| 222 ['-p', '--progress'], | 238 ['-p', '--progress'], |
| 223 [ | 239 [ |
| 224 'compact', | 240 'compact', |
| 225 'color', | 241 'color', |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 604 'safari', | 620 'safari', |
| 605 'build_directory', | 621 'build_directory', |
| 606 'append_logs', | 622 'append_logs', |
| 607 'local_ip', | 623 'local_ip', |
| 608 'shard', | 624 'shard', |
| 609 'shards', | 625 'shards', |
| 610 ]); | 626 ]); |
| 611 | 627 |
| 612 List<String> _constructReproducingCommandArguments(Map config) { | 628 List<String> _constructReproducingCommandArguments(Map config) { |
| 613 var arguments = new List<String>(); | 629 var arguments = new List<String>(); |
| 614 for (var configKey in config.keys) { | 630 for (var option in _options) { |
| 615 if (!_blacklistedOptions.contains(configKey)) { | 631 var name = option.name; |
| 616 for (var option in _options) { | 632 if (!config.containsKey(name) || _blacklistedOptions.contains(name)) { |
| 617 var configValue = config[configKey]; | 633 continue; |
| 618 // We only include entries of [conf] if we find an option for it. | 634 } |
| 619 if (configKey == option.name && configValue != option.defaultValue) { | 635 var value = config[name]; |
| 620 var isBooleanOption = option.type == 'bool'; | 636 if (config[name] == option.defaultValue || |
| 621 // Sort by length, so we get the shortest variant. | 637 (name == 'packages' && |
| 622 var possibleOptions = new List.from(option.keys); | 638 value == |
| 623 possibleOptions.sort((a, b) => (a.length < b.length ? -1 : 1)); | 639 TestUtils.dartDirUri.resolve('.packages').toFilePath())) { |
| 624 var key = possibleOptions[0]; | 640 continue; |
| 625 if (key.startsWith('--')) { | 641 } |
| 626 // long version | 642 shortest(String a, String b) => a.length <= b.length ? a : b; |
| 627 arguments.add(key); | 643 var key = option.keys.reduce(shortest); |
| 628 if (!isBooleanOption) { | 644 if (option.type == 'bool') { |
| 629 arguments.add("$configValue"); | 645 arguments.add(key); |
| 630 } | 646 } else if (key.startsWith('--')) { |
| 631 } else { | 647 // long version |
| 632 // short version | 648 arguments.add(key); |
| 633 assert(key.startsWith('-')); | 649 arguments.add("$value"); |
| 634 if (!isBooleanOption) { | 650 } else { |
| 635 arguments.add("$key$configValue"); | 651 // short version |
| 636 } else { | 652 assert(key.startsWith('-')); |
| 637 arguments.add(key); | 653 arguments.add("$key$value"); |
| 638 } | |
| 639 } | |
| 640 } | |
| 641 } | |
| 642 } | 654 } |
| 643 } | 655 } |
| 644 return arguments; | 656 return arguments; |
| 645 } | 657 } |
| 646 | 658 |
| 647 /** | 659 /** |
| 648 * Determine if a particular configuration has a valid combination of compiler | 660 * Determine if a particular configuration has a valid combination of compiler |
| 649 * and runtime elements. | 661 * and runtime elements. |
| 650 */ | 662 */ |
| 651 bool _isValidConfig(Map config) { | 663 bool _isValidConfig(Map config) { |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 819 } | 831 } |
| 820 configuration['selectors'] = selectorMap; | 832 configuration['selectors'] = selectorMap; |
| 821 } | 833 } |
| 822 | 834 |
| 823 // Put observatory_ui in a configuration with its own packages override. | 835 // Put observatory_ui in a configuration with its own packages override. |
| 824 // Only one value in the configuration map is mutable: | 836 // Only one value in the configuration map is mutable: |
| 825 selectors = configuration['selectors']; | 837 selectors = configuration['selectors']; |
| 826 if (selectors.containsKey('observatory_ui')) { | 838 if (selectors.containsKey('observatory_ui')) { |
| 827 if (selectors.length == 1) { | 839 if (selectors.length == 1) { |
| 828 configuration['packages'] = TestUtils.dartDirUri | 840 configuration['packages'] = TestUtils.dartDirUri |
| 829 .resolve('runtime/observatory/.packages').toFilePath(); | 841 .resolve('runtime/observatory/.packages') |
| 842 .toFilePath(); | |
| 830 } else { | 843 } else { |
| 831 // Make a new configuration whose selectors map only contains | 844 // Make a new configuration whose selectors map only contains |
| 832 // observatory_ui, and remove the key from the original selectors. | 845 // observatory_ui, and remove the key from the original selectors. |
| 833 // The only mutable value in the map is the selectors, so a | 846 // The only mutable value in the map is the selectors, so a |
| 834 // shallow copy is safe. | 847 // shallow copy is safe. |
| 835 var observatoryConfiguration = new Map.from(configuration); | 848 var observatoryConfiguration = new Map.from(configuration); |
| 836 observatoryConfiguration['selectors'] = | 849 observatoryConfiguration['selectors'] = { |
| 837 {'observatory_ui': selectors['observatory_ui']}; | 850 'observatory_ui': selectors['observatory_ui'] |
| 851 }; | |
| 838 selectors.remove('observatory_ui'); | 852 selectors.remove('observatory_ui'); |
| 839 | 853 |
| 840 // Set the packages flag. | 854 // Set the packages flag. |
| 841 observatoryConfiguration['packages'] = TestUtils.dartDirUri | 855 observatoryConfiguration['packages'] = TestUtils.dartDirUri |
| 842 .resolve('runtime/observatory/.packages').toFilePath(); | 856 .resolve('runtime/observatory/.packages') |
| 857 .toFilePath(); | |
| 843 | 858 |
| 844 // Return the expansions of both configurations. Neither will reach | 859 // Return the expansions of both configurations. Neither will reach |
| 845 // this line in the recursive call to _expandConfigurations. | 860 // this line in the recursive call to _expandConfigurations. |
| 846 return _expandConfigurations(configuration) | 861 return _expandConfigurations(configuration) |
| 847 ..addAll(_expandConfigurations(observatoryConfiguration)); | 862 ..addAll(_expandConfigurations(observatoryConfiguration)); |
| 848 } | 863 } |
| 849 } | 864 } |
| 850 // Set the default package spec explicitly. | 865 // Set the default package spec explicitly. |
| 851 if (configuration['package_root'] == null && | 866 if (configuration['package_root'] == null && |
| 852 configuration['packages'] == null) { | 867 configuration['packages'] == null) { |
| 853 configuration['packages'] = | 868 configuration['packages'] = |
| 854 TestUtils.dartDirUri.resolve('.packages').toFilePath(); | 869 TestUtils.dartDirUri.resolve('.packages').toFilePath(); |
| 855 } | 870 } |
| 856 | 871 |
| 857 // Expand the architectures. | 872 // Expand the architectures. |
| 858 if (configuration['arch'].contains(',')) { | 873 if (configuration['arch'].contains(',')) { |
| 859 return _expandHelper('arch', configuration); | 874 return _expandHelper('arch', configuration); |
| 860 } | 875 } |
| 861 | 876 |
| 862 // Expand modes. | 877 // Expand modes. |
| 863 if (configuration['mode'].contains(',')) { | 878 if (configuration['mode'].contains(',')) { |
| 864 return _expandHelper('mode', configuration); | 879 return _expandHelper('mode', configuration); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 876 } else { | 891 } else { |
| 877 // All runtimes eventually go through this path, after expansion. | 892 // All runtimes eventually go through this path, after expansion. |
| 878 var updater = runtimeUpdater(configuration); | 893 var updater = runtimeUpdater(configuration); |
| 879 if (updater != null) { | 894 if (updater != null) { |
| 880 updater.update(); | 895 updater.update(); |
| 881 } | 896 } |
| 882 } | 897 } |
| 883 | 898 |
| 884 // Adjust default timeout based on mode, compiler, and sometimes runtime. | 899 // Adjust default timeout based on mode, compiler, and sometimes runtime. |
| 885 if (configuration['timeout'] == -1) { | 900 if (configuration['timeout'] == -1) { |
| 886 var isReload = configuration['hot_reload'] || | 901 var isReload = |
| 887 configuration['hot_reload_rollback']; | 902 configuration['hot_reload'] || configuration['hot_reload_rollback']; |
| 888 int compilerMulitiplier = | 903 int compilerMulitiplier = |
| 889 new CompilerConfiguration(configuration).computeTimeoutMultiplier(); | 904 new CompilerConfiguration(configuration).computeTimeoutMultiplier(); |
| 890 int runtimeMultiplier = new RuntimeConfiguration(configuration) | 905 int runtimeMultiplier = new RuntimeConfiguration(configuration) |
| 891 .computeTimeoutMultiplier( | 906 .computeTimeoutMultiplier( |
| 892 mode: configuration['mode'], | 907 mode: configuration['mode'], |
| 893 isChecked: configuration['checked'], | 908 isChecked: configuration['checked'], |
| 894 isReload: isReload, | 909 isReload: isReload, |
| 895 arch: configuration['arch']); | 910 arch: configuration['arch']); |
| 896 configuration['timeout'] = 60 * compilerMulitiplier * runtimeMultiplier; | 911 configuration['timeout'] = 60 * compilerMulitiplier * runtimeMultiplier; |
| 897 } | 912 } |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 971 if (option.keys.contains(name)) { | 986 if (option.keys.contains(name)) { |
| 972 return option; | 987 return option; |
| 973 } | 988 } |
| 974 } | 989 } |
| 975 print('Unknown test option $name'); | 990 print('Unknown test option $name'); |
| 976 exit(1); | 991 exit(1); |
| 977 } | 992 } |
| 978 | 993 |
| 979 List<_TestOptionSpecification> _options; | 994 List<_TestOptionSpecification> _options; |
| 980 } | 995 } |
| OLD | NEW |