Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(46)

Side by Side Diff: dart/tools/testing/dart/test_suite.dart

Issue 179173003: Refactor compiler and runtime configurations (command line tools command building). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Address comments, sorta. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 /** 5 /**
6 * Classes and methods for enumerating and preparing tests. 6 * Classes and methods for enumerating and preparing tests.
7 * 7 *
8 * This library includes: 8 * This library includes:
9 * 9 *
10 * - Creating tests by listing all the Dart files in certain directories, 10 * - Creating tests by listing all the Dart files in certain directories,
11 * and creating [TestCase]s for those files that meet the relevant criteria. 11 * and creating [TestCase]s for those files that meet the relevant criteria.
12 * - Preparing tests, including copying files and frameworks to temporary 12 * - Preparing tests, including copying files and frameworks to temporary
13 * directories, and computing the command line and arguments to be run. 13 * directories, and computing the command line and arguments to be run.
14 */ 14 */
15 library test_suite; 15 library test_suite;
16 16
17 import "dart:async"; 17 import "dart:async";
18 import "dart:io"; 18 import "dart:io";
19 import "drt_updater.dart"; 19 import "drt_updater.dart";
20 import "multitest.dart"; 20 import "multitest.dart";
21 import "status_file_parser.dart"; 21 import "status_file_parser.dart";
22 import "test_runner.dart"; 22 import "test_runner.dart";
23 import "utils.dart"; 23 import "utils.dart";
24 import "http_server.dart" show PREFIX_BUILDDIR, PREFIX_DARTDIR; 24 import "http_server.dart" show PREFIX_BUILDDIR, PREFIX_DARTDIR;
25 25
26 import "compiler_configuration.dart" show
27 CommandArtifact,
28 CompilerConfiguration;
29
30 import "runtime_configuration.dart" show
31 RuntimeConfiguration;
32
26 part "browser_test.dart"; 33 part "browser_test.dart";
27 34
28 35
29 /** 36 /**
30 * A simple function that tests [arg] and returns `true` or `false`. 37 * A simple function that tests [arg] and returns `true` or `false`.
31 */ 38 */
32 typedef bool Predicate<T>(T arg); 39 typedef bool Predicate<T>(T arg);
33 40
34 typedef void CreateTest(Path filePath, 41 typedef void CreateTest(Path filePath,
35 bool hasCompileError, 42 bool hasCompileError,
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 'DART_CONFIGURATION' : TestUtils.configurationDir(configuration), 122 'DART_CONFIGURATION' : TestUtils.configurationDir(configuration),
116 }; 123 };
117 } 124 }
118 125
119 /** 126 /**
120 * Whether or not binaries should be found in the root build directory or 127 * Whether or not binaries should be found in the root build directory or
121 * in the built SDK. 128 * in the built SDK.
122 */ 129 */
123 bool get useSdk { 130 bool get useSdk {
124 // The pub suite always uses the SDK. 131 // The pub suite always uses the SDK.
125 // TODO(rnystrom): Eventually, all test suites should run out of the SDK 132 // TODO(rnystrom): Eventually, all test suites should run out of the SDK
ricow1 2014/03/03 07:47:08 where and why was this introduced - as stated belo
Bob Nystrom 2014/03/03 21:45:51 This was added a long time ago when I first starte
ahe 2014/03/04 07:46:39 Thank you, Bob. It's awesome that you noticed this
126 // and this check should go away. 133 // and this check should go away.
134 // TODO(ahe): This check is broken for several reasons:
135 // First, it is not true that all tests should be running out of the
136 // SDK. It is absolutely critical to VM development that you can test the
137 // VM without building the SDK.
138 // Second, it is convenient for dart2js developers to run tests without
139 // rebuilding the SDK, and similarly, it should be convenient for pub
140 // developers.
Bob Nystrom 2014/03/03 21:45:51 Agreed. I'm not sure what I meant by that comment.
141 // Third, even if pub can only run from the SDK directory, this is the
Bob Nystrom 2014/03/03 21:45:51 The pub binary runs fine from <repo>/sdk/bin/pub,
ahe 2014/03/04 07:46:39 OK. So I wonder if we should fix this. It would se
142 // wrong place to work around that problem. Instead, test_options.dart
143 // should have been modified so that configuration['use_sdk'] is always
144 // true when testing pub. Attempting to override the value here is brittle
145 // because we read configuration['use_sdk'] directly in many places without
146 // using this getter.
127 if (suiteName == 'pub') return true; 147 if (suiteName == 'pub') return true;
128 148
129 return configuration['use_sdk']; 149 return configuration['use_sdk'];
130 } 150 }
131 151
132 /** 152 /**
133 * The output directory for this suite's configuration. 153 * The output directory for this suite's configuration.
134 */ 154 */
135 String get buildDir => TestUtils.buildDir(configuration); 155 String get buildDir => TestUtils.buildDir(configuration);
136 156
137 /** 157 /**
138 * The path to the compiler for this suite's configuration. Returns `null` if 158 * The path to the compiler for this suite's configuration. Returns `null` if
139 * no compiler should be used. 159 * no compiler should be used.
140 */ 160 */
141 String get compilerPath { 161 String get compilerPath {
142 if (configuration['compiler'] == 'none') { 162 var compilerConfiguration = new CompilerConfiguration(configuration);
143 return null; // No separate compiler for dartium tests. 163 if (!compilerConfiguration.hasCompiler) return null;
144 } 164 String name = compilerConfiguration.computeCompilerPath(buildDir);
145 var name; 165 // TODO(ahe): Only validate this once, in test_options.dart.
146 switch (configuration['compiler']) { 166 TestUtils.ensureExists(name, configuration);
147 case 'dartanalyzer':
148 case 'dart2analyzer':
149 name = executablePath;
150 break;
151 case 'dart2js':
152 case 'dart2dart':
153 var prefix = 'sdk/bin/';
154 String suffix = getExecutableSuffix(configuration['compiler']);
155 if (configuration['host_checked']) {
156 // The script dart2js_developer is not included in the
157 // shipped SDK, that is the script is not installed in
158 // "$buildDir/dart-sdk/bin/"
159 name = '$prefix/dart2js_developer$suffix';
160 } else {
161 if (configuration['use_sdk']) {
162 prefix = '$buildDir/dart-sdk/bin/';
163 }
164 name = '${prefix}dart2js$suffix';
165 }
166 break;
167 default:
168 throw "Unknown compiler for: ${configuration['compiler']}";
169 }
170 if (!(new File(name)).existsSync() && !configuration['list']) {
171 throw "Executable '$name' does not exist";
172 }
173 return name; 167 return name;
174 } 168 }
175 169
176 String get pubPath { 170 String get pubPath {
177 var prefix = 'sdk/bin/'; 171 var prefix = 'sdk/bin/';
178 if (configuration['use_sdk']) { 172 if (configuration['use_sdk']) {
179 prefix = '$buildDir/dart-sdk/bin/'; 173 prefix = '$buildDir/dart-sdk/bin/';
180 } 174 }
181 String suffix = getExecutableSuffix('pub'); 175 String suffix = getExecutableSuffix('pub');
182 var name = '${prefix}pub$suffix'; 176 var name = '${prefix}pub$suffix';
183 if (!(new File(name)).existsSync() && !configuration['list']) {
184 throw "Executable '$name' does not exist";
185 }
186 return name;
187 }
188
189 String get dartPath {
190 var prefix = 'sdk/bin/';
191 if (configuration['use_sdk']) {
192 prefix = '$buildDir/dart-sdk/bin/';
193 }
194 String suffix = getExecutableSuffix('vm');
195 var name = '${prefix}dart$suffix';
196 if (!(new File(name)).existsSync() && !configuration['list']) {
197 throw "Executable '$name' does not exist";
198 }
199 return name;
200 }
201
202 /**
203 * The path to the executable used to run this suite's tests.
204 */
205 String get executablePath {
206 var suffix = getExecutableSuffix(configuration['compiler']);
207 switch (configuration['compiler']) {
208 case 'none':
209 if (useSdk) {
210 return '$buildDir/dart-sdk/bin/dart$suffix';
211 }
212 return '$buildDir/dart$suffix';
213 case 'dartanalyzer':
214 return 'sdk/bin/dartanalyzer_developer$suffix';
215 case 'dart2analyzer':
216 return 'editor/tools/analyzer';
217 default:
218 throw "Unknown executable for: ${configuration['compiler']}";
219 }
220 }
221
222 String get dartShellFileName {
223 var name = configuration['dart'];
224 if (name == '') {
225 name = executablePath;
226 }
227
228 TestUtils.ensureExists(name, configuration); 177 TestUtils.ensureExists(name, configuration);
229 return name; 178 return name;
230 } 179 }
231 180
181 /// Returns the name of the Dart VM executable.
182 String get dartVmBinaryFileName {
183 // Controlled by user with the option "--dart".
184 String dartExecutable = configuration['dart'];
185
186 if (dartExecutable == '') {
187 String suffix = executableBinarySuffix;
188 dartExecutable = useSdk
189 ? '$buildDir/dart-sdk/bin/dart$suffix'
190 : '$buildDir/dart$suffix';
191 }
192
193 TestUtils.ensureExists(dartExecutable, configuration);
194 return dartExecutable;
195 }
196
232 String get d8FileName { 197 String get d8FileName {
233 var suffix = getExecutableSuffix('d8'); 198 var suffix = getExecutableSuffix('d8');
234 var d8Dir = TestUtils.dartDir().append('third_party/d8'); 199 var d8Dir = TestUtils.dartDir().append('third_party/d8');
235 var d8Path = d8Dir.append('${Platform.operatingSystem}/d8$suffix'); 200 var d8Path = d8Dir.append('${Platform.operatingSystem}/d8$suffix');
236 var d8 = d8Path.toNativePath(); 201 var d8 = d8Path.toNativePath();
237 TestUtils.ensureExists(d8, configuration); 202 TestUtils.ensureExists(d8, configuration);
238 return d8; 203 return d8;
239 } 204 }
240 205
241 String get jsShellFileName { 206 String get jsShellFileName {
242 var executableSuffix = getExecutableSuffix('jsshell'); 207 var executableSuffix = getExecutableSuffix('jsshell');
243 var executable = 'jsshell$executableSuffix'; 208 var executable = 'jsshell$executableSuffix';
244 var jsshellDir = '${TestUtils.dartDir()}/tools/testing/bin'; 209 var jsshellDir = '${TestUtils.dartDir()}/tools/testing/bin';
245 return '$jsshellDir/$executable'; 210 return '$jsshellDir/$executable';
246 } 211 }
247 212
248 /** 213 /**
249 * The file name of the Dart VM executable.
250 */
251 String get vmFileName {
252 var suffix = getExecutableSuffix('vm');
253 var vm = '$buildDir/dart$suffix';
254 TestUtils.ensureExists(vm, configuration);
255 return vm;
256 }
257
258 /**
259 * The file extension (if any) that should be added to the given executable 214 * The file extension (if any) that should be added to the given executable
260 * name for the current platform. 215 * name for the current platform.
261 */ 216 */
217 // TODO(ahe): Get rid of this. Use executableBinarySuffix instead.
262 String getExecutableSuffix(String executable) { 218 String getExecutableSuffix(String executable) {
263 if (Platform.operatingSystem == 'windows') { 219 if (Platform.operatingSystem == 'windows') {
264 if (executable == 'd8' || executable == 'vm' || executable == 'none') { 220 if (executable == 'd8' || executable == 'vm' || executable == 'none') {
265 return '.exe'; 221 return '.exe';
266 } else { 222 } else {
267 return '.bat'; 223 return '.bat';
268 } 224 }
269 } 225 }
270 return ''; 226 return '';
271 } 227 }
272 228
229 String get executableBinarySuffix => Platform.isWindows ? '.exe' : '';
230
273 /** 231 /**
274 * Call the callback function onTest with a [TestCase] argument for each 232 * Call the callback function onTest with a [TestCase] argument for each
275 * test in the suite. When all tests have been processed, call [onDone]. 233 * test in the suite. When all tests have been processed, call [onDone].
276 * 234 *
277 * The [testCache] argument provides a persistent store that can be used to 235 * The [testCache] argument provides a persistent store that can be used to
278 * cache information about the test suite, so that directories do not need 236 * cache information about the test suite, so that directories do not need
279 * to be listed each time. 237 * to be listed each time.
280 */ 238 */
281 void forEachTest(TestCaseEvent onTest, Map testCache, [VoidFunction onDone]); 239 void forEachTest(TestCaseEvent onTest, Map testCache, [VoidFunction onDone]);
282 240
(...skipping 27 matching lines...) Expand all
310 if (!pattern.hasMatch(testCase.displayName)) { 268 if (!pattern.hasMatch(testCase.displayName)) {
311 return; 269 return;
312 } 270 }
313 271
314 // Update Summary report 272 // Update Summary report
315 if (configuration['report']) { 273 if (configuration['report']) {
316 SummaryReport.add(expectations); 274 SummaryReport.add(expectations);
317 if (testCase.info != null && 275 if (testCase.info != null &&
318 testCase.info.hasCompileError && 276 testCase.info.hasCompileError &&
319 TestUtils.isBrowserRuntime(configuration['runtime']) && 277 TestUtils.isBrowserRuntime(configuration['runtime']) &&
320 configuration['compiler'] != 'none') { 278 new CompilerConfiguration(configuration).hasCompiler) {
321 SummaryReport.addCompileErrorSkipTest(); 279 SummaryReport.addCompileErrorSkipTest();
322 return; 280 return;
323 } 281 }
324 } 282 }
325 283
326 // Handle skipped tests 284 // Handle skipped tests
327 if (expectations.contains(Expectation.SKIP) || 285 if (expectations.contains(Expectation.SKIP) ||
328 expectations.contains(Expectation.SKIP_BY_DESIGN)) { 286 expectations.contains(Expectation.SKIP_BY_DESIGN)) {
329 return; 287 return;
330 } 288 }
(...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 if (optionsFromFile['packageRoot'] == null || 881 if (optionsFromFile['packageRoot'] == null ||
924 optionsFromFile['packageRoot'] == "") { 882 optionsFromFile['packageRoot'] == "") {
925 optionsFromFile['packageRoot'] = packageRoot.toNativePath(); 883 optionsFromFile['packageRoot'] = packageRoot.toNativePath();
926 } 884 }
927 } 885 }
928 } 886 }
929 String testName = buildTestCaseDisplayName(suiteDir, info.originTestPath, 887 String testName = buildTestCaseDisplayName(suiteDir, info.originTestPath,
930 multitestName: optionsFromFile['isMultitest'] ? info.multitestKey : ""); 888 multitestName: optionsFromFile['isMultitest'] ? info.multitestKey : "");
931 889
932 Set<Expectation> expectations = testExpectations.expectations(testName); 890 Set<Expectation> expectations = testExpectations.expectations(testName);
933 if (configuration['compiler'] != 'none' && info.hasCompileError) { 891 if (new CompilerConfiguration(configuration).hasCompiler &&
892 info.hasCompileError) {
934 // If a compile-time error is expected, and we're testing a 893 // If a compile-time error is expected, and we're testing a
935 // compiler, we never need to attempt to run the program (in a 894 // compiler, we never need to attempt to run the program (in a
936 // browser or otherwise). 895 // browser or otherwise).
937 enqueueStandardTest(baseCommands, info, testName, expectations); 896 enqueueStandardTest(baseCommands, info, testName, expectations);
938 } else if (TestUtils.isBrowserRuntime(configuration['runtime'])) { 897 } else if (TestUtils.isBrowserRuntime(configuration['runtime'])) {
939 if (info.optionsFromFile['isMultiHtmlTest']) { 898 if (info.optionsFromFile['isMultiHtmlTest']) {
940 // A browser multi-test has multiple expectations for one test file. 899 // A browser multi-test has multiple expectations for one test file.
941 // Find all the different sub-test expecations for one entire test file. 900 // Find all the different sub-test expecations for one entire test file.
942 List<String> subtestNames = info.optionsFromFile['subtestNames']; 901 List<String> subtestNames = info.optionsFromFile['subtestNames'];
943 Map<String, Set<Expectation>> multiHtmlTestExpectations = {}; 902 Map<String, Set<Expectation>> multiHtmlTestExpectations = {};
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
989 bool isNegative(TestInformation info) { 948 bool isNegative(TestInformation info) {
990 bool negative = info.hasCompileError || 949 bool negative = info.hasCompileError ||
991 (configuration['checked'] && info.isNegativeIfChecked); 950 (configuration['checked'] && info.isNegativeIfChecked);
992 if (info.hasRuntimeError && hasRuntime) { 951 if (info.hasRuntimeError && hasRuntime) {
993 negative = true; 952 negative = true;
994 } 953 }
995 return negative; 954 return negative;
996 } 955 }
997 956
998 List<Command> makeCommands(TestInformation info, var vmOptions, var args) { 957 List<Command> makeCommands(TestInformation info, var vmOptions, var args) {
999 var compiler = configuration['compiler']; 958 List<Command> commands = <Command>[];
959 CompilerConfiguration compilerConfiguration =
960 new CompilerConfiguration(configuration);
1000 List<String> sharedOptions = info.optionsFromFile['sharedOptions']; 961 List<String> sharedOptions = info.optionsFromFile['sharedOptions'];
1001 switch (compiler) {
1002 case 'dart2js':
1003 args = new List.from(args);
1004 String tempDir = createCompilationOutputDirectory(info.filePath);
1005 args.addAll(sharedOptions);
1006 args.add('--out=$tempDir/out.js');
1007 962
1008 var command = CommandBuilder.instance.getCompilationCommand( 963 List<String> compileTimeArguments = <String>[];
1009 compiler, "$tempDir/out.js", !useSdk, 964 String tempDir;
ricow1 2014/03/03 07:47:08 wouldn't a better name be outputDir here?
1010 dart2JsBootstrapDependencies, compilerPath, args, 965 if (compilerConfiguration.hasCompiler) {
1011 environmentOverrides); 966 compileTimeArguments
967 ..addAll(args)
968 ..addAll(sharedOptions);
969 // Avoid doing this for analyzer.
970 tempDir = createCompilationOutputDirectory(info.filePath);
971 }
1012 972
1013 var javascriptFile = '$tempDir/out.js'; 973 CommandArtifact compilationArtifact =
1014 if (configuration['csp']) { 974 compilerConfiguration.computeCompilationArtifact(
1015 javascriptFile = '$tempDir/out.precompiled.js'; 975 buildDir,
1016 } 976 tempDir,
977 CommandBuilder.instance,
978 compileTimeArguments,
979 environmentOverrides);
980 commands.addAll(compilationArtifact.commands);
1017 981
1018 List<Command> commands = <Command>[command]; 982 if (info.hasCompileError && compilerConfiguration.hasCompiler) {
1019 if (info.hasCompileError) { 983 // Do not attempt to run the compiled result. A compilation
1020 // Do not attempt to run the compiled result. A compilation 984 // error should be reported by the compilation command.
1021 // error should be reported by the compilation command.
1022 } else if (configuration['runtime'] == 'd8') {
1023 commands.add(CommandBuilder.instance.getJSCommandlineCommand(
1024 "d8", d8FileName, [javascriptFile], environmentOverrides));
1025 } else if (configuration['runtime'] == 'jsshell') {
1026 commands.add(CommandBuilder.instance.getJSCommandlineCommand(
1027 "jsshell", jsShellFileName, [javascriptFile],
1028 environmentOverrides));
1029 }
1030 return commands; 985 return commands;
1031 case 'dart2dart': 986 }
1032 args = new List.from(args);
1033 args.addAll(sharedOptions);
1034 args.add('--output-type=dart');
1035 String tempDir = createCompilationOutputDirectory(info.filePath);
1036 args.add('--out=$tempDir/out.dart');
1037 987
1038 List<Command> commands = 988 RuntimeConfiguration runtimeConfiguration =
1039 <Command>[CommandBuilder.instance.getCompilationCommand( 989 new RuntimeConfiguration(configuration);
1040 compiler, "$tempDir/out.dart", !useSdk, 990 List<String> runtimeArguments =
1041 dart2JsBootstrapDependencies, compilerPath, args, 991 compilerConfiguration.computeRuntimeArguments(
1042 environmentOverrides)]; 992 runtimeConfiguration,
1043 if (info.hasCompileError) { 993 info,
1044 // Do not attempt to run the compiled result. A compilation 994 vmOptions, sharedOptions, args,
1045 // error should be reported by the compilation command. 995 compilationArtifact);
1046 } else if (configuration['runtime'] == 'vm') {
1047 // TODO(antonm): support checked.
1048 var vmArguments = new List.from(vmOptions);
1049 vmArguments.addAll([
1050 '--ignore-unrecognized-flags', '$tempDir/out.dart']);
1051 commands.add(CommandBuilder.instance.getVmCommand(
1052 vmFileName, vmArguments, environmentOverrides));
1053 } else {
1054 throw 'Unsupported runtime ${configuration["runtime"]} for dart2dart';
1055 }
1056 return commands;
1057 996
1058 case 'none': 997 return commands
ricow1 2014/03/03 07:47:08 I would not do a method cascade here, but call the
1059 var arguments = new List.from(vmOptions); 998 ..addAll(
1060 arguments.addAll(sharedOptions); 999 runtimeConfiguration.computeRuntimeCommands(
1061 arguments.addAll(args); 1000 this,
1062 return <Command>[CommandBuilder.instance.getVmCommand( 1001 CommandBuilder.instance,
1063 dartShellFileName, arguments, environmentOverrides)]; 1002 compilationArtifact,
1064 1003 runtimeArguments,
1065 case 'dartanalyzer': 1004 environmentOverrides));
1066 case 'dart2analyzer':
1067 return <Command>[makeAnalysisCommand(info, args)];
1068
1069 default:
1070 throw 'Unknown compiler ${configuration["compiler"]}';
1071 }
1072 }
1073
1074 AnalysisCommand makeAnalysisCommand(TestInformation info,
1075 List<String> arguments) {
1076 return CommandBuilder.instance.getAnalysisCommand(
1077 configuration['compiler'], dartShellFileName, arguments,
1078 environmentOverrides,
1079 flavor: configuration['compiler']);
1080 } 1005 }
1081 1006
1082 CreateTest makeTestCaseCreator(Map optionsFromFile) { 1007 CreateTest makeTestCaseCreator(Map optionsFromFile) {
1083 return (Path filePath, 1008 return (Path filePath,
1084 bool hasCompileError, 1009 bool hasCompileError,
1085 bool hasRuntimeError, 1010 bool hasRuntimeError,
1086 {bool isNegativeIfChecked: false, 1011 {bool isNegativeIfChecked: false,
1087 bool hasStaticWarning: false, 1012 bool hasStaticWarning: false,
1088 Set<String> multitestOutcome: null, 1013 Set<String> multitestOutcome: null,
1089 String multitestKey, 1014 String multitestKey,
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
1390 packageRootArgument(optionsFromFile['packageRoot']); 1315 packageRootArgument(optionsFromFile['packageRoot']);
1391 if (packageRoot != null) { 1316 if (packageRoot != null) {
1392 args.add(packageRoot); 1317 args.add(packageRoot);
1393 } 1318 }
1394 args.add('--out=$outputFile'); 1319 args.add('--out=$outputFile');
1395 args.add(inputFile); 1320 args.add(inputFile);
1396 args.addAll(optionsFromFile['sharedOptions']); 1321 args.addAll(optionsFromFile['sharedOptions']);
1397 if (executable.endsWith('.dart')) { 1322 if (executable.endsWith('.dart')) {
1398 // Run the compiler script via the Dart VM. 1323 // Run the compiler script via the Dart VM.
1399 args.insert(0, executable); 1324 args.insert(0, executable);
1400 executable = dartShellFileName; 1325 executable = dartVmBinaryFileName;
1401 } 1326 }
1402 return CommandBuilder.instance.getCompilationCommand( 1327 return CommandBuilder.instance.getCompilationCommand(
1403 compiler, outputFile, !useSdk, 1328 compiler, outputFile, !useSdk,
1404 dart2JsBootstrapDependencies, compilerPath, args, environmentOverrides); 1329 dart2JsBootstrapDependencies, compilerPath, args, environmentOverrides);
1405 } 1330 }
1406 1331
1407 /** Helper to create a Polymer deploy command for a single HTML file. */ 1332 /** Helper to create a Polymer deploy command for a single HTML file. */
1408 Command _polymerDeployCommand(String inputFile, String outputDir, 1333 Command _polymerDeployCommand(String inputFile, String outputDir,
1409 optionsFromFile) { 1334 optionsFromFile) {
1410 List<String> args = []; 1335 List<String> args = [];
1411 String packageRoot = packageRootArgument(optionsFromFile['packageRoot']); 1336 String packageRoot = packageRootArgument(optionsFromFile['packageRoot']);
1412 if (packageRoot != null) args.add(packageRoot); 1337 if (packageRoot != null) args.add(packageRoot);
1413 args..add('package:polymer/deploy.dart') 1338 args..add('package:polymer/deploy.dart')
1414 ..add('--test')..add(inputFile) 1339 ..add('--test')..add(inputFile)
1415 ..add('--out')..add(outputDir); 1340 ..add('--out')..add(outputDir);
1416 if (configuration['csp']) args.add('--csp'); 1341 if (configuration['csp']) args.add('--csp');
1417 1342
1418 return CommandBuilder.instance.getProcessCommand( 1343 return CommandBuilder.instance.getProcessCommand(
1419 'polymer_deploy', vmFileName, args, environmentOverrides); 1344 'polymer_deploy', dartVmBinaryFileName, args, environmentOverrides);
1420 } 1345 }
1421 1346
1422 String createGeneratedTestDirectoryHelper( 1347 String createGeneratedTestDirectoryHelper(
1423 String name, String dirname, Path testPath, String optionsName) { 1348 String name, String dirname, Path testPath, String optionsName) {
1424 Path relative = testPath.relativeTo(TestUtils.dartDir()); 1349 Path relative = testPath.relativeTo(TestUtils.dartDir());
1425 relative = relative.directoryPath.append(relative.filenameWithoutExtension); 1350 relative = relative.directoryPath.append(relative.filenameWithoutExtension);
1426 String testUniqueName = relative.toString().replaceAll('/', '_'); 1351 String testUniqueName = relative.toString().replaceAll('/', '_');
1427 if (!optionsName.isEmpty) { 1352 if (!optionsName.isEmpty) {
1428 testUniqueName = '$testUniqueName-$optionsName'; 1353 testUniqueName = '$testUniqueName-$optionsName';
1429 } 1354 }
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
1807 } 1732 }
1808 1733
1809 bool isTestFile(String filename) { 1734 bool isTestFile(String filename) {
1810 var sep = Platform.pathSeparator; 1735 var sep = Platform.pathSeparator;
1811 // NOTE: We exclude tests and patch files for now. 1736 // NOTE: We exclude tests and patch files for now.
1812 return filename.endsWith(".dart") && 1737 return filename.endsWith(".dart") &&
1813 !filename.endsWith("_test.dart") && 1738 !filename.endsWith("_test.dart") &&
1814 !filename.contains("_internal/lib"); 1739 !filename.contains("_internal/lib");
1815 } 1740 }
1816 1741
1817 AnalysisCommand makeAnalysisCommand(TestInformation info,
1818 List<String> arguments) {
1819 return CommandBuilder.instance.getAnalysisCommand(
1820 configuration['compiler'], dartShellFileName, arguments,
1821 environmentOverrides, flavor: configuration['compiler']);
1822 }
1823
1824 bool get listRecursively => true; 1742 bool get listRecursively => true;
1825 } 1743 }
1826 1744
1827 class PkgBuildTestSuite extends TestSuite { 1745 class PkgBuildTestSuite extends TestSuite {
1828 final String statusFilePath; 1746 final String statusFilePath;
1829 1747
1830 PkgBuildTestSuite(Map configuration, String suiteName, this.statusFilePath) 1748 PkgBuildTestSuite(Map configuration, String suiteName, this.statusFilePath)
1831 : super(configuration, suiteName) { 1749 : super(configuration, suiteName) {
1832 assert(configuration['use_sdk']);; 1750 assert(configuration['use_sdk']);;
1833 } 1751 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1878 CommandBuilder.instance.getCopyCommand(directory, checkoutDir)); 1796 CommandBuilder.instance.getCopyCommand(directory, checkoutDir));
1879 commands.add(CommandBuilder.instance.getModifyPubspecCommand( 1797 commands.add(CommandBuilder.instance.getModifyPubspecCommand(
1880 pubspecYamlFile, dependencyOverrides)); 1798 pubspecYamlFile, dependencyOverrides));
1881 commands.add(CommandBuilder.instance.getPubCommand( 1799 commands.add(CommandBuilder.instance.getPubCommand(
1882 "get", pubPath, checkoutDir, cacheDir)); 1800 "get", pubPath, checkoutDir, cacheDir));
1883 1801
1884 bool containsWebDirectory = dirExists(directoryPath.append('web')); 1802 bool containsWebDirectory = dirExists(directoryPath.append('web'));
1885 bool containsBuildDartFile = 1803 bool containsBuildDartFile =
1886 fileExists(directoryPath.append('build.dart')); 1804 fileExists(directoryPath.append('build.dart'));
1887 if (containsBuildDartFile) { 1805 if (containsBuildDartFile) {
1888 var dartBinary = new File(dartPath).absolute.path; 1806 var dartBinary = new File(dartVmBinaryFileName).absolute.path;
1889 1807
1890 commands.add(CommandBuilder.instance.getProcessCommand( 1808 commands.add(CommandBuilder.instance.getProcessCommand(
1891 "custom_build", dartBinary, ['build.dart'], null, 1809 "custom_build", dartBinary, ['build.dart'], null,
1892 checkoutDir)); 1810 checkoutDir));
1893 1811
1894 // We only try to deploy the application if it's a webapp. 1812 // We only try to deploy the application if it's a webapp.
1895 if (containsWebDirectory) { 1813 if (containsWebDirectory) {
1896 commands.add(CommandBuilder.instance.getProcessCommand( 1814 commands.add(CommandBuilder.instance.getProcessCommand(
1897 "custom_deploy", dartBinary, ['build.dart', '--deploy'], null, 1815 "custom_deploy", dartBinary, ['build.dart', '--deploy'], null,
1898 checkoutDir)); 1816 checkoutDir));
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
2053 return ".flaky.log"; 1971 return ".flaky.log";
2054 } 1972 }
2055 1973
2056 static String testOutcomeFileName() { 1974 static String testOutcomeFileName() {
2057 // If test.py was invoked with '--write-test-outcome-log it will write 1975 // If test.py was invoked with '--write-test-outcome-log it will write
2058 // test outcomes to this file. 1976 // test outcomes to this file.
2059 return ".test-outcome.log"; 1977 return ".test-outcome.log";
2060 } 1978 }
2061 1979
2062 static void ensureExists(String filename, Map configuration) { 1980 static void ensureExists(String filename, Map configuration) {
2063 if (!configuration['list'] && !(new File(filename).existsSync())) { 1981 if (!configuration['list'] && !existsCache.doesFileExist(filename)) {
2064 throw "Executable '$filename' does not exist"; 1982 throw "'$filename' does not exist";
2065 } 1983 }
2066 } 1984 }
2067 1985
2068 static Path absolutePath(Path path) { 1986 static Path absolutePath(Path path) {
2069 if (!path.isAbsolute) { 1987 if (!path.isAbsolute) {
2070 return currentWorkingDirectory.join(path); 1988 return currentWorkingDirectory.join(path);
2071 } 1989 }
2072 return path; 1990 return path;
2073 } 1991 }
2074 1992
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
2264 * $pass tests are expected to pass 2182 * $pass tests are expected to pass
2265 * $failOk tests are expected to fail that we won't fix 2183 * $failOk tests are expected to fail that we won't fix
2266 * $fail tests are expected to fail that we should fix 2184 * $fail tests are expected to fail that we should fix
2267 * $crash tests are expected to crash that we should fix 2185 * $crash tests are expected to crash that we should fix
2268 * $timeout tests are allowed to timeout 2186 * $timeout tests are allowed to timeout
2269 * $compileErrorSkip tests are skipped on browsers due to compile-time error 2187 * $compileErrorSkip tests are skipped on browsers due to compile-time error
2270 """; 2188 """;
2271 print(report); 2189 print(report);
2272 } 2190 }
2273 } 2191 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698