OLD | NEW |
---|---|
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 "html_test.dart" as htmlTest; | |
20 import "multitest.dart"; | 21 import "multitest.dart"; |
21 import "status_file_parser.dart"; | 22 import "status_file_parser.dart"; |
22 import "test_runner.dart"; | 23 import "test_runner.dart"; |
23 import "utils.dart"; | 24 import "utils.dart"; |
24 import "http_server.dart" show PREFIX_BUILDDIR, PREFIX_DARTDIR; | 25 import "http_server.dart" show PREFIX_BUILDDIR, PREFIX_DARTDIR; |
25 | 26 |
26 import "compiler_configuration.dart" show | 27 import "compiler_configuration.dart" show |
27 CommandArtifact, | 28 CommandArtifact, |
28 CompilerConfiguration; | 29 CompilerConfiguration; |
29 | 30 |
30 import "runtime_configuration.dart" show | 31 import "runtime_configuration.dart" show |
31 RuntimeConfiguration; | 32 RuntimeConfiguration; |
32 | 33 |
33 part "browser_test.dart"; | 34 part "browser_test.dart"; |
34 | 35 |
35 | 36 |
36 RegExp multiHtmlTestGroupRegExp = new RegExp(r"\s*[^/]\s*group\('[^,']*"); | 37 RegExp multiHtmlTestGroupRegExp = new RegExp(r"\s*[^/]\s*group\('[^,']*"); |
37 RegExp multiHtmlTestRegExp = new RegExp(r"useHtmlIndividualConfiguration()"); | 38 RegExp multiHtmlTestRegExp = new RegExp(r"useHtmlIndividualConfiguration()"); |
38 // Require at least one non-space character before '///' | 39 // Require at least one non-space character before '///' |
39 RegExp multiTestRegExp = new RegExp(r"\S *" | 40 RegExp multiTestRegExp = new RegExp(r"\S *" |
40 r"/// \w+:(.*)"); | 41 r"/// \w+:(.*)"); |
41 | 42 |
42 /** | 43 /** |
43 * A simple function that tests [arg] and returns `true` or `false`. | 44 * A simple function that tests [arg] and returns `true` or `false`. |
44 */ | 45 */ |
45 typedef bool Predicate<T>(T arg); | 46 typedef bool Predicate<T>(T arg); |
46 | 47 |
47 typedef void CreateTest(Path filePath, | 48 typedef void CreateTest(Path filePath, |
49 Path originTestPath, | |
48 bool hasCompileError, | 50 bool hasCompileError, |
49 bool hasRuntimeError, | 51 bool hasRuntimeError, |
50 {bool isNegativeIfChecked, | 52 {bool isNegativeIfChecked, |
51 bool hasCompileErrorIfChecked, | 53 bool hasCompileErrorIfChecked, |
52 bool hasStaticWarning, | 54 bool hasStaticWarning, |
53 String multitestKey, | 55 String multitestKey}); |
54 Path originTestPath}); | |
55 | 56 |
56 typedef void VoidFunction(); | 57 typedef void VoidFunction(); |
57 | 58 |
58 /** | 59 /** |
59 * Calls [function] asynchronously. Returns a future that completes with the | 60 * Calls [function] asynchronously. Returns a future that completes with the |
60 * result of the function. If the function is `null`, returns a future that | 61 * result of the function. If the function is `null`, returns a future that |
61 * completes immediately with `null`. | 62 * completes immediately with `null`. |
62 */ | 63 */ |
63 Future asynchronously(function()) { | 64 Future asynchronously(function()) { |
64 if (function == null) return new Future.value(null); | 65 if (function == null) return new Future.value(null); |
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
556 }).catchError((error) { | 557 }).catchError((error) { |
557 print("Fatal error occured: $error"); | 558 print("Fatal error occured: $error"); |
558 exit(1); | 559 exit(1); |
559 }); | 560 }); |
560 }); | 561 }); |
561 } | 562 } |
562 } | 563 } |
563 | 564 |
564 | 565 |
565 class TestInformation { | 566 class TestInformation { |
567 Path filePath; | |
566 Path originTestPath; | 568 Path originTestPath; |
567 Path filePath; | |
568 Map optionsFromFile; | 569 Map optionsFromFile; |
569 bool hasCompileError; | 570 bool hasCompileError; |
570 bool hasRuntimeError; | 571 bool hasRuntimeError; |
571 bool isNegativeIfChecked; | 572 bool isNegativeIfChecked; |
572 bool hasCompileErrorIfChecked; | 573 bool hasCompileErrorIfChecked; |
573 bool hasStaticWarning; | 574 bool hasStaticWarning; |
574 String multitestKey; | 575 String multitestKey; |
575 | 576 |
576 TestInformation(this.filePath, this.optionsFromFile, | 577 TestInformation(this.filePath, this.originTestPath, this.optionsFromFile, |
577 this.hasCompileError, this.hasRuntimeError, | 578 this.hasCompileError, this.hasRuntimeError, |
578 this.isNegativeIfChecked, this.hasCompileErrorIfChecked, | 579 this.isNegativeIfChecked, this.hasCompileErrorIfChecked, |
579 this.hasStaticWarning, | 580 this.hasStaticWarning, |
580 {this.multitestKey, this.originTestPath}) { | 581 {this.multitestKey: ''}) { |
581 assert(filePath.isAbsolute); | 582 assert(filePath.isAbsolute); |
582 if (originTestPath == null) originTestPath = filePath; | |
583 } | 583 } |
584 } | 584 } |
585 | 585 |
586 | |
587 class HtmlTestInformation extends TestInformation { | |
588 List<String> expectedMessages; | |
589 List<String> scripts; | |
590 | |
591 HtmlTestInformation(Path filePath, this.expectedMessages, this.scripts) | |
592 : super(filePath, filePath, | |
593 {'isMultitest': false, 'isMultiHtmlTest': false}, | |
594 false, false, false, false, false) {} | |
595 } | |
596 | |
ricow1
2014/11/04 09:18:03
two newlines
Bill Hesse
2014/11/04 16:29:01
Put two newlines between all classes in the file.
| |
586 /** | 597 /** |
587 * A standard [TestSuite] implementation that searches for tests in a | 598 * A standard [TestSuite] implementation that searches for tests in a |
588 * directory, and creates [TestCase]s that compile and/or run them. | 599 * directory, and creates [TestCase]s that compile and/or run them. |
589 */ | 600 */ |
590 class StandardTestSuite extends TestSuite { | 601 class StandardTestSuite extends TestSuite { |
591 final Path suiteDir; | 602 final Path suiteDir; |
592 final List<String> statusFilePaths; | 603 final List<String> statusFilePaths; |
593 TestExpectations testExpectations; | 604 TestExpectations testExpectations; |
594 List<TestInformation> cachedTests; | 605 List<TestInformation> cachedTests; |
595 final Path dartDir; | 606 final Path dartDir; |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
664 | 675 |
665 List<Uri> get dart2JsBootstrapDependencies => _dart2JsBootstrapDependencies; | 676 List<Uri> get dart2JsBootstrapDependencies => _dart2JsBootstrapDependencies; |
666 | 677 |
667 /** | 678 /** |
668 * The default implementation assumes a file is a test if | 679 * The default implementation assumes a file is a test if |
669 * it ends in "Test.dart". | 680 * it ends in "Test.dart". |
670 */ | 681 */ |
671 bool isTestFile(String filename) { | 682 bool isTestFile(String filename) { |
672 // Use the specified predicate, if provided. | 683 // Use the specified predicate, if provided. |
673 if (isTestFilePredicate != null) return isTestFilePredicate(filename); | 684 if (isTestFilePredicate != null) return isTestFilePredicate(filename); |
685 // TODO(whesse): Remove check, and make the default "_test.dart", if | |
686 // this line is never hit. | |
687 throw new Exception('This suite uses obsolete "Test.dart" filenames'); | |
ricow1
2014/11/04 09:18:03
do this in a separate cl please
Bill Hesse
2014/11/04 16:29:01
Done.
| |
688 } | |
674 | 689 |
675 return filename.endsWith("Test.dart"); | 690 bool isHtmlTestFile(String filename) => filename.endsWith('_htmltest.html'); |
676 } | |
677 | 691 |
678 List<String> additionalOptions(Path filePath) => []; | 692 List<String> additionalOptions(Path filePath) => []; |
679 | 693 |
680 Map<String, String> localPackageDirectories; | 694 Map<String, String> localPackageDirectories; |
681 | 695 |
682 void forEachTest(Function onTest, Map testCache, [VoidFunction onDone]) { | 696 void forEachTest(Function onTest, Map testCache, [VoidFunction onDone]) { |
683 discoverPackagesInRepository().then((Map packageDirectories) { | 697 discoverPackagesInRepository().then((Map packageDirectories) { |
684 localPackageDirectories = packageDirectories; | 698 localPackageDirectories = packageDirectories; |
685 return updateDartium(); | 699 return updateDartium(); |
686 }).then((_) { | 700 }).then((_) { |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
761 group.add(listCompleter.future); | 775 group.add(listCompleter.future); |
762 | 776 |
763 var lister = dir.list(recursive: listRecursively) | 777 var lister = dir.list(recursive: listRecursively) |
764 .listen((FileSystemEntity fse) { | 778 .listen((FileSystemEntity fse) { |
765 if (fse is File) enqueueFile(fse.path, group); | 779 if (fse is File) enqueueFile(fse.path, group); |
766 }, | 780 }, |
767 onDone: listCompleter.complete); | 781 onDone: listCompleter.complete); |
768 } | 782 } |
769 | 783 |
770 void enqueueFile(String filename, FutureGroup group) { | 784 void enqueueFile(String filename, FutureGroup group) { |
785 if (isHtmlTestFile(filename)) { | |
786 var info = htmlTest.getInformation(filename); | |
787 if (info == null) { | |
788 print("Invalid HtmlTest $filename"); | |
ricow1
2014/11/04 09:18:03
so I don't think this will catch peoples attention
Bill Hesse
2014/11/04 16:29:01
This is rather hard to do. At this point, we woul
| |
789 return; | |
790 } | |
791 cachedTests.add(info); | |
792 enqueueTestCaseFromTestInformation(info); | |
793 return; | |
794 } | |
771 if (!isTestFile(filename)) return; | 795 if (!isTestFile(filename)) return; |
772 Path filePath = new Path(filename); | 796 Path filePath = new Path(filename); |
773 | 797 |
774 // Only run the tests that match the pattern. | 798 // Only run the tests that match the pattern. |
775 if (filePath.filename.endsWith('test_config.dart')) return; | 799 if (filePath.filename.endsWith('test_config.dart')) return; |
776 | 800 |
777 var optionsFromFile = readOptionsFromFile(filePath); | 801 var optionsFromFile = readOptionsFromFile(filePath); |
778 CreateTest createTestCase = makeTestCaseCreator(optionsFromFile); | 802 CreateTest createTestCase = makeTestCaseCreator(optionsFromFile); |
779 | 803 |
780 if (optionsFromFile['isMultitest']) { | 804 if (optionsFromFile['isMultitest']) { |
781 group.add(doMultitest(filePath, buildDir, suiteDir, createTestCase)); | 805 group.add(doMultitest(filePath, buildDir, suiteDir, createTestCase)); |
782 } else { | 806 } else { |
783 createTestCase(filePath, | 807 createTestCase(filePath, |
808 filePath, | |
784 optionsFromFile['hasCompileError'], | 809 optionsFromFile['hasCompileError'], |
785 optionsFromFile['hasRuntimeError'], | 810 optionsFromFile['hasRuntimeError'], |
786 hasStaticWarning: optionsFromFile['hasStaticWarning']); | 811 hasStaticWarning: optionsFromFile['hasStaticWarning']); |
787 } | 812 } |
788 } | 813 } |
789 | 814 |
790 static Path _findPubspecYamlFile(Path filePath) { | 815 static Path _findPubspecYamlFile(Path filePath) { |
791 final existsCache = TestUtils.existsCache; | 816 final existsCache = TestUtils.existsCache; |
792 | 817 |
793 Path root = TestUtils.dartDir; | 818 Path root = TestUtils.dartDir; |
794 assert ("$filePath".startsWith("$root")); | 819 assert ("$filePath".startsWith("$root")); |
795 | 820 |
796 // We start with the parent directory of [filePath] and go up until | 821 // We start with the parent directory of [filePath] and go up until |
797 // the root directory (excluding the root). | 822 // the root directory (excluding the root). |
798 List<String> segments = | 823 List<String> segments = |
799 filePath.directoryPath.relativeTo(root).segments(); | 824 filePath.directoryPath.relativeTo(root).segments(); |
800 while (segments.length > 0) { | 825 while (segments.length > 0) { |
801 var pubspecYamlPath = | 826 var pubspecYamlPath = |
802 new Path(segments.join('/')).append('pubspec.yaml'); | 827 new Path(segments.join('/')).append('pubspec.yaml'); |
803 if (existsCache.doesFileExist(pubspecYamlPath.toNativePath())) { | 828 if (existsCache.doesFileExist(pubspecYamlPath.toNativePath())) { |
804 return root.join(pubspecYamlPath); | 829 return root.join(pubspecYamlPath); |
805 } | 830 } |
806 segments.removeLast(); | 831 segments.removeLast(); |
807 } | 832 } |
808 return null; | 833 return null; |
809 } | 834 } |
810 | 835 |
811 void enqueueTestCaseFromTestInformation(TestInformation info) { | 836 void enqueueTestCaseFromTestInformation(TestInformation info) { |
837 String testName = buildTestCaseDisplayName(suiteDir, info.originTestPath, | |
838 multitestName: info.multitestKey); | |
839 Set<Expectation> expectations = testExpectations.expectations(testName); | |
840 if (info is HtmlTestInformation && | |
841 TestUtils.isBrowserRuntime(configuration['runtime'])) { | |
842 enqueueBrowserTest([], null, info, testName, expectations); | |
843 return; | |
844 } | |
812 var filePath = info.filePath; | 845 var filePath = info.filePath; |
813 var optionsFromFile = info.optionsFromFile; | 846 var optionsFromFile = info.optionsFromFile; |
814 | 847 |
815 Map buildSpecialPackageRoot(Path pubspecYamlFile) { | 848 Map buildSpecialPackageRoot(Path pubspecYamlFile) { |
816 var commands = <Command>[]; | 849 var commands = <Command>[]; |
817 var packageDir = pubspecYamlFile.directoryPath; | 850 var packageDir = pubspecYamlFile.directoryPath; |
818 var packageName = packageDir.filename; | 851 var packageName = packageDir.filename; |
819 | 852 |
820 var checkoutDirectory = | 853 var checkoutDirectory = |
821 createPubspecCheckoutDirectory(packageDir); | 854 createPubspecCheckoutDirectory(packageDir); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
869 'package-root' : newPackageRoot, | 902 'package-root' : newPackageRoot, |
870 }; | 903 }; |
871 } | 904 } |
872 | 905 |
873 // If this test is inside a package, we will check if there is a | 906 // If this test is inside a package, we will check if there is a |
874 // pubspec.yaml file and if so, create a custom package root for it. | 907 // pubspec.yaml file and if so, create a custom package root for it. |
875 List<Command> baseCommands = <Command>[]; | 908 List<Command> baseCommands = <Command>[]; |
876 Path packageRoot; | 909 Path packageRoot; |
877 if (configuration['use_repository_packages'] || | 910 if (configuration['use_repository_packages'] || |
878 configuration['use_public_packages']) { | 911 configuration['use_public_packages']) { |
879 Path pubspecYamlFile = _findPubspecYamlFile(filePath); | 912 Path pubspecYamlFile = _findPubspecYamlFile(filePath); |
880 if (pubspecYamlFile != null) { | 913 if (pubspecYamlFile != null) { |
881 var result = buildSpecialPackageRoot(pubspecYamlFile); | 914 var result = buildSpecialPackageRoot(pubspecYamlFile); |
882 baseCommands.addAll(result['commands']); | 915 baseCommands.addAll(result['commands']); |
883 packageRoot = result['package-root']; | 916 packageRoot = result['package-root']; |
884 if (optionsFromFile['packageRoot'] == null || | 917 if (optionsFromFile['packageRoot'] == null || |
885 optionsFromFile['packageRoot'] == "") { | 918 optionsFromFile['packageRoot'] == "") { |
886 optionsFromFile['packageRoot'] = packageRoot.toNativePath(); | 919 optionsFromFile['packageRoot'] = packageRoot.toNativePath(); |
887 } | 920 } |
888 } | 921 } |
889 } | 922 } |
890 if (configuration['package_root'] != null) { | 923 if (configuration['package_root'] != null) { |
891 packageRoot = new Path(configuration['package_root']); | 924 packageRoot = new Path(configuration['package_root']); |
892 optionsFromFile['packageRoot'] = packageRoot.toNativePath(); | 925 optionsFromFile['packageRoot'] = packageRoot.toNativePath(); |
893 } | 926 } |
894 | 927 |
895 String testName = buildTestCaseDisplayName(suiteDir, info.originTestPath, | |
896 multitestName: optionsFromFile['isMultitest'] ? info.multitestKey : ""); | |
897 | |
898 Set<Expectation> expectations = testExpectations.expectations(testName); | |
899 if (new CompilerConfiguration(configuration).hasCompiler && | 928 if (new CompilerConfiguration(configuration).hasCompiler && |
900 expectCompileError(info)) { | 929 expectCompileError(info)) { |
901 // If a compile-time error is expected, and we're testing a | 930 // If a compile-time error is expected, and we're testing a |
902 // compiler, we never need to attempt to run the program (in a | 931 // compiler, we never need to attempt to run the program (in a |
903 // browser or otherwise). | 932 // browser or otherwise). |
904 enqueueStandardTest(baseCommands, info, testName, expectations); | 933 enqueueStandardTest(baseCommands, info, testName, expectations); |
905 } else if (TestUtils.isBrowserRuntime(configuration['runtime'])) { | 934 } else if (TestUtils.isBrowserRuntime(configuration['runtime'])) { |
906 if (info.optionsFromFile['isMultiHtmlTest']) { | 935 if (info.optionsFromFile['isMultiHtmlTest']) { |
907 // A browser multi-test has multiple expectations for one test file. | 936 // A browser multi-test has multiple expectations for one test file. |
908 // Find all the different sub-test expecations for one entire test file. | 937 // Find all the different sub-test expecations for one entire test file. |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1013 runtimeConfiguration.computeRuntimeCommands( | 1042 runtimeConfiguration.computeRuntimeCommands( |
1014 this, | 1043 this, |
1015 CommandBuilder.instance, | 1044 CommandBuilder.instance, |
1016 compilationArtifact, | 1045 compilationArtifact, |
1017 runtimeArguments, | 1046 runtimeArguments, |
1018 environmentOverrides)); | 1047 environmentOverrides)); |
1019 } | 1048 } |
1020 | 1049 |
1021 CreateTest makeTestCaseCreator(Map optionsFromFile) { | 1050 CreateTest makeTestCaseCreator(Map optionsFromFile) { |
1022 return (Path filePath, | 1051 return (Path filePath, |
1052 Path originTestPath, | |
1023 bool hasCompileError, | 1053 bool hasCompileError, |
1024 bool hasRuntimeError, | 1054 bool hasRuntimeError, |
1025 {bool isNegativeIfChecked: false, | 1055 {bool isNegativeIfChecked: false, |
1026 bool hasCompileErrorIfChecked: false, | 1056 bool hasCompileErrorIfChecked: false, |
1027 bool hasStaticWarning: false, | 1057 bool hasStaticWarning: false, |
1028 String multitestKey, | 1058 String multitestKey}) { |
1029 Path originTestPath}) { | |
1030 // Cache the test information for each test case. | 1059 // Cache the test information for each test case. |
1031 var info = new TestInformation(filePath, | 1060 var info = new TestInformation(filePath, |
1061 originTestPath, | |
1032 optionsFromFile, | 1062 optionsFromFile, |
1033 hasCompileError, | 1063 hasCompileError, |
1034 hasRuntimeError, | 1064 hasRuntimeError, |
1035 isNegativeIfChecked, | 1065 isNegativeIfChecked, |
1036 hasCompileErrorIfChecked, | 1066 hasCompileErrorIfChecked, |
1037 hasStaticWarning, | 1067 hasStaticWarning, |
1038 multitestKey: multitestKey, | 1068 multitestKey: multitestKey); |
1039 originTestPath: originTestPath); | |
1040 cachedTests.add(info); | 1069 cachedTests.add(info); |
1041 enqueueTestCaseFromTestInformation(info); | 1070 enqueueTestCaseFromTestInformation(info); |
1042 }; | 1071 }; |
1043 } | 1072 } |
1044 | 1073 |
1045 /** | 1074 /** |
1046 * _createUrlPathFromFile takes a [file], which is either located in the dart | 1075 * _createUrlPathFromFile takes a [file], which is either located in the dart |
1047 * or in the build directory, and will return a String representing | 1076 * or in the build directory, and will return a String representing |
1048 * the relative path to either the dart or the build directory. | 1077 * the relative path to either the dart or the build directory. |
1049 * Thus, the returned [String] will be the path component of the URL | 1078 * Thus, the returned [String] will be the path component of the URL |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1127 // on to the browser (it may be test specific). | 1156 // on to the browser (it may be test specific). |
1128 | 1157 |
1129 // TODO(kustermann/ricow): This method should be refactored. | 1158 // TODO(kustermann/ricow): This method should be refactored. |
1130 Map optionsFromFile = info.optionsFromFile; | 1159 Map optionsFromFile = info.optionsFromFile; |
1131 Path filePath = info.filePath; | 1160 Path filePath = info.filePath; |
1132 String filename = filePath.toString(); | 1161 String filename = filePath.toString(); |
1133 | 1162 |
1134 final String compiler = configuration['compiler']; | 1163 final String compiler = configuration['compiler']; |
1135 final String runtime = configuration['runtime']; | 1164 final String runtime = configuration['runtime']; |
1136 | 1165 |
1166 if (info is HtmlTestInformation) { | |
1167 if (compiler != 'none' || runtime != 'dartium') { | |
1168 // TODO(whesse): Enable compilation of scripts to dart2js, and | |
1169 // rewriting of script links in html file. Currently unimplemented. | |
1170 return; | |
1171 } | |
1172 if (info.scripts.length > 0) { | |
1173 // TODO(whesse): Copy scripts into output directory. | |
1174 return; | |
1175 } | |
1176 final String tempDir = createOutputDirectory(info.filePath, ''); | |
1177 final String htmlFile = '$tempDir/${filePath.filename}'; | |
1178 new File(htmlFile).writeAsStringSync(htmlTest.getContents(info)); | |
1179 | |
1180 String testDisplayName = '$suiteName/$testName'; | |
1181 var htmlPath = _createUrlPathFromFile(new Path(htmlFile)); | |
1182 var fullHtmlPath = _getUriForBrowserTest(info, htmlPath, | |
1183 null, null); | |
1184 var commands = [CommandBuilder.instance.getBrowserHtmlTestCommand( | |
1185 runtime, fullHtmlPath, configuration, info.expectedMessages)]; | |
1186 var testCase = new BrowserTestCase(testDisplayName, | |
1187 commands, configuration, expectations, | |
1188 info, isNegative(info), fullHtmlPath); | |
1189 enqueueNewTestCase(testCase); | |
1190 return; | |
1191 } | |
1192 | |
1137 for (var vmOptions in getVmOptions(optionsFromFile)) { | 1193 for (var vmOptions in getVmOptions(optionsFromFile)) { |
1138 // Create a unique temporary directory for each set of vmOptions. | 1194 // Create a unique temporary directory for each set of vmOptions. |
1139 // TODO(dart:429): Replace separate replaceAlls with a RegExp when | 1195 // TODO(dart:429): Replace separate replaceAlls with a RegExp when |
1140 // replaceAll(RegExp, String) is implemented. | 1196 // replaceAll(RegExp, String) is implemented. |
1141 String optionsName = ''; | 1197 String optionsName = ''; |
1142 if (getVmOptions(optionsFromFile).length > 1) { | 1198 if (getVmOptions(optionsFromFile).length > 1) { |
1143 optionsName = vmOptions.join('-').replaceAll('-','') | 1199 optionsName = vmOptions.join('-').replaceAll('-','') |
1144 .replaceAll('=','') | 1200 .replaceAll('=','') |
1145 .replaceAll('/',''); | 1201 .replaceAll('/',''); |
1146 } | 1202 } |
(...skipping 1190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2337 * $pass tests are expected to pass | 2393 * $pass tests are expected to pass |
2338 * $failOk tests are expected to fail that we won't fix | 2394 * $failOk tests are expected to fail that we won't fix |
2339 * $fail tests are expected to fail that we should fix | 2395 * $fail tests are expected to fail that we should fix |
2340 * $crash tests are expected to crash that we should fix | 2396 * $crash tests are expected to crash that we should fix |
2341 * $timeout tests are allowed to timeout | 2397 * $timeout tests are allowed to timeout |
2342 * $compileErrorSkip tests are skipped on browsers due to compile-time error | 2398 * $compileErrorSkip tests are skipped on browsers due to compile-time error |
2343 """; | 2399 """; |
2344 print(report); | 2400 print(report); |
2345 } | 2401 } |
2346 } | 2402 } |
OLD | NEW |