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 import 'dart:io'; | 5 import 'dart:io'; |
6 | 6 |
| 7 import 'command.dart'; |
7 import 'compiler_configuration.dart'; | 8 import 'compiler_configuration.dart'; |
8 import 'configuration.dart'; | 9 import 'configuration.dart'; |
9 // TODO(ahe): Remove this import, we can precompute all the values required | 10 // TODO(ahe): Remove this import, we can precompute all the values required |
10 // from TestSuite once the refactoring is complete. | 11 // from TestSuite once the refactoring is complete. |
11 import 'test_suite.dart'; | 12 import 'test_suite.dart'; |
12 import 'test_runner.dart'; | |
13 import 'utils.dart'; | 13 import 'utils.dart'; |
14 | 14 |
15 /// Describes the commands to run a given test case or its compiled output. | 15 /// Describes the commands to run a given test case or its compiled output. |
16 /// | 16 /// |
17 /// A single runtime configuration object exists per test suite, and is thus | 17 /// A single runtime configuration object exists per test suite, and is thus |
18 /// shared between multiple test cases, it should not be mutated after | 18 /// shared between multiple test cases, it should not be mutated after |
19 /// construction. | 19 /// construction. |
20 abstract class RuntimeConfiguration { | 20 abstract class RuntimeConfiguration { |
21 factory RuntimeConfiguration(Configuration configuration) { | 21 factory RuntimeConfiguration(Configuration configuration) { |
22 switch (configuration.runtime) { | 22 switch (configuration.runtime) { |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 int timeoutMultiplier( | 75 int timeoutMultiplier( |
76 {Mode mode, | 76 {Mode mode, |
77 bool isChecked: false, | 77 bool isChecked: false, |
78 bool isReload: false, | 78 bool isReload: false, |
79 Architecture arch}) { | 79 Architecture arch}) { |
80 return 1; | 80 return 1; |
81 } | 81 } |
82 | 82 |
83 List<Command> computeRuntimeCommands( | 83 List<Command> computeRuntimeCommands( |
84 TestSuite suite, | 84 TestSuite suite, |
85 CommandBuilder commandBuilder, | |
86 CommandArtifact artifact, | 85 CommandArtifact artifact, |
87 List<String> arguments, | 86 List<String> arguments, |
88 Map<String, String> environmentOverrides) { | 87 Map<String, String> environmentOverrides) { |
89 // TODO(ahe): Make this method abstract. | 88 // TODO(ahe): Make this method abstract. |
90 throw "Unimplemented runtime '$runtimeType'"; | 89 throw "Unimplemented runtime '$runtimeType'"; |
91 } | 90 } |
92 | 91 |
93 List<String> dart2jsPreambles(Uri preambleDir) => []; | 92 List<String> dart2jsPreambles(Uri preambleDir) => []; |
94 | 93 |
95 bool get shouldSkipNegativeTests => false; | 94 bool get shouldSkipNegativeTests => false; |
96 } | 95 } |
97 | 96 |
98 /// The 'none' runtime configuration. | 97 /// The 'none' runtime configuration. |
99 class NoneRuntimeConfiguration extends RuntimeConfiguration { | 98 class NoneRuntimeConfiguration extends RuntimeConfiguration { |
100 NoneRuntimeConfiguration() : super._subclass(); | 99 NoneRuntimeConfiguration() : super._subclass(); |
101 | 100 |
102 List<Command> computeRuntimeCommands( | 101 List<Command> computeRuntimeCommands( |
103 TestSuite suite, | 102 TestSuite suite, |
104 CommandBuilder commandBuilder, | |
105 CommandArtifact artifact, | 103 CommandArtifact artifact, |
106 List<String> arguments, | 104 List<String> arguments, |
107 Map<String, String> environmentOverrides) { | 105 Map<String, String> environmentOverrides) { |
108 return <Command>[]; | 106 return <Command>[]; |
109 } | 107 } |
110 } | 108 } |
111 | 109 |
112 class CommandLineJavaScriptRuntime extends RuntimeConfiguration { | 110 class CommandLineJavaScriptRuntime extends RuntimeConfiguration { |
113 final String moniker; | 111 final String moniker; |
114 | 112 |
115 CommandLineJavaScriptRuntime(this.moniker) : super._subclass(); | 113 CommandLineJavaScriptRuntime(this.moniker) : super._subclass(); |
116 | 114 |
117 void checkArtifact(CommandArtifact artifact) { | 115 void checkArtifact(CommandArtifact artifact) { |
118 String type = artifact.mimeType; | 116 String type = artifact.mimeType; |
119 if (type != 'application/javascript') { | 117 if (type != 'application/javascript') { |
120 throw "Runtime '$moniker' cannot run files of type '$type'."; | 118 throw "Runtime '$moniker' cannot run files of type '$type'."; |
121 } | 119 } |
122 } | 120 } |
123 } | 121 } |
124 | 122 |
125 /// Chrome/V8-based development shell (d8). | 123 /// Chrome/V8-based development shell (d8). |
126 class D8RuntimeConfiguration extends CommandLineJavaScriptRuntime { | 124 class D8RuntimeConfiguration extends CommandLineJavaScriptRuntime { |
127 D8RuntimeConfiguration() : super('d8'); | 125 D8RuntimeConfiguration() : super('d8'); |
128 | 126 |
129 List<Command> computeRuntimeCommands( | 127 List<Command> computeRuntimeCommands( |
130 TestSuite suite, | 128 TestSuite suite, |
131 CommandBuilder commandBuilder, | |
132 CommandArtifact artifact, | 129 CommandArtifact artifact, |
133 List<String> arguments, | 130 List<String> arguments, |
134 Map<String, String> environmentOverrides) { | 131 Map<String, String> environmentOverrides) { |
135 // TODO(ahe): Avoid duplication of this method between d8 and jsshell. | 132 // TODO(ahe): Avoid duplication of this method between d8 and jsshell. |
136 checkArtifact(artifact); | 133 checkArtifact(artifact); |
137 return <Command>[ | 134 return [ |
138 commandBuilder.getJSCommandlineCommand( | 135 Command.jsCommandLine( |
139 moniker, suite.d8FileName, arguments, environmentOverrides) | 136 moniker, suite.d8FileName, arguments, environmentOverrides) |
140 ]; | 137 ]; |
141 } | 138 } |
142 | 139 |
143 List<String> dart2jsPreambles(Uri preambleDir) { | 140 List<String> dart2jsPreambles(Uri preambleDir) { |
144 return [preambleDir.resolve('d8.js').toFilePath()]; | 141 return [preambleDir.resolve('d8.js').toFilePath()]; |
145 } | 142 } |
146 } | 143 } |
147 | 144 |
148 /// Firefox/SpiderMonkey-based development shell (jsshell). | 145 /// Firefox/SpiderMonkey-based development shell (jsshell). |
149 class JsshellRuntimeConfiguration extends CommandLineJavaScriptRuntime { | 146 class JsshellRuntimeConfiguration extends CommandLineJavaScriptRuntime { |
150 JsshellRuntimeConfiguration() : super('jsshell'); | 147 JsshellRuntimeConfiguration() : super('jsshell'); |
151 | 148 |
152 List<Command> computeRuntimeCommands( | 149 List<Command> computeRuntimeCommands( |
153 TestSuite suite, | 150 TestSuite suite, |
154 CommandBuilder commandBuilder, | |
155 CommandArtifact artifact, | 151 CommandArtifact artifact, |
156 List<String> arguments, | 152 List<String> arguments, |
157 Map<String, String> environmentOverrides) { | 153 Map<String, String> environmentOverrides) { |
158 checkArtifact(artifact); | 154 checkArtifact(artifact); |
159 return <Command>[ | 155 return [ |
160 commandBuilder.getJSCommandlineCommand( | 156 Command.jsCommandLine( |
161 moniker, suite.jsShellFileName, arguments, environmentOverrides) | 157 moniker, suite.jsShellFileName, arguments, environmentOverrides) |
162 ]; | 158 ]; |
163 } | 159 } |
164 | 160 |
165 List<String> dart2jsPreambles(Uri preambleDir) { | 161 List<String> dart2jsPreambles(Uri preambleDir) { |
166 return ['-f', preambleDir.resolve('jsshell.js').toFilePath(), '-f']; | 162 return ['-f', preambleDir.resolve('jsshell.js').toFilePath(), '-f']; |
167 } | 163 } |
168 } | 164 } |
169 | 165 |
170 /// Common runtime configuration for runtimes based on the Dart VM. | 166 /// Common runtime configuration for runtimes based on the Dart VM. |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 * | 215 * |
220 super.timeoutMultiplier( | 216 super.timeoutMultiplier( |
221 mode: mode, isChecked: isChecked, isReload: isReload); | 217 mode: mode, isChecked: isChecked, isReload: isReload); |
222 } | 218 } |
223 } | 219 } |
224 | 220 |
225 /// The standalone Dart VM binary, "dart" or "dart.exe". | 221 /// The standalone Dart VM binary, "dart" or "dart.exe". |
226 class StandaloneDartRuntimeConfiguration extends DartVmRuntimeConfiguration { | 222 class StandaloneDartRuntimeConfiguration extends DartVmRuntimeConfiguration { |
227 List<Command> computeRuntimeCommands( | 223 List<Command> computeRuntimeCommands( |
228 TestSuite suite, | 224 TestSuite suite, |
229 CommandBuilder commandBuilder, | |
230 CommandArtifact artifact, | 225 CommandArtifact artifact, |
231 List<String> arguments, | 226 List<String> arguments, |
232 Map<String, String> environmentOverrides) { | 227 Map<String, String> environmentOverrides) { |
233 String script = artifact.filename; | 228 String script = artifact.filename; |
234 String type = artifact.mimeType; | 229 String type = artifact.mimeType; |
235 if (script != null && | 230 if (script != null && |
236 type != 'application/dart' && | 231 type != 'application/dart' && |
237 type != 'application/dart-snapshot') { | 232 type != 'application/dart-snapshot') { |
238 throw "Dart VM cannot run files of type '$type'."; | 233 throw "Dart VM cannot run files of type '$type'."; |
239 } | 234 } |
240 String executable = suite.dartVmBinaryFileName; | 235 String executable = suite.dartVmBinaryFileName; |
241 return <Command>[ | 236 return [Command.vm(executable, arguments, environmentOverrides)]; |
242 commandBuilder.getVmCommand(executable, arguments, environmentOverrides) | |
243 ]; | |
244 } | 237 } |
245 } | 238 } |
246 | 239 |
247 /// The flutter engine binary, "sky_shell". | 240 /// The flutter engine binary, "sky_shell". |
248 class StandaloneFlutterEngineConfiguration extends DartVmRuntimeConfiguration { | 241 class StandaloneFlutterEngineConfiguration extends DartVmRuntimeConfiguration { |
249 List<Command> computeRuntimeCommands( | 242 List<Command> computeRuntimeCommands( |
250 TestSuite suite, | 243 TestSuite suite, |
251 CommandBuilder commandBuilder, | |
252 CommandArtifact artifact, | 244 CommandArtifact artifact, |
253 List<String> arguments, | 245 List<String> arguments, |
254 Map<String, String> environmentOverrides) { | 246 Map<String, String> environmentOverrides) { |
255 String script = artifact.filename; | 247 String script = artifact.filename; |
256 String type = artifact.mimeType; | 248 String type = artifact.mimeType; |
257 if (script != null && | 249 if (script != null && |
258 type != 'application/dart' && | 250 type != 'application/dart' && |
259 type != 'application/dart-snapshot') { | 251 type != 'application/dart-snapshot') { |
260 throw "Flutter Engine cannot run files of type '$type'."; | 252 throw "Flutter Engine cannot run files of type '$type'."; |
261 } | 253 } |
262 String executable = suite.flutterEngineBinaryFileName; | 254 String executable = suite.flutterEngineBinaryFileName; |
263 var args = <String>['--non-interactive']..addAll(arguments); | 255 var args = <String>['--non-interactive']..addAll(arguments); |
264 return <Command>[ | 256 return [Command.vm(executable, args, environmentOverrides)]; |
265 commandBuilder.getVmCommand(executable, args, environmentOverrides) | |
266 ]; | |
267 } | 257 } |
268 } | 258 } |
269 | 259 |
270 class DartPrecompiledRuntimeConfiguration extends DartVmRuntimeConfiguration { | 260 class DartPrecompiledRuntimeConfiguration extends DartVmRuntimeConfiguration { |
271 final bool useBlobs; | 261 final bool useBlobs; |
272 DartPrecompiledRuntimeConfiguration({bool useBlobs}) : useBlobs = useBlobs; | 262 DartPrecompiledRuntimeConfiguration({bool useBlobs}) : useBlobs = useBlobs; |
273 | 263 |
274 List<Command> computeRuntimeCommands( | 264 List<Command> computeRuntimeCommands( |
275 TestSuite suite, | 265 TestSuite suite, |
276 CommandBuilder commandBuilder, | |
277 CommandArtifact artifact, | 266 CommandArtifact artifact, |
278 List<String> arguments, | 267 List<String> arguments, |
279 Map<String, String> environmentOverrides) { | 268 Map<String, String> environmentOverrides) { |
280 String script = artifact.filename; | 269 String script = artifact.filename; |
281 String type = artifact.mimeType; | 270 String type = artifact.mimeType; |
282 if (script != null && type != 'application/dart-precompiled') { | 271 if (script != null && type != 'application/dart-precompiled') { |
283 throw "dart_precompiled cannot run files of type '$type'."; | 272 throw "dart_precompiled cannot run files of type '$type'."; |
284 } | 273 } |
285 | 274 |
286 return <Command>[ | 275 return [ |
287 commandBuilder.getVmCommand( | 276 Command.vm( |
288 suite.dartPrecompiledBinaryFileName, arguments, environmentOverrides) | 277 suite.dartPrecompiledBinaryFileName, arguments, environmentOverrides) |
289 ]; | 278 ]; |
290 } | 279 } |
291 } | 280 } |
292 | 281 |
293 class DartPrecompiledAdbRuntimeConfiguration | 282 class DartPrecompiledAdbRuntimeConfiguration |
294 extends DartVmRuntimeConfiguration { | 283 extends DartVmRuntimeConfiguration { |
295 static const String DeviceDir = '/data/local/tmp/precompilation-testing'; | 284 static const String DeviceDir = '/data/local/tmp/precompilation-testing'; |
296 static const String DeviceTestDir = | 285 static const String DeviceTestDir = |
297 '/data/local/tmp/precompilation-testing/test'; | 286 '/data/local/tmp/precompilation-testing/test'; |
298 | 287 |
299 final bool useBlobs; | 288 final bool useBlobs; |
300 DartPrecompiledAdbRuntimeConfiguration({bool useBlobs}) : useBlobs = useBlobs; | 289 DartPrecompiledAdbRuntimeConfiguration({bool useBlobs}) : useBlobs = useBlobs; |
301 | 290 |
302 List<Command> computeRuntimeCommands( | 291 List<Command> computeRuntimeCommands( |
303 TestSuite suite, | 292 TestSuite suite, |
304 CommandBuilder commandBuilder, | |
305 CommandArtifact artifact, | 293 CommandArtifact artifact, |
306 List<String> arguments, | 294 List<String> arguments, |
307 Map<String, String> environmentOverrides) { | 295 Map<String, String> environmentOverrides) { |
308 String script = artifact.filename; | 296 String script = artifact.filename; |
309 String type = artifact.mimeType; | 297 String type = artifact.mimeType; |
310 if (script != null && type != 'application/dart-precompiled') { | 298 if (script != null && type != 'application/dart-precompiled') { |
311 throw "dart_precompiled cannot run files of type '$type'."; | 299 throw "dart_precompiled cannot run files of type '$type'."; |
312 } | 300 } |
313 | 301 |
314 String precompiledRunner = suite.dartPrecompiledBinaryFileName; | 302 String precompiledRunner = suite.dartPrecompiledBinaryFileName; |
315 String processTest = suite.processTestBinaryFileName; | 303 String processTest = suite.processTestBinaryFileName; |
316 return <Command>[ | 304 return [ |
317 commandBuilder.getAdbPrecompiledCommand( | 305 Command.adbPrecompiled( |
318 precompiledRunner, processTest, script, arguments, useBlobs) | 306 precompiledRunner, processTest, script, arguments, useBlobs) |
319 ]; | 307 ]; |
320 } | 308 } |
321 } | 309 } |
322 | 310 |
323 class SelfCheckRuntimeConfiguration extends DartVmRuntimeConfiguration { | 311 class SelfCheckRuntimeConfiguration extends DartVmRuntimeConfiguration { |
324 final List<String> selfCheckers = <String>[]; | 312 final List<String> selfCheckers = <String>[]; |
325 | 313 |
326 SelfCheckRuntimeConfiguration() { | 314 SelfCheckRuntimeConfiguration() { |
327 searchForSelfCheckers(); | 315 searchForSelfCheckers(); |
328 } | 316 } |
329 | 317 |
330 void searchForSelfCheckers() { | 318 void searchForSelfCheckers() { |
331 Uri pkg = TestUtils.dartDirUri.resolve('pkg'); | 319 Uri pkg = TestUtils.dartDirUri.resolve('pkg'); |
332 for (var entry in new Directory.fromUri(pkg).listSync(recursive: true)) { | 320 for (var entry in new Directory.fromUri(pkg).listSync(recursive: true)) { |
333 if (entry is File && entry.path.endsWith('_self_check.dart')) { | 321 if (entry is File && entry.path.endsWith('_self_check.dart')) { |
334 selfCheckers.add(entry.path); | 322 selfCheckers.add(entry.path); |
335 } | 323 } |
336 } | 324 } |
337 } | 325 } |
338 | 326 |
339 List<Command> computeRuntimeCommands( | 327 List<Command> computeRuntimeCommands( |
340 TestSuite suite, | 328 TestSuite suite, |
341 CommandBuilder commandBuilder, | |
342 CommandArtifact artifact, | 329 CommandArtifact artifact, |
343 List<String> arguments, | 330 List<String> arguments, |
344 Map<String, String> environmentOverrides) { | 331 Map<String, String> environmentOverrides) { |
345 String executable = suite.dartVmBinaryFileName; | 332 String executable = suite.dartVmBinaryFileName; |
346 return selfCheckers | 333 return selfCheckers |
347 .map((String tester) => commandBuilder.getVmBatchCommand( | 334 .map((String tester) => Command.vmBatch( |
348 executable, tester, arguments, environmentOverrides, | 335 executable, tester, arguments, environmentOverrides, |
349 checked: suite.configuration.isChecked)) | 336 checked: suite.configuration.isChecked)) |
350 .toList(); | 337 .toList(); |
351 } | 338 } |
352 | 339 |
353 @override | 340 @override |
354 bool get shouldSkipNegativeTests => true; | 341 bool get shouldSkipNegativeTests => true; |
355 } | 342 } |
356 | 343 |
357 /// Temporary runtime configuration for browser runtimes that haven't been | 344 /// Temporary runtime configuration for browser runtimes that haven't been |
358 /// migrated yet. | 345 /// migrated yet. |
359 // TODO(ahe): Remove this class. | 346 // TODO(ahe): Remove this class. |
360 class DummyRuntimeConfiguration extends DartVmRuntimeConfiguration { | 347 class DummyRuntimeConfiguration extends DartVmRuntimeConfiguration { |
361 List<Command> computeRuntimeCommands( | 348 List<Command> computeRuntimeCommands( |
362 TestSuite suite, | 349 TestSuite suite, |
363 CommandBuilder commandBuilder, | |
364 CommandArtifact artifact, | 350 CommandArtifact artifact, |
365 List<String> arguments, | 351 List<String> arguments, |
366 Map<String, String> environmentOverrides) { | 352 Map<String, String> environmentOverrides) { |
367 throw "Unimplemented runtime '$runtimeType'"; | 353 throw "Unimplemented runtime '$runtimeType'"; |
368 } | 354 } |
369 } | 355 } |
OLD | NEW |