| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 runtime_configuration; | 5 import 'dart:io'; |
| 6 | 6 |
| 7 import 'dart:io' show Directory, File; | 7 import 'compiler_configuration.dart'; |
| 8 | 8 import 'configuration.dart'; |
| 9 import 'compiler_configuration.dart' show CommandArtifact; | |
| 10 | |
| 11 // TODO(ahe): Remove this import, we can precompute all the values required | 9 // TODO(ahe): Remove this import, we can precompute all the values required |
| 12 // from TestSuite once the refactoring is complete. | 10 // from TestSuite once the refactoring is complete. |
| 13 import 'test_suite.dart' show TestSuite, TestUtils; | 11 import 'test_suite.dart'; |
| 14 | 12 import 'test_runner.dart'; |
| 15 import 'test_runner.dart' show Command, CommandBuilder; | |
| 16 | 13 |
| 17 /// Describes the commands to run a given test case or its compiled output. | 14 /// Describes the commands to run a given test case or its compiled output. |
| 18 /// | 15 /// |
| 19 /// A single runtime configuration object exists per test suite, and is thus | 16 /// A single runtime configuration object exists per test suite, and is thus |
| 20 /// shared between multiple test cases, it should not be mutated after | 17 /// shared between multiple test cases, it should not be mutated after |
| 21 /// construction. | 18 /// construction. |
| 22 // | 19 abstract class RuntimeConfiguration { |
| 23 // TODO(ahe): I expect this class will become abstract very soon. | 20 factory RuntimeConfiguration(Configuration configuration) { |
| 24 class RuntimeConfiguration { | 21 switch (configuration.runtime) { |
| 25 // TODO(ahe): Remove this constructor and move the switch to | 22 case Runtime.contentShellOnAndroid: |
| 26 // test_options.dart. We probably want to store an instance of | 23 case Runtime.dartiumOnAndroid: |
| 27 // [RuntimeConfiguration] in [configuration] there. | 24 case Runtime.chrome: |
| 28 factory RuntimeConfiguration(Map<String, dynamic> configuration) { | 25 case Runtime.chromeOnAndroid: |
| 29 var runtime = configuration['runtime'] as String; | 26 case Runtime.dartium: |
| 30 var useBlobs = configuration['use_blobs'] as bool; | 27 case Runtime.firefox: |
| 31 | 28 case Runtime.ie11: |
| 32 switch (runtime) { | 29 case Runtime.ie10: |
| 33 case 'ContentShellOnAndroid': | 30 case Runtime.ie9: |
| 34 case 'DartiumOnAndroid': | 31 case Runtime.opera: |
| 35 case 'chrome': | 32 case Runtime.safari: |
| 36 case 'chromeOnAndroid': | 33 case Runtime.safariMobileSim: |
| 37 case 'dartium': | |
| 38 case 'ff': | |
| 39 case 'firefox': | |
| 40 case 'ie11': | |
| 41 case 'ie10': | |
| 42 case 'ie9': | |
| 43 case 'opera': | |
| 44 case 'safari': | |
| 45 case 'safarimobilesim': | |
| 46 // TODO(ahe): Replace this with one or more browser runtimes. | 34 // TODO(ahe): Replace this with one or more browser runtimes. |
| 47 return new DummyRuntimeConfiguration(); | 35 return new DummyRuntimeConfiguration(); |
| 48 | 36 |
| 49 case 'jsshell': | 37 case Runtime.jsshell: |
| 50 return new JsshellRuntimeConfiguration(); | 38 return new JsshellRuntimeConfiguration(); |
| 51 | 39 |
| 52 case 'd8': | 40 case Runtime.d8: |
| 53 return new D8RuntimeConfiguration(); | 41 return new D8RuntimeConfiguration(); |
| 54 | 42 |
| 55 case 'none': | 43 case Runtime.none: |
| 56 return new NoneRuntimeConfiguration(); | 44 return new NoneRuntimeConfiguration(); |
| 57 | 45 |
| 58 case 'vm': | 46 case Runtime.vm: |
| 59 return new StandaloneDartRuntimeConfiguration(); | 47 return new StandaloneDartRuntimeConfiguration(); |
| 60 | 48 |
| 61 case 'flutter': | 49 case Runtime.flutter: |
| 62 return new StandaloneFlutterEngineConfiguration(); | 50 return new StandaloneFlutterEngineConfiguration(); |
| 63 | 51 |
| 64 case 'dart_precompiled': | 52 case Runtime.dartPrecompiled: |
| 65 if (configuration['system'] == 'android') { | 53 if (configuration.system == System.android) { |
| 66 return new DartPrecompiledAdbRuntimeConfiguration(useBlobs: useBlobs); | 54 return new DartPrecompiledAdbRuntimeConfiguration( |
| 55 useBlobs: configuration.useBlobs); |
| 56 } else { |
| 57 return new DartPrecompiledRuntimeConfiguration( |
| 58 useBlobs: configuration.useBlobs); |
| 67 } | 59 } |
| 68 return new DartPrecompiledRuntimeConfiguration(useBlobs: useBlobs); | 60 break; |
| 69 | 61 |
| 70 case 'drt': | 62 case Runtime.drt: |
| 71 return new DrtRuntimeConfiguration(); | 63 return new DrtRuntimeConfiguration(); |
| 72 | 64 |
| 73 case 'self_check': | 65 case Runtime.selfCheck: |
| 74 return new SelfCheckRuntimeConfiguration(); | 66 return new SelfCheckRuntimeConfiguration(); |
| 67 } |
| 75 | 68 |
| 76 default: | 69 throw "unreachable"; |
| 77 throw "Unknown runtime '$runtime'"; | |
| 78 } | |
| 79 } | 70 } |
| 80 | 71 |
| 81 RuntimeConfiguration._subclass(); | 72 RuntimeConfiguration._subclass(); |
| 82 | 73 |
| 83 int computeTimeoutMultiplier( | 74 int timeoutMultiplier( |
| 84 {String mode, bool isChecked: false, bool isReload: false, String arch}) { | 75 {Mode mode, |
| 76 bool isChecked: false, |
| 77 bool isReload: false, |
| 78 Architecture arch}) { |
| 85 return 1; | 79 return 1; |
| 86 } | 80 } |
| 87 | 81 |
| 88 List<Command> computeRuntimeCommands( | 82 List<Command> computeRuntimeCommands( |
| 89 TestSuite suite, | 83 TestSuite suite, |
| 90 CommandBuilder commandBuilder, | 84 CommandBuilder commandBuilder, |
| 91 CommandArtifact artifact, | 85 CommandArtifact artifact, |
| 92 List<String> arguments, | 86 List<String> arguments, |
| 93 Map<String, String> environmentOverrides) { | 87 Map<String, String> environmentOverrides) { |
| 94 // TODO(ahe): Make this method abstract. | 88 // TODO(ahe): Make this method abstract. |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 | 163 |
| 170 List<String> dart2jsPreambles(Uri preambleDir) { | 164 List<String> dart2jsPreambles(Uri preambleDir) { |
| 171 return ['-f', preambleDir.resolve('jsshell.js').toFilePath(), '-f']; | 165 return ['-f', preambleDir.resolve('jsshell.js').toFilePath(), '-f']; |
| 172 } | 166 } |
| 173 } | 167 } |
| 174 | 168 |
| 175 /// Common runtime configuration for runtimes based on the Dart VM. | 169 /// Common runtime configuration for runtimes based on the Dart VM. |
| 176 class DartVmRuntimeConfiguration extends RuntimeConfiguration { | 170 class DartVmRuntimeConfiguration extends RuntimeConfiguration { |
| 177 DartVmRuntimeConfiguration() : super._subclass(); | 171 DartVmRuntimeConfiguration() : super._subclass(); |
| 178 | 172 |
| 179 int computeTimeoutMultiplier( | 173 int timeoutMultiplier( |
| 180 {String mode, bool isChecked: false, bool isReload: false, String arch}) { | 174 {Mode mode, |
| 181 int multiplier = 1; | 175 bool isChecked: false, |
| 176 bool isReload: false, |
| 177 Architecture arch}) { |
| 178 var multiplier = 1; |
| 179 |
| 182 switch (arch) { | 180 switch (arch) { |
| 183 case 'simarm': | 181 case Architecture.simarm: |
| 184 case 'arm': | 182 case Architecture.arm: |
| 185 case 'simarmv6': | 183 case Architecture.simarmv6: |
| 186 case 'armv6': | 184 case Architecture.armv6: |
| 187 case ' simarmv5te': | 185 case Architecture.simarmv5te: |
| 188 case 'armv5te': | 186 case Architecture.armv5te: |
| 189 case 'simmips': | 187 case Architecture.simmips: |
| 190 case 'mips': | 188 case Architecture.mips: |
| 191 case 'simarm64': | 189 case Architecture.simarm64: |
| 192 case 'simdbc': | 190 case Architecture.simdbc: |
| 193 case 'simdbc64': | 191 case Architecture.simdbc64: |
| 194 multiplier *= 4; | 192 multiplier *= 4; |
| 195 break; | 193 break; |
| 196 } | 194 } |
| 197 if (mode == 'debug') { | 195 |
| 196 if (mode.isDebug) { |
| 198 multiplier *= 2; | 197 multiplier *= 2; |
| 199 if (isReload) { | 198 if (isReload) { |
| 200 multiplier *= 2; | 199 multiplier *= 2; |
| 201 } | 200 } |
| 202 } | 201 } |
| 203 return multiplier; | 202 return multiplier; |
| 204 } | 203 } |
| 205 } | 204 } |
| 206 | 205 |
| 207 /// Runtime configuration for Content Shell. We previously used a similar | 206 /// Runtime configuration for Content Shell. We previously used a similar |
| 208 /// program named Dump Render Tree, hence the name. | 207 /// program named Dump Render Tree, hence the name. |
| 209 class DrtRuntimeConfiguration extends DartVmRuntimeConfiguration { | 208 class DrtRuntimeConfiguration extends DartVmRuntimeConfiguration { |
| 210 int computeTimeoutMultiplier( | 209 int timeoutMultiplier( |
| 211 {String mode, bool isChecked: false, bool isReload: false, String arch}) { | 210 {Mode mode, |
| 211 bool isChecked: false, |
| 212 bool isReload: false, |
| 213 Architecture arch}) { |
| 212 return 4 // Allow additional time for browser testing to run. | 214 return 4 // Allow additional time for browser testing to run. |
| 213 // TODO(ahe): We might need to distinguish between DRT for running | 215 // TODO(ahe): We might need to distinguish between DRT for running |
| 214 // JavaScript and Dart code. I'm not convinced the inherited timeout | 216 // JavaScript and Dart code. I'm not convinced the inherited timeout |
| 215 // multiplier is relevant for JavaScript. | 217 // multiplier is relevant for JavaScript. |
| 216 * | 218 * |
| 217 super.computeTimeoutMultiplier( | 219 super.timeoutMultiplier( |
| 218 mode: mode, isChecked: isChecked, isReload: isReload); | 220 mode: mode, isChecked: isChecked, isReload: isReload); |
| 219 } | 221 } |
| 220 } | 222 } |
| 221 | 223 |
| 222 /// The standalone Dart VM binary, "dart" or "dart.exe". | 224 /// The standalone Dart VM binary, "dart" or "dart.exe". |
| 223 class StandaloneDartRuntimeConfiguration extends DartVmRuntimeConfiguration { | 225 class StandaloneDartRuntimeConfiguration extends DartVmRuntimeConfiguration { |
| 224 List<Command> computeRuntimeCommands( | 226 List<Command> computeRuntimeCommands( |
| 225 TestSuite suite, | 227 TestSuite suite, |
| 226 CommandBuilder commandBuilder, | 228 CommandBuilder commandBuilder, |
| 227 CommandArtifact artifact, | 229 CommandArtifact artifact, |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 List<Command> computeRuntimeCommands( | 338 List<Command> computeRuntimeCommands( |
| 337 TestSuite suite, | 339 TestSuite suite, |
| 338 CommandBuilder commandBuilder, | 340 CommandBuilder commandBuilder, |
| 339 CommandArtifact artifact, | 341 CommandArtifact artifact, |
| 340 List<String> arguments, | 342 List<String> arguments, |
| 341 Map<String, String> environmentOverrides) { | 343 Map<String, String> environmentOverrides) { |
| 342 String executable = suite.dartVmBinaryFileName; | 344 String executable = suite.dartVmBinaryFileName; |
| 343 return selfCheckers | 345 return selfCheckers |
| 344 .map((String tester) => commandBuilder.getVmBatchCommand( | 346 .map((String tester) => commandBuilder.getVmBatchCommand( |
| 345 executable, tester, arguments, environmentOverrides, | 347 executable, tester, arguments, environmentOverrides, |
| 346 checked: suite.configuration['checked'] as bool)) | 348 checked: suite.configuration.isChecked)) |
| 347 .toList(); | 349 .toList(); |
| 348 } | 350 } |
| 349 | 351 |
| 350 @override | 352 @override |
| 351 bool get shouldSkipNegativeTests => true; | 353 bool get shouldSkipNegativeTests => true; |
| 352 } | 354 } |
| 353 | 355 |
| 354 /// Temporary runtime configuration for browser runtimes that haven't been | 356 /// Temporary runtime configuration for browser runtimes that haven't been |
| 355 /// migrated yet. | 357 /// migrated yet. |
| 356 // TODO(ahe): Remove this class. | 358 // TODO(ahe): Remove this class. |
| 357 class DummyRuntimeConfiguration extends DartVmRuntimeConfiguration { | 359 class DummyRuntimeConfiguration extends DartVmRuntimeConfiguration { |
| 358 List<Command> computeRuntimeCommands( | 360 List<Command> computeRuntimeCommands( |
| 359 TestSuite suite, | 361 TestSuite suite, |
| 360 CommandBuilder commandBuilder, | 362 CommandBuilder commandBuilder, |
| 361 CommandArtifact artifact, | 363 CommandArtifact artifact, |
| 362 List<String> arguments, | 364 List<String> arguments, |
| 363 Map<String, String> environmentOverrides) { | 365 Map<String, String> environmentOverrides) { |
| 364 throw "Unimplemented runtime '$runtimeType'"; | 366 throw "Unimplemented runtime '$runtimeType'"; |
| 365 } | 367 } |
| 366 } | 368 } |
| OLD | NEW |