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

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

Issue 2863253002: Tighten up a bunch of types in test.dart. (Closed)
Patch Set: Merge branch 'master' into types-for-test Created 3 years, 7 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
« no previous file with comments | « tools/testing/dart/test_runner.dart ('k') | tools/testing/dart/utils.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 String createPubspecCheckoutDirectory(Path directoryOfPubspecYaml) { 408 String createPubspecCheckoutDirectory(Path directoryOfPubspecYaml) {
409 var sdk = configuration['use_sdk'] ? 'sdk' : ''; 409 var sdk = configuration['use_sdk'] ? 'sdk' : '';
410 return createGeneratedTestDirectoryHelper( 410 return createGeneratedTestDirectoryHelper(
411 "pubspec_checkouts", sdk, directoryOfPubspecYaml, ""); 411 "pubspec_checkouts", sdk, directoryOfPubspecYaml, "");
412 } 412 }
413 413
414 String createPubPackageBuildsDirectory(Path directoryOfPubspecYaml) { 414 String createPubPackageBuildsDirectory(Path directoryOfPubspecYaml) {
415 return createGeneratedTestDirectoryHelper( 415 return createGeneratedTestDirectoryHelper(
416 "pub_package_builds", 'public_packages', directoryOfPubspecYaml, ""); 416 "pub_package_builds", 'public_packages', directoryOfPubspecYaml, "");
417 } 417 }
418
419 /**
420 * Helper function for discovering the packages in the dart repository.
421 */
422 Future<List> listDir(Path path, Function isValid) {
423 var dir = new Directory(path.toNativePath());
424 return dir.exists().then((exists) {
425 if (!exists) return [];
426 return dir
427 .list(recursive: false)
428 .where((fse) => fse is Directory)
429 .map((FileSystemEntity entity) {
430 var directory = entity as Directory;
431 var fullPath = directory.absolute.path;
432 var packageName = new Path(fullPath).filename;
433 if (isValid(packageName)) {
434 return [packageName, path.append(packageName).toNativePath()];
435 }
436 return null;
437 })
438 .where((name) => name != null)
439 .toList();
440 });
441 }
442 } 418 }
443 419
444 Future<Iterable<String>> ccTestLister(String runnerPath) { 420 Future<Iterable<String>> ccTestLister(String runnerPath) {
445 return Process.run(runnerPath, ["--list"]).then((ProcessResult result) { 421 return Process.run(runnerPath, ["--list"]).then((ProcessResult result) {
446 if (result.exitCode != 0) { 422 if (result.exitCode != 0) {
447 throw "Failed to list tests: '$runnerPath --list'. " 423 throw "Failed to list tests: '$runnerPath --list'. "
448 "Process exited with ${result.exitCode}"; 424 "Process exited with ${result.exitCode}";
449 } 425 }
450 return result.stdout 426 return result.stdout
451 .split('\n') 427 .split('\n')
452 .map((line) => line.trim()) 428 .map((line) => line.trim())
453 .where((name) => name.length > 0); 429 .where((name) => name.isNotEmpty);
454 }); 430 });
455 } 431 }
456 432
457 /** 433 /**
458 * A specialized [TestSuite] that runs tests written in C to unit test 434 * A specialized [TestSuite] that runs tests written in C to unit test
459 * the Dart virtual machine and its API. 435 * the Dart virtual machine and its API.
460 * 436 *
461 * The tests are compiled into a monolithic executable by the build step. 437 * The tests are compiled into a monolithic executable by the build step.
462 * The executable lists its tests when run with the --list command line flag. 438 * The executable lists its tests when run with the --list command line flag.
463 * Individual tests are run by specifying them on the command line. 439 * Individual tests are run by specifying them on the command line.
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 * directory, and creates [TestCase]s that compile and/or run them. 545 * directory, and creates [TestCase]s that compile and/or run them.
570 */ 546 */
571 class StandardTestSuite extends TestSuite { 547 class StandardTestSuite extends TestSuite {
572 final Path suiteDir; 548 final Path suiteDir;
573 final List<String> statusFilePaths; 549 final List<String> statusFilePaths;
574 TestExpectations testExpectations; 550 TestExpectations testExpectations;
575 List<TestInformation> cachedTests; 551 List<TestInformation> cachedTests;
576 final Path dartDir; 552 final Path dartDir;
577 Predicate<String> isTestFilePredicate; 553 Predicate<String> isTestFilePredicate;
578 final bool listRecursively; 554 final bool listRecursively;
579 final extraVmOptions; 555 final List<String> extraVmOptions;
580 List<Uri> _dart2JsBootstrapDependencies; 556 List<Uri> _dart2JsBootstrapDependencies;
581 557
582 StandardTestSuite(Map configuration, String suiteName, Path suiteDirectory, 558 StandardTestSuite(Map configuration, String suiteName, Path suiteDirectory,
583 this.statusFilePaths, 559 this.statusFilePaths,
584 {this.isTestFilePredicate, bool recursive: false}) 560 {this.isTestFilePredicate, bool recursive: false})
585 : dartDir = TestUtils.dartDir, 561 : dartDir = TestUtils.dartDir,
586 listRecursively = recursive, 562 listRecursively = recursive,
587 suiteDir = TestUtils.dartDir.join(suiteDirectory), 563 suiteDir = TestUtils.dartDir.join(suiteDirectory),
588 extraVmOptions = TestUtils.getExtraVmOptions(configuration), 564 extraVmOptions = TestUtils.getExtraVmOptions(configuration),
589 super(configuration, suiteName) { 565 super(configuration, suiteName) {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 635
660 List<String> additionalOptions(Path filePath) => []; 636 List<String> additionalOptions(Path filePath) => [];
661 637
662 forEachTest(Function onTest, Map testCache, [VoidFunction onDone]) async { 638 forEachTest(Function onTest, Map testCache, [VoidFunction onDone]) async {
663 await updateDartium(); 639 await updateDartium();
664 doTest = onTest; 640 doTest = onTest;
665 testExpectations = await readExpectations(); 641 testExpectations = await readExpectations();
666 642
667 // Check if we have already found and generated the tests for this suite. 643 // Check if we have already found and generated the tests for this suite.
668 if (!testCache.containsKey(suiteName)) { 644 if (!testCache.containsKey(suiteName)) {
669 cachedTests = testCache[suiteName] = []; 645 cachedTests = testCache[suiteName] = <TestInformation>[];
670 await enqueueTests(); 646 await enqueueTests();
671 } else { 647 } else {
672 for (var info in testCache[suiteName]) { 648 for (var info in testCache[suiteName]) {
673 enqueueTestCaseFromTestInformation(info); 649 enqueueTestCaseFromTestInformation(info);
674 } 650 }
675 } 651 }
676 testExpectations = null; 652 testExpectations = null;
677 cachedTests = null; 653 cachedTests = null;
678 doTest = null; 654 doTest = null;
679 if (onDone != null) onDone(); 655 if (onDone != null) onDone();
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 } 819 }
844 820
845 void enqueueStandardTest(List<Command> baseCommands, TestInformation info, 821 void enqueueStandardTest(List<Command> baseCommands, TestInformation info,
846 String testName, Set<Expectation> expectations) { 822 String testName, Set<Expectation> expectations) {
847 var commonArguments = 823 var commonArguments =
848 commonArgumentsFromFile(info.filePath, info.optionsFromFile); 824 commonArgumentsFromFile(info.filePath, info.optionsFromFile);
849 825
850 List<List<String>> vmOptionsList = getVmOptions(info.optionsFromFile); 826 List<List<String>> vmOptionsList = getVmOptions(info.optionsFromFile);
851 assert(!vmOptionsList.isEmpty); 827 assert(!vmOptionsList.isEmpty);
852 828
853 for (var vmOptionsVarient = 0; 829 for (var vmOptionsVariant = 0;
854 vmOptionsVarient < vmOptionsList.length; 830 vmOptionsVariant < vmOptionsList.length;
855 vmOptionsVarient++) { 831 vmOptionsVariant++) {
856 var vmOptions = vmOptionsList[vmOptionsVarient]; 832 var vmOptions = vmOptionsList[vmOptionsVariant];
857 var allVmOptions = vmOptions; 833 var allVmOptions = vmOptions;
858 if (!extraVmOptions.isEmpty) { 834 if (!extraVmOptions.isEmpty) {
859 allVmOptions = new List.from(vmOptions)..addAll(extraVmOptions); 835 allVmOptions = new List.from(vmOptions)..addAll(extraVmOptions);
860 } 836 }
861 837
862 var commands = baseCommands.toList(); 838 var commands = baseCommands.toList();
863 commands.addAll( 839 commands.addAll(
864 makeCommands(info, vmOptionsVarient, allVmOptions, commonArguments)); 840 makeCommands(info, vmOptionsVariant, allVmOptions, commonArguments));
865 enqueueNewTestCase(new TestCase( 841 enqueueNewTestCase(new TestCase(
866 '$suiteName/$testName', commands, configuration, expectations, 842 '$suiteName/$testName', commands, configuration, expectations,
867 isNegative: isNegative(info), info: info)); 843 isNegative: isNegative(info), info: info));
868 } 844 }
869 } 845 }
870 846
871 bool expectCompileError(TestInformation info) { 847 bool expectCompileError(TestInformation info) {
872 return info.hasCompileError || 848 return info.hasCompileError ||
873 (configuration['checked'] && info.hasCompileErrorIfChecked); 849 (configuration['checked'] && info.hasCompileErrorIfChecked);
874 } 850 }
875 851
876 bool isNegative(TestInformation info) { 852 bool isNegative(TestInformation info) {
877 bool negative = expectCompileError(info) || 853 bool negative = expectCompileError(info) ||
878 (configuration['checked'] && info.isNegativeIfChecked); 854 (configuration['checked'] && info.isNegativeIfChecked);
879 if (info.hasRuntimeError && hasRuntime) { 855 if (info.hasRuntimeError && hasRuntime) {
880 negative = true; 856 negative = true;
881 } 857 }
882 return negative; 858 return negative;
883 } 859 }
884 860
885 List<Command> makeCommands( 861 List<Command> makeCommands(TestInformation info, int vmOptionsVarient,
886 TestInformation info, int vmOptionsVarient, var vmOptions, var args) { 862 List<String> vmOptions, List<String> args) {
887 List<Command> commands = <Command>[]; 863 var commands = <Command>[];
888 CompilerConfiguration compilerConfiguration = 864 var compilerConfiguration = new CompilerConfiguration(configuration);
889 new CompilerConfiguration(configuration);
890 List<String> sharedOptions = info.optionsFromFile['sharedOptions']; 865 List<String> sharedOptions = info.optionsFromFile['sharedOptions'];
891 866
892 List<String> compileTimeArguments = <String>[]; 867 var compileTimeArguments = <String>[];
893 String tempDir; 868 String tempDir;
894 if (compilerConfiguration.hasCompiler) { 869 if (compilerConfiguration.hasCompiler) {
895 compileTimeArguments = compilerConfiguration.computeCompilerArguments( 870 compileTimeArguments = compilerConfiguration.computeCompilerArguments(
896 vmOptions, sharedOptions, args); 871 vmOptions, sharedOptions, args);
897 // Avoid doing this for analyzer. 872 // Avoid doing this for analyzer.
898 var path = info.filePath; 873 var path = info.filePath;
899 if (vmOptionsVarient != 0) { 874 if (vmOptionsVarient != 0) {
900 // Ensure a unique directory for each test case. 875 // Ensure a unique directory for each test case.
901 path = path.join(new Path(vmOptionsVarient.toString())); 876 path = path.join(new Path(vmOptionsVarient.toString()));
902 } 877 }
903 tempDir = createCompilationOutputDirectory(path); 878 tempDir = createCompilationOutputDirectory(path);
904 879
905 List<String> otherResources = info.optionsFromFile['otherResources']; 880 List<String> otherResources = info.optionsFromFile['otherResources'];
906 for (String name in otherResources) { 881 for (var name in otherResources) {
907 Path namePath = new Path(name); 882 var namePath = new Path(name);
908 Path fromPath = info.filePath.directoryPath.join(namePath); 883 var fromPath = info.filePath.directoryPath.join(namePath);
909 new File('$tempDir/$name').parent.createSync(recursive: true); 884 new File('$tempDir/$name').parent.createSync(recursive: true);
910 new File(fromPath.toNativePath()).copySync('$tempDir/$name'); 885 new File(fromPath.toNativePath()).copySync('$tempDir/$name');
911 } 886 }
912 } 887 }
913 888
914 CommandArtifact compilationArtifact = 889 CommandArtifact compilationArtifact =
915 compilerConfiguration.computeCompilationArtifact( 890 compilerConfiguration.computeCompilationArtifact(
916 buildDir, 891 buildDir,
917 tempDir, 892 tempDir,
918 CommandBuilder.instance, 893 CommandBuilder.instance,
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1037 * JavaScript. This function creates a working directory to hold the 1012 * JavaScript. This function creates a working directory to hold the
1038 * JavaScript version of the test, and copies the appropriate framework 1013 * JavaScript version of the test, and copies the appropriate framework
1039 * files to that directory. It creates a [BrowserTestCase], which has 1014 * files to that directory. It creates a [BrowserTestCase], which has
1040 * two sequential steps to be run by the [ProcessQueue] when the test is 1015 * two sequential steps to be run by the [ProcessQueue] when the test is
1041 * executed: a compilation step and an execution step, both with the 1016 * executed: a compilation step and an execution step, both with the
1042 * appropriate executable and arguments. The [expectations] object can be 1017 * appropriate executable and arguments. The [expectations] object can be
1043 * either a Set<String> if the test is a regular test, or a Map<String 1018 * either a Set<String> if the test is a regular test, or a Map<String
1044 * subTestName, Set<String>> if we are running a browser multi-test (one 1019 * subTestName, Set<String>> if we are running a browser multi-test (one
1045 * compilation and many browser runs). 1020 * compilation and many browser runs).
1046 */ 1021 */
1047 void enqueueBrowserTest(List<Command> baseCommands, Path packageRoot, 1022 void enqueueBrowserTest(
1048 Path packages, TestInformation info, String testName, expectations) { 1023 List<Command> baseCommands,
1024 Path packageRoot,
1025 Path packages,
1026 TestInformation info,
1027 String testName,
1028 /* Set<Expectation> | Map<String, Set<Expectation>> */ dynamic
1029 expectations) {
1049 RegExp badChars = new RegExp('[-=/]'); 1030 RegExp badChars = new RegExp('[-=/]');
1050 List VmOptionsList = getVmOptions(info.optionsFromFile); 1031 List VmOptionsList = getVmOptions(info.optionsFromFile);
1051 bool multipleOptions = VmOptionsList.length > 1; 1032 bool multipleOptions = VmOptionsList.length > 1;
1052 for (var vmOptions in VmOptionsList) { 1033 for (var vmOptions in VmOptionsList) {
1053 String optionsName = 1034 String optionsName =
1054 multipleOptions ? vmOptions.join('-').replaceAll(badChars, '') : ''; 1035 multipleOptions ? vmOptions.join('-').replaceAll(badChars, '') : '';
1055 String tempDir = createOutputDirectory(info.filePath, optionsName); 1036 String tempDir = createOutputDirectory(info.filePath, optionsName);
1056 enqueueBrowserTestWithOptions(baseCommands, packageRoot, packages, info, 1037 enqueueBrowserTestWithOptions(baseCommands, packageRoot, packages, info,
1057 testName, expectations, vmOptions, tempDir); 1038 testName, expectations, vmOptions, tempDir);
1058 } 1039 }
1059 } 1040 }
1060 1041
1061 void enqueueBrowserTestWithOptions( 1042 void enqueueBrowserTestWithOptions(
1062 List<Command> baseCommands, 1043 List<Command> baseCommands,
1063 Path packageRoot, 1044 Path packageRoot,
1064 Path packages, 1045 Path packages,
1065 TestInformation info, 1046 TestInformation info,
1066 String testName, 1047 String testName,
1067 expectations, 1048 /* Set<Expectation> | Map<String, Set<Expectation>> */ expectations,
1068 List<String> vmOptions, 1049 List<String> vmOptions,
1069 String tempDir) { 1050 String tempDir) {
1070 // TODO(Issue 14651): If we're on dartium, we need to pass [packageRoot] 1051 // TODO(Issue 14651): If we're on dartium, we need to pass [packageRoot]
1071 // on to the browser (it may be test specific). 1052 // on to the browser (it may be test specific).
1072 1053
1073 Path filePath = info.filePath; 1054 Path filePath = info.filePath;
1074 String filename = filePath.toString(); 1055 String filename = filePath.toString();
1075 1056
1076 final String compiler = configuration['compiler']; 1057 final String compiler = configuration['compiler'];
1077 final String runtime = configuration['runtime']; 1058 final String runtime = configuration['runtime'];
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1234 // Create BrowserTestCase and queue it. 1215 // Create BrowserTestCase and queue it.
1235 var fullTestName = multitest ? '$testName/$subtestName' : testName; 1216 var fullTestName = multitest ? '$testName/$subtestName' : testName;
1236 var expectation = multitest ? expectations[fullTestName] : expectations; 1217 var expectation = multitest ? expectations[fullTestName] : expectations;
1237 var testCase = new BrowserTestCase('$suiteName/$fullTestName', commandSet, 1218 var testCase = new BrowserTestCase('$suiteName/$fullTestName', commandSet,
1238 configuration, expectation, info, isNegative(info), fullHtmlPath); 1219 configuration, expectation, info, isNegative(info), fullHtmlPath);
1239 1220
1240 enqueueNewTestCase(testCase); 1221 enqueueNewTestCase(testCase);
1241 } 1222 }
1242 } 1223 }
1243 1224
1244 void enqueueHtmlTest( 1225 void enqueueHtmlTest(HtmlTestInformation info, String testName,
1245 HtmlTestInformation info, String testName, expectations) { 1226 Set<Expectation> expectations) {
1246 final String compiler = configuration['compiler']; 1227 final String compiler = configuration['compiler'];
1247 final String runtime = configuration['runtime']; 1228 final String runtime = configuration['runtime'];
1248 // Html tests work only with the browser controller. 1229 // Html tests work only with the browser controller.
1249 if (!TestUtils.isBrowserRuntime(runtime) || runtime == 'drt') { 1230 if (!TestUtils.isBrowserRuntime(runtime) || runtime == 'drt') {
1250 return; 1231 return;
1251 } 1232 }
1252 bool compileToJS = (compiler == 'dart2js'); 1233 bool compileToJS = (compiler == 'dart2js');
1253 1234
1254 final Path filePath = info.filePath; 1235 final Path filePath = info.filePath;
1255 final String tempDir = createOutputDirectory(filePath, ''); 1236 final String tempDir = createOutputDirectory(filePath, '');
1256 final Uri tempUri = new Uri.file('$tempDir/'); 1237 final Uri tempUri = new Uri.file('$tempDir/');
1257 String contents = htmlTest.getContents(info, compileToJS); 1238 String contents = htmlTest.getContents(info, compileToJS);
1258 final commands = []; 1239 final commands = <Command>[];
1259 1240
1260 void Fail(String message) { 1241 void Fail(String message) {
1261 var msg = "$message: ${info.filePath}"; 1242 var msg = "$message: ${info.filePath}";
1262 DebugLogger.warning(msg); 1243 DebugLogger.warning(msg);
1263 contents = htmlTest.makeFailingHtmlFile(msg); 1244 contents = htmlTest.makeFailingHtmlFile(msg);
1264 } 1245 }
1265 1246
1266 if (info.scripts.length > 0) { 1247 if (info.scripts.length > 0) {
1267 Uri testUri = new Uri.file(filePath.toNativePath()); 1248 Uri testUri = new Uri.file(filePath.toNativePath());
1268 for (String scriptPath in info.scripts) { 1249 for (String scriptPath in info.scripts) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1303 fullHtmlPath, configuration, info.expectedMessages, !isNegative(info))); 1284 fullHtmlPath, configuration, info.expectedMessages, !isNegative(info)));
1304 String testDisplayName = '$suiteName/$testName'; 1285 String testDisplayName = '$suiteName/$testName';
1305 var testCase = new BrowserTestCase(testDisplayName, commands, configuration, 1286 var testCase = new BrowserTestCase(testDisplayName, commands, configuration,
1306 expectations, info, isNegative(info), fullHtmlPath); 1287 expectations, info, isNegative(info), fullHtmlPath);
1307 enqueueNewTestCase(testCase); 1288 enqueueNewTestCase(testCase);
1308 return; 1289 return;
1309 } 1290 }
1310 1291
1311 /** Helper to create a compilation command for a single input file. */ 1292 /** Helper to create a compilation command for a single input file. */
1312 Command _compileCommand(String inputFile, String outputFile, String compiler, 1293 Command _compileCommand(String inputFile, String outputFile, String compiler,
1313 String dir, optionsFromFile) { 1294 String dir, Map optionsFromFile) {
1314 assert(compiler == 'dart2js'); 1295 assert(compiler == 'dart2js');
1315 List<String> args; 1296 List<String> args;
1316 if (compilerPath.endsWith('.dart')) { 1297 if (compilerPath.endsWith('.dart')) {
1317 // Run the compiler script via the Dart VM. 1298 // Run the compiler script via the Dart VM.
1318 args = [compilerPath]; 1299 args = [compilerPath];
1319 } else { 1300 } else {
1320 args = []; 1301 args = [];
1321 } 1302 }
1322 args.addAll(TestUtils.standardOptions(configuration)); 1303 args.addAll(TestUtils.standardOptions(configuration));
1323 String packages = packagesArgument( 1304 String packages = packagesArgument(
1324 optionsFromFile['packageRoot'], optionsFromFile['packages']); 1305 optionsFromFile['packageRoot'], optionsFromFile['packages']);
1325 if (packages != null) args.add(packages); 1306 if (packages != null) args.add(packages);
1326 args.add('--out=$outputFile'); 1307 args.add('--out=$outputFile');
1327 args.add(inputFile); 1308 args.add(inputFile);
1328 List<String> options = optionsFromFile['sharedOptions']; 1309 List<String> options = optionsFromFile['sharedOptions'];
1329 if (options != null) args.addAll(options); 1310 if (options != null) args.addAll(options);
1330 return CommandBuilder.instance.getCompilationCommand( 1311 return CommandBuilder.instance.getCompilationCommand(
1331 compiler, 1312 compiler,
1332 outputFile, 1313 outputFile,
1333 !useSdk, 1314 !useSdk,
1334 dart2JsBootstrapDependencies, 1315 dart2JsBootstrapDependencies,
1335 compilerPath, 1316 compilerPath,
1336 args, 1317 args,
1337 environmentOverrides); 1318 environmentOverrides);
1338 } 1319 }
1339 1320
1340 /** Helper to create a Polymer deploy command for a single HTML file. */ 1321 /** Helper to create a Polymer deploy command for a single HTML file. */
1341 Command _polymerDeployCommand( 1322 Command _polymerDeployCommand(
1342 String inputFile, String outputDir, optionsFromFile) { 1323 String inputFile, String outputDir, Map optionsFromFile) {
1343 List<String> args = []; 1324 List<String> args = [];
1344 String packages = packagesArgument( 1325 String packages = packagesArgument(
1345 optionsFromFile['packageRoot'], optionsFromFile['packages']); 1326 optionsFromFile['packageRoot'], optionsFromFile['packages']);
1346 if (packages != null) args.add(packages); 1327 if (packages != null) args.add(packages);
1347 args 1328 args
1348 ..add('package:polymer/deploy.dart') 1329 ..add('package:polymer/deploy.dart')
1349 ..add('--test') 1330 ..add('--test')
1350 ..add(inputFile) 1331 ..add(inputFile)
1351 ..add('--out') 1332 ..add('--out')
1352 ..add(outputDir) 1333 ..add(outputDir)
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1520 // TODO(gram) Clean these up once the old directives are not supported. 1501 // TODO(gram) Clean these up once the old directives are not supported.
1521 RegExp domImportRegExp = new RegExp( 1502 RegExp domImportRegExp = new RegExp(
1522 r"^[#]?import.*dart:(html|web_audio|indexed_db|svg|web_sql)", 1503 r"^[#]?import.*dart:(html|web_audio|indexed_db|svg|web_sql)",
1523 multiLine: true); 1504 multiLine: true);
1524 1505
1525 var bytes = new File(filePath.toNativePath()).readAsBytesSync(); 1506 var bytes = new File(filePath.toNativePath()).readAsBytesSync();
1526 String contents = decodeUtf8(bytes); 1507 String contents = decodeUtf8(bytes);
1527 bytes = null; 1508 bytes = null;
1528 1509
1529 // Find the options in the file. 1510 // Find the options in the file.
1530 List<List> result = new List<List>(); 1511 var result = <List<String>>[];
1531 List<String> dartOptions; 1512 List<String> dartOptions;
1532 List<String> sharedOptions; 1513 List<String> sharedOptions;
1533 String packageRoot; 1514 String packageRoot;
1534 String packages; 1515 String packages;
1535 1516
1536 Iterable<Match> matches = testOptionsRegExp.allMatches(contents); 1517 Iterable<Match> matches = testOptionsRegExp.allMatches(contents);
1537 for (var match in matches) { 1518 for (var match in matches) {
1538 result.add(match[1].split(' ').where((e) => e != '').toList()); 1519 result.add(match[1].split(' ').where((e) => e != '').toList());
1539 } 1520 }
1540 if (result.isEmpty) result.add([]); 1521 if (result.isEmpty) result.add([]);
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1658 'dart_precompiled', 1639 'dart_precompiled',
1659 'vm', 1640 'vm',
1660 'drt', 1641 'drt',
1661 'dartium', 1642 'dartium',
1662 'ContentShellOnAndroid', 1643 'ContentShellOnAndroid',
1663 'DartiumOnAndroid' 1644 'DartiumOnAndroid'
1664 ]; 1645 ];
1665 var needsVmOptions = COMPILERS.contains(configuration['compiler']) && 1646 var needsVmOptions = COMPILERS.contains(configuration['compiler']) &&
1666 RUNTIMES.contains(configuration['runtime']); 1647 RUNTIMES.contains(configuration['runtime']);
1667 if (!needsVmOptions) return [[]]; 1648 if (!needsVmOptions) return [[]];
1668 final vmOptions = optionsFromFile['vmOptions']; 1649 return optionsFromFile['vmOptions'];
1669 return vmOptions;
1670 } 1650 }
1671 1651
1672 /** 1652 /**
1673 * Read options from a co19 test file. 1653 * Read options from a co19 test file.
1674 * 1654 *
1675 * The reason this is different from [readOptionsFromFile] is that 1655 * The reason this is different from [readOptionsFromFile] is that
1676 * co19 is developed based on a contract which defines certain test 1656 * co19 is developed based on a contract which defines certain test
1677 * tags. These tags may appear unused, but should not be removed 1657 * tags. These tags may appear unused, but should not be removed
1678 * without consulting with the co19 team. 1658 * without consulting with the co19 team.
1679 * 1659 *
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1713 1693
1714 /// Used for testing packages in on off settings, i.e., we pass in the actual 1694 /// Used for testing packages in on off settings, i.e., we pass in the actual
1715 /// directory that we want to test. 1695 /// directory that we want to test.
1716 class PKGTestSuite extends StandardTestSuite { 1696 class PKGTestSuite extends StandardTestSuite {
1717 PKGTestSuite(Map configuration, Path directoryPath) 1697 PKGTestSuite(Map configuration, Path directoryPath)
1718 : super(configuration, directoryPath.filename, directoryPath, 1698 : super(configuration, directoryPath.filename, directoryPath,
1719 ["$directoryPath/.status"], 1699 ["$directoryPath/.status"],
1720 isTestFilePredicate: (f) => f.endsWith('_test.dart'), 1700 isTestFilePredicate: (f) => f.endsWith('_test.dart'),
1721 recursive: true); 1701 recursive: true);
1722 1702
1723 void enqueueBrowserTest(List<Command> baseCommands, Path packageRoot, 1703 void enqueueBrowserTest(
1724 packages, TestInformation info, String testName, expectations) { 1704 List<Command> baseCommands,
1705 Path packageRoot,
1706 packages,
1707 TestInformation info,
1708 String testName,
1709 /* Set<Expectation> | Map<String, Set<Expectation>> */ dynamic
1710 expectations) {
1725 String runtime = configuration['runtime']; 1711 String runtime = configuration['runtime'];
1726 Path filePath = info.filePath; 1712 Path filePath = info.filePath;
1727 Path dir = filePath.directoryPath; 1713 Path dir = filePath.directoryPath;
1728 String nameNoExt = filePath.filenameWithoutExtension; 1714 String nameNoExt = filePath.filenameWithoutExtension;
1729 Path customHtmlPath = dir.append('$nameNoExt.html'); 1715 Path customHtmlPath = dir.append('$nameNoExt.html');
1730 File customHtml = new File(customHtmlPath.toNativePath()); 1716 File customHtml = new File(customHtmlPath.toNativePath());
1731 if (!customHtml.existsSync()) { 1717 if (!customHtml.existsSync()) {
1732 super.enqueueBrowserTest( 1718 super.enqueueBrowserTest(
1733 baseCommands, packageRoot, packages, info, testName, expectations); 1719 baseCommands, packageRoot, packages, info, testName, expectations);
1734 } else { 1720 } else {
1735 Path relativeHtml = customHtmlPath.relativeTo(TestUtils.dartDir); 1721 Path relativeHtml = customHtmlPath.relativeTo(TestUtils.dartDir);
1736 List<Command> commands = []..addAll(baseCommands); 1722 var commands = baseCommands.toList();
1737 var fullPath = _createUrlPathFromFile(customHtmlPath); 1723 var fullPath = _createUrlPathFromFile(customHtmlPath);
1738 1724
1739 commands.add(CommandBuilder.instance.getBrowserTestCommand( 1725 commands.add(CommandBuilder.instance.getBrowserTestCommand(
1740 runtime, fullPath, configuration, !isNegative(info))); 1726 runtime, fullPath, configuration, !isNegative(info)));
1741 String testDisplayName = '$suiteName/$testName'; 1727 String testDisplayName = '$suiteName/$testName';
1742 enqueueNewTestCase(new BrowserTestCase( 1728 enqueueNewTestCase(new BrowserTestCase(
1743 testDisplayName, 1729 testDisplayName,
1744 commands, 1730 commands,
1745 configuration, 1731 configuration,
1746 expectations, 1732 expectations,
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
1848 } 1834 }
1849 return _cache[path]; 1835 return _cache[path];
1850 } 1836 }
1851 } 1837 }
1852 1838
1853 class TestUtils { 1839 class TestUtils {
1854 /** 1840 /**
1855 * Any script using TestUtils must set dartDirUri to a file:// URI 1841 * Any script using TestUtils must set dartDirUri to a file:// URI
1856 * pointing to the root of the Dart checkout. 1842 * pointing to the root of the Dart checkout.
1857 */ 1843 */
1858 static setDartDirUri(uri) { 1844 static void setDartDirUri(Uri uri) {
1859 dartDirUri = uri; 1845 dartDirUri = uri;
1860 dartDir = new Path(uri.toFilePath()); 1846 dartDir = new Path(uri.toFilePath());
1861 } 1847 }
1862 1848
1863 static Random rand = new Random.secure(); 1849 static Random rand = new Random.secure();
1864 static Uri dartDirUri; 1850 static Uri dartDirUri;
1865 static Path dartDir; 1851 static Path dartDir;
1866 static LastModifiedCache lastModifiedCache = new LastModifiedCache(); 1852 static LastModifiedCache lastModifiedCache = new LastModifiedCache();
1867 static ExistsCache existsCache = new ExistsCache(); 1853 static ExistsCache existsCache = new ExistsCache();
1868 static Path currentWorkingDirectory = new Path(Directory.current.path); 1854 static Path currentWorkingDirectory = new Path(Directory.current.path);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1945 throw new Exception('Can\'t delete path $native_path. ' 1931 throw new Exception('Can\'t delete path $native_path. '
1946 'This path might be too long'); 1932 'This path might be too long');
1947 } 1933 }
1948 }); 1934 });
1949 } else { 1935 } else {
1950 var dir = new Directory(path); 1936 var dir = new Directory(path);
1951 return dir.delete(recursive: true); 1937 return dir.delete(recursive: true);
1952 } 1938 }
1953 } 1939 }
1954 1940
1955 static deleteTempSnapshotDirectory(Map configuration) { 1941 static void deleteTempSnapshotDirectory(Map configuration) {
1956 if (configuration['compiler'] == 'dart2app' || 1942 if (configuration['compiler'] == 'dart2app' ||
1957 configuration['compiler'] == 'dart2appjit' || 1943 configuration['compiler'] == 'dart2appjit' ||
1958 configuration['compiler'] == 'precompiler') { 1944 configuration['compiler'] == 'precompiler') {
1959 var checked = configuration['checked'] ? '-checked' : ''; 1945 var checked = configuration['checked'] ? '-checked' : '';
1960 var strong = configuration['strong'] ? '-strong' : ''; 1946 var strong = configuration['strong'] ? '-strong' : '';
1961 var minified = configuration['minified'] ? '-minified' : ''; 1947 var minified = configuration['minified'] ? '-minified' : '';
1962 var csp = configuration['csp'] ? '-csp' : ''; 1948 var csp = configuration['csp'] ? '-csp' : '';
1963 var sdk = configuration['use_sdk'] ? '-sdk' : ''; 1949 var sdk = configuration['use_sdk'] ? '-sdk' : '';
1964 var dirName = "${configuration['compiler']}" 1950 var dirName = "${configuration['compiler']}"
1965 "$checked$strong$minified$csp$sdk"; 1951 "$checked$strong$minified$csp$sdk";
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
2084 2070
2085 static String configurationDir(Map configuration) { 2071 static String configurationDir(Map configuration) {
2086 // This returns the correct configuration directory (the last component 2072 // This returns the correct configuration directory (the last component
2087 // of the output directory path) for regular dart checkouts. 2073 // of the output directory path) for regular dart checkouts.
2088 // Dartium checkouts use the --build-directory option to pass in the 2074 // Dartium checkouts use the --build-directory option to pass in the
2089 // correct build directory explicitly. 2075 // correct build directory explicitly.
2090 // We allow our code to have been cross compiled, i.e., that there 2076 // We allow our code to have been cross compiled, i.e., that there
2091 // is an X in front of the arch. We don't allow both a cross compiled 2077 // is an X in front of the arch. We don't allow both a cross compiled
2092 // and a normal version to be present (except if you specifically pass 2078 // and a normal version to be present (except if you specifically pass
2093 // in the build_directory). 2079 // in the build_directory).
2094 var mode; 2080 String mode;
2095 switch (configuration['mode']) { 2081 switch (configuration['mode']) {
2096 case 'debug': 2082 case 'debug':
2097 mode = 'Debug'; 2083 mode = 'Debug';
2098 break; 2084 break;
2099 case 'release': 2085 case 'release':
2100 mode = 'Release'; 2086 mode = 'Release';
2101 break; 2087 break;
2102 case 'product': 2088 case 'product':
2103 mode = 'Product'; 2089 mode = 'Product';
2104 break; 2090 break;
2105 default: 2091 default:
2106 throw 'Unrecognized mode configuration: ${configuration['mode']}'; 2092 throw 'Unrecognized mode configuration: ${configuration['mode']}';
2107 } 2093 }
2108 var os; 2094 String os;
2109 switch (configuration['system']) { 2095 switch (configuration['system']) {
2110 case 'android': 2096 case 'android':
2111 os = 'Android'; 2097 os = 'Android';
2112 break; 2098 break;
2113 case 'fuchsia': 2099 case 'fuchsia':
2114 case 'linux': 2100 case 'linux':
2115 case 'macos': 2101 case 'macos':
2116 case 'windows': 2102 case 'windows':
2117 os = ''; 2103 os = '';
2118 break; 2104 break;
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
2229 } 2215 }
2230 if (path.length > WINDOWS_SHORTEN_PATH_LIMIT) { 2216 if (path.length > WINDOWS_SHORTEN_PATH_LIMIT) {
2231 ++shortNameCounter; 2217 ++shortNameCounter;
2232 var pathEnd = path.substring(path.length - WINDOWS_PATH_END_LENGTH); 2218 var pathEnd = path.substring(path.length - WINDOWS_PATH_END_LENGTH);
2233 path = "short${shortNameCounter}_$pathEnd"; 2219 path = "short${shortNameCounter}_$pathEnd";
2234 } 2220 }
2235 } 2221 }
2236 return path; 2222 return path;
2237 } 2223 }
2238 } 2224 }
OLDNEW
« no previous file with comments | « tools/testing/dart/test_runner.dart ('k') | tools/testing/dart/utils.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698