| 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 library runtime_configuration; |
| 6 | 6 |
| 7 import 'compiler_configuration.dart' show | 7 import 'compiler_configuration.dart' show CommandArtifact; |
| 8 CommandArtifact; | |
| 9 | 8 |
| 10 // 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 |
| 11 // from TestSuite once the refactoring is complete. | 10 // from TestSuite once the refactoring is complete. |
| 12 import 'test_suite.dart' show | 11 import 'test_suite.dart' show TestSuite; |
| 13 TestSuite; | |
| 14 | 12 |
| 15 import 'test_runner.dart' show | 13 import 'test_runner.dart' show Command, CommandBuilder; |
| 16 Command, | |
| 17 CommandBuilder; | |
| 18 | 14 |
| 19 // TODO(ahe): I expect this class will become abstract very soon. | 15 // TODO(ahe): I expect this class will become abstract very soon. |
| 20 class RuntimeConfiguration { | 16 class RuntimeConfiguration { |
| 21 // TODO(ahe): Remove this constructor and move the switch to | 17 // TODO(ahe): Remove this constructor and move the switch to |
| 22 // test_options.dart. We probably want to store an instance of | 18 // test_options.dart. We probably want to store an instance of |
| 23 // [RuntimeConfiguration] in [configuration] there. | 19 // [RuntimeConfiguration] in [configuration] there. |
| 24 factory RuntimeConfiguration(Map configuration) { | 20 factory RuntimeConfiguration(Map configuration) { |
| 25 String runtime = configuration['runtime']; | 21 String runtime = configuration['runtime']; |
| 26 switch (runtime) { | 22 switch (runtime) { |
| 27 case 'ContentShellOnAndroid': | 23 case 'ContentShellOnAndroid': |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 case 'drt': | 57 case 'drt': |
| 62 return new DrtRuntimeConfiguration(); | 58 return new DrtRuntimeConfiguration(); |
| 63 | 59 |
| 64 default: | 60 default: |
| 65 throw "Unknown runtime '$runtime'"; | 61 throw "Unknown runtime '$runtime'"; |
| 66 } | 62 } |
| 67 } | 63 } |
| 68 | 64 |
| 69 RuntimeConfiguration._subclass(); | 65 RuntimeConfiguration._subclass(); |
| 70 | 66 |
| 71 int computeTimeoutMultiplier({ | 67 int computeTimeoutMultiplier( |
| 72 String mode, | 68 {String mode, bool isChecked: false, String arch}) { |
| 73 bool isChecked: false, | |
| 74 String arch}) { | |
| 75 return 1; | 69 return 1; |
| 76 } | 70 } |
| 77 | 71 |
| 78 List<Command> computeRuntimeCommands( | 72 List<Command> computeRuntimeCommands( |
| 79 TestSuite suite, | 73 TestSuite suite, |
| 80 CommandBuilder commandBuilder, | 74 CommandBuilder commandBuilder, |
| 81 CommandArtifact artifact, | 75 CommandArtifact artifact, |
| 82 List<String> arguments, | 76 List<String> arguments, |
| 83 Map<String, String> environmentOverrides) { | 77 Map<String, String> environmentOverrides) { |
| 84 // TODO(ahe): Make this method abstract. | 78 // TODO(ahe): Make this method abstract. |
| 85 throw "Unimplemented runtime '$runtimeType'"; | 79 throw "Unimplemented runtime '$runtimeType'"; |
| 86 } | 80 } |
| 87 | 81 |
| 88 List<String> dart2jsPreambles(Uri preambleDir) => []; | 82 List<String> dart2jsPreambles(Uri preambleDir) => []; |
| 89 } | 83 } |
| 90 | 84 |
| 91 /// The 'none' runtime configuration. | 85 /// The 'none' runtime configuration. |
| 92 class NoneRuntimeConfiguration extends RuntimeConfiguration { | 86 class NoneRuntimeConfiguration extends RuntimeConfiguration { |
| 93 NoneRuntimeConfiguration() | 87 NoneRuntimeConfiguration() : super._subclass(); |
| 94 : super._subclass(); | |
| 95 | 88 |
| 96 List<Command> computeRuntimeCommands( | 89 List<Command> computeRuntimeCommands( |
| 97 TestSuite suite, | 90 TestSuite suite, |
| 98 CommandBuilder commandBuilder, | 91 CommandBuilder commandBuilder, |
| 99 CommandArtifact artifact, | 92 CommandArtifact artifact, |
| 100 List<String> arguments, | 93 List<String> arguments, |
| 101 Map<String, String> environmentOverrides) { | 94 Map<String, String> environmentOverrides) { |
| 102 return <Command>[]; | 95 return <Command>[]; |
| 103 } | 96 } |
| 104 } | 97 } |
| 105 | 98 |
| 106 class CommandLineJavaScriptRuntime extends RuntimeConfiguration { | 99 class CommandLineJavaScriptRuntime extends RuntimeConfiguration { |
| 107 final String moniker; | 100 final String moniker; |
| 108 | 101 |
| 109 CommandLineJavaScriptRuntime(this.moniker) | 102 CommandLineJavaScriptRuntime(this.moniker) : super._subclass(); |
| 110 : super._subclass(); | |
| 111 | 103 |
| 112 void checkArtifact(CommandArtifact artifact) { | 104 void checkArtifact(CommandArtifact artifact) { |
| 113 String type = artifact.mimeType; | 105 String type = artifact.mimeType; |
| 114 if (type != 'application/javascript') { | 106 if (type != 'application/javascript') { |
| 115 throw "Runtime '$moniker' cannot run files of type '$type'."; | 107 throw "Runtime '$moniker' cannot run files of type '$type'."; |
| 116 } | 108 } |
| 117 } | 109 } |
| 118 } | 110 } |
| 119 | 111 |
| 120 /// Chrome/V8-based development shell (d8). | 112 /// Chrome/V8-based development shell (d8). |
| 121 class D8RuntimeConfiguration extends CommandLineJavaScriptRuntime { | 113 class D8RuntimeConfiguration extends CommandLineJavaScriptRuntime { |
| 122 D8RuntimeConfiguration() | 114 D8RuntimeConfiguration() : super('d8'); |
| 123 : super('d8'); | |
| 124 | 115 |
| 125 List<Command> computeRuntimeCommands( | 116 List<Command> computeRuntimeCommands( |
| 126 TestSuite suite, | 117 TestSuite suite, |
| 127 CommandBuilder commandBuilder, | 118 CommandBuilder commandBuilder, |
| 128 CommandArtifact artifact, | 119 CommandArtifact artifact, |
| 129 List<String> arguments, | 120 List<String> arguments, |
| 130 Map<String, String> environmentOverrides) { | 121 Map<String, String> environmentOverrides) { |
| 131 // TODO(ahe): Avoid duplication of this method between d8 and jsshell. | 122 // TODO(ahe): Avoid duplication of this method between d8 and jsshell. |
| 132 checkArtifact(artifact); | 123 checkArtifact(artifact); |
| 133 return <Command>[ | 124 return <Command>[ |
| 134 commandBuilder.getJSCommandlineCommand( | 125 commandBuilder.getJSCommandlineCommand( |
| 135 moniker, suite.d8FileName, arguments, environmentOverrides)]; | 126 moniker, suite.d8FileName, arguments, environmentOverrides) |
| 127 ]; |
| 136 } | 128 } |
| 137 | 129 |
| 138 List<String> dart2jsPreambles(Uri preambleDir) { | 130 List<String> dart2jsPreambles(Uri preambleDir) { |
| 139 return [preambleDir.resolve('d8.js').toFilePath()]; | 131 return [preambleDir.resolve('d8.js').toFilePath()]; |
| 140 } | 132 } |
| 141 } | 133 } |
| 142 | 134 |
| 143 /// Firefox/SpiderMonkey-based development shell (jsshell). | 135 /// Firefox/SpiderMonkey-based development shell (jsshell). |
| 144 class JsshellRuntimeConfiguration extends CommandLineJavaScriptRuntime { | 136 class JsshellRuntimeConfiguration extends CommandLineJavaScriptRuntime { |
| 145 JsshellRuntimeConfiguration() | 137 JsshellRuntimeConfiguration() : super('jsshell'); |
| 146 : super('jsshell'); | |
| 147 | 138 |
| 148 List<Command> computeRuntimeCommands( | 139 List<Command> computeRuntimeCommands( |
| 149 TestSuite suite, | 140 TestSuite suite, |
| 150 CommandBuilder commandBuilder, | 141 CommandBuilder commandBuilder, |
| 151 CommandArtifact artifact, | 142 CommandArtifact artifact, |
| 152 List<String> arguments, | 143 List<String> arguments, |
| 153 Map<String, String> environmentOverrides) { | 144 Map<String, String> environmentOverrides) { |
| 154 checkArtifact(artifact); | 145 checkArtifact(artifact); |
| 155 return <Command>[ | 146 return <Command>[ |
| 156 commandBuilder.getJSCommandlineCommand( | 147 commandBuilder.getJSCommandlineCommand( |
| 157 moniker, suite.jsShellFileName, arguments, environmentOverrides)]; | 148 moniker, suite.jsShellFileName, arguments, environmentOverrides) |
| 149 ]; |
| 158 } | 150 } |
| 159 | 151 |
| 160 List<String> dart2jsPreambles(Uri preambleDir) { | 152 List<String> dart2jsPreambles(Uri preambleDir) { |
| 161 return ['-f', preambleDir.resolve('jsshell.js').toFilePath(), '-f']; | 153 return ['-f', preambleDir.resolve('jsshell.js').toFilePath(), '-f']; |
| 162 } | 154 } |
| 163 } | 155 } |
| 164 | 156 |
| 165 /// Common runtime configuration for runtimes based on the Dart VM. | 157 /// Common runtime configuration for runtimes based on the Dart VM. |
| 166 class DartVmRuntimeConfiguration extends RuntimeConfiguration { | 158 class DartVmRuntimeConfiguration extends RuntimeConfiguration { |
| 167 DartVmRuntimeConfiguration() | 159 DartVmRuntimeConfiguration() : super._subclass(); |
| 168 : super._subclass(); | |
| 169 | 160 |
| 170 int computeTimeoutMultiplier({ | 161 int computeTimeoutMultiplier( |
| 171 String mode, | 162 {String mode, bool isChecked: false, String arch}) { |
| 172 bool isChecked: false, | |
| 173 String arch}) { | |
| 174 int multiplier = 1; | 163 int multiplier = 1; |
| 175 switch (arch) { | 164 switch (arch) { |
| 176 case 'simarm': | 165 case 'simarm': |
| 177 case 'arm': | 166 case 'arm': |
| 178 case 'simarmv6': | 167 case 'simarmv6': |
| 179 case 'armv6': | 168 case 'armv6': |
| 180 case' simarmv5te': | 169 case ' simarmv5te': |
| 181 case 'armv5te': | 170 case 'armv5te': |
| 182 case 'simmips': | 171 case 'simmips': |
| 183 case 'mips': | 172 case 'mips': |
| 184 case 'simarm64': | 173 case 'simarm64': |
| 185 multiplier *= 4; | 174 multiplier *= 4; |
| 186 break; | 175 break; |
| 187 } | 176 } |
| 188 if (mode == 'debug') { | 177 if (mode == 'debug') { |
| 189 multiplier *= 2; | 178 multiplier *= 2; |
| 190 } | 179 } |
| 191 return multiplier; | 180 return multiplier; |
| 192 } | 181 } |
| 193 } | 182 } |
| 194 | 183 |
| 195 /// Runtime configuration for Content Shell. We previously used a similar | 184 /// Runtime configuration for Content Shell. We previously used a similar |
| 196 /// program named Dump Render Tree, hence the name. | 185 /// program named Dump Render Tree, hence the name. |
| 197 class DrtRuntimeConfiguration extends DartVmRuntimeConfiguration { | 186 class DrtRuntimeConfiguration extends DartVmRuntimeConfiguration { |
| 198 int computeTimeoutMultiplier({ | 187 int computeTimeoutMultiplier( |
| 199 String mode, | 188 {String mode, bool isChecked: false, String arch}) { |
| 200 bool isChecked: false, | |
| 201 String arch}) { | |
| 202 return 4 // Allow additional time for browser testing to run. | 189 return 4 // Allow additional time for browser testing to run. |
| 203 // TODO(ahe): We might need to distinquish between DRT for running | 190 // TODO(ahe): We might need to distinquish between DRT for running |
| 204 // JavaScript and Dart code. I'm not convinced the inherited timeout | 191 // JavaScript and Dart code. I'm not convinced the inherited timeout |
| 205 // multiplier is relevant for JavaScript. | 192 // multiplier is relevant for JavaScript. |
| 206 * super.computeTimeoutMultiplier( | 193 * |
| 207 mode: mode, isChecked: isChecked); | 194 super.computeTimeoutMultiplier(mode: mode, isChecked: isChecked); |
| 208 } | 195 } |
| 209 } | 196 } |
| 210 | 197 |
| 211 /// The standalone Dart VM binary, "dart" or "dart.exe". | 198 /// The standalone Dart VM binary, "dart" or "dart.exe". |
| 212 class StandaloneDartRuntimeConfiguration extends DartVmRuntimeConfiguration { | 199 class StandaloneDartRuntimeConfiguration extends DartVmRuntimeConfiguration { |
| 213 List<Command> computeRuntimeCommands( | 200 List<Command> computeRuntimeCommands( |
| 214 TestSuite suite, | 201 TestSuite suite, |
| 215 CommandBuilder commandBuilder, | 202 CommandBuilder commandBuilder, |
| 216 CommandArtifact artifact, | 203 CommandArtifact artifact, |
| 217 List<String> arguments, | 204 List<String> arguments, |
| 218 Map<String, String> environmentOverrides) { | 205 Map<String, String> environmentOverrides) { |
| 219 String script = artifact.filename; | 206 String script = artifact.filename; |
| 220 String type = artifact.mimeType; | 207 String type = artifact.mimeType; |
| 221 if (script != null && type != 'application/dart') { | 208 if (script != null && type != 'application/dart') { |
| 222 throw "Dart VM cannot run files of type '$type'."; | 209 throw "Dart VM cannot run files of type '$type'."; |
| 223 } | 210 } |
| 224 String executable = suite.configuration['noopt'] | 211 String executable = suite.configuration['noopt'] |
| 225 ? suite.dartVmNooptBinaryFileName | 212 ? suite.dartVmNooptBinaryFileName |
| 226 : suite.dartVmBinaryFileName; | 213 : suite.dartVmBinaryFileName; |
| 227 return <Command>[commandBuilder.getVmCommand( | 214 return <Command>[ |
| 228 executable, arguments, environmentOverrides)]; | 215 commandBuilder.getVmCommand(executable, arguments, environmentOverrides) |
| 216 ]; |
| 229 } | 217 } |
| 230 } | 218 } |
| 231 | 219 |
| 232 class DartProductRuntimeConfiguration extends DartVmRuntimeConfiguration { | 220 class DartProductRuntimeConfiguration extends DartVmRuntimeConfiguration { |
| 233 List<Command> computeRuntimeCommands( | 221 List<Command> computeRuntimeCommands( |
| 234 TestSuite suite, | 222 TestSuite suite, |
| 235 CommandBuilder commandBuilder, | 223 CommandBuilder commandBuilder, |
| 236 CommandArtifact artifact, | 224 CommandArtifact artifact, |
| 237 List<String> arguments, | 225 List<String> arguments, |
| 238 Map<String, String> environmentOverrides) { | 226 Map<String, String> environmentOverrides) { |
| 239 String script = artifact.filename; | 227 String script = artifact.filename; |
| 240 String type = artifact.mimeType; | 228 String type = artifact.mimeType; |
| 241 if (script != null && type != 'application/dart-snapshot') { | 229 if (script != null && type != 'application/dart-snapshot') { |
| 242 throw "dart_product cannot run files of type '$type'."; | 230 throw "dart_product cannot run files of type '$type'."; |
| 243 } | 231 } |
| 244 | 232 |
| 245 var augmentedArgs = new List(); | 233 var augmentedArgs = new List(); |
| 246 augmentedArgs.add("--run-full-snapshot=${artifact.filename}"); | 234 augmentedArgs.add("--run-full-snapshot=${artifact.filename}"); |
| 247 augmentedArgs.addAll(arguments); | 235 augmentedArgs.addAll(arguments); |
| 248 | 236 |
| 249 return <Command>[commandBuilder.getVmCommand( | 237 return <Command>[ |
| 250 suite.dartVmProductBinaryFileName, | 238 commandBuilder.getVmCommand(suite.dartVmProductBinaryFileName, |
| 251 augmentedArgs, | 239 augmentedArgs, environmentOverrides) |
| 252 environmentOverrides)]; | 240 ]; |
| 253 } | 241 } |
| 254 } | 242 } |
| 255 | 243 |
| 256 class DartPrecompiledRuntimeConfiguration extends DartVmRuntimeConfiguration { | 244 class DartPrecompiledRuntimeConfiguration extends DartVmRuntimeConfiguration { |
| 257 List<Command> computeRuntimeCommands( | 245 List<Command> computeRuntimeCommands( |
| 258 TestSuite suite, | 246 TestSuite suite, |
| 259 CommandBuilder commandBuilder, | 247 CommandBuilder commandBuilder, |
| 260 CommandArtifact artifact, | 248 CommandArtifact artifact, |
| 261 List<String> arguments, | 249 List<String> arguments, |
| 262 Map<String, String> environmentOverrides) { | 250 Map<String, String> environmentOverrides) { |
| 263 String script = artifact.filename; | 251 String script = artifact.filename; |
| 264 String type = artifact.mimeType; | 252 String type = artifact.mimeType; |
| 265 if (script != null && type != 'application/dart-precompiled') { | 253 if (script != null && type != 'application/dart-precompiled') { |
| 266 throw "dart_precompiled cannot run files of type '$type'."; | 254 throw "dart_precompiled cannot run files of type '$type'."; |
| 267 } | 255 } |
| 268 | 256 |
| 269 var augmentedArgs = new List(); | 257 var augmentedArgs = new List(); |
| 270 augmentedArgs.add("--run-precompiled-snapshot=${artifact.filename}"); | 258 augmentedArgs.add("--run-precompiled-snapshot=${artifact.filename}"); |
| 271 augmentedArgs.addAll(arguments); | 259 augmentedArgs.addAll(arguments); |
| 272 | 260 |
| 273 return <Command>[commandBuilder.getVmCommand( | 261 return <Command>[ |
| 274 suite.dartPrecompiledBinaryFileName, | 262 commandBuilder.getVmCommand(suite.dartPrecompiledBinaryFileName, |
| 275 augmentedArgs, | 263 augmentedArgs, environmentOverrides) |
| 276 environmentOverrides)]; | 264 ]; |
| 277 } | 265 } |
| 278 } | 266 } |
| 279 | 267 |
| 280 /// Temporary runtime configuration for browser runtimes that haven't been | 268 /// Temporary runtime configuration for browser runtimes that haven't been |
| 281 /// migrated yet. | 269 /// migrated yet. |
| 282 // TODO(ahe): Remove this class. | 270 // TODO(ahe): Remove this class. |
| 283 class DummyRuntimeConfiguration extends DartVmRuntimeConfiguration { | 271 class DummyRuntimeConfiguration extends DartVmRuntimeConfiguration { |
| 284 List<Command> computeRuntimeCommands( | 272 List<Command> computeRuntimeCommands( |
| 285 TestSuite suite, | 273 TestSuite suite, |
| 286 CommandBuilder commandBuilder, | 274 CommandBuilder commandBuilder, |
| 287 CommandArtifact artifact, | 275 CommandArtifact artifact, |
| 288 List<String> arguments, | 276 List<String> arguments, |
| 289 Map<String, String> environmentOverrides) { | 277 Map<String, String> environmentOverrides) { |
| 290 throw "Unimplemented runtime '$runtimeType'"; | 278 throw "Unimplemented runtime '$runtimeType'"; |
| 291 } | 279 } |
| 292 } | 280 } |
| OLD | NEW |