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 |