| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #library("multitest"); | 5 #library("multitest"); |
| 6 | 6 |
| 7 #import("dart:io"); | 7 #import("dart:io"); |
| 8 | 8 |
| 9 // Multitests are Dart test scripts containing lines of the form | 9 // Multitests are Dart test scripts containing lines of the form |
| 10 // " [some dart code] /// [key]: [error type]" | 10 // " [some dart code] /// [key]: [error type]" |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 List<String> testTemplate = new List<String>(); | 74 List<String> testTemplate = new List<String>(); |
| 75 testTemplate.add('// Test created from multitest named $filename.'); | 75 testTemplate.add('// Test created from multitest named $filename.'); |
| 76 // Create the set of multitests, which will have a new test added each | 76 // Create the set of multitests, which will have a new test added each |
| 77 // time we see a multitest line with a new key. | 77 // time we see a multitest line with a new key. |
| 78 Map<String, List<String>> testsAsLines = new Map<String, List<String>>(); | 78 Map<String, List<String>> testsAsLines = new Map<String, List<String>>(); |
| 79 | 79 |
| 80 // Matches #import( or #source( followed by " or ' followed by anything | 80 // Matches #import( or #source( followed by " or ' followed by anything |
| 81 // except dart: or /, at the beginning of a line. | 81 // except dart: or /, at the beginning of a line. |
| 82 RegExp relativeImportRegExp = | 82 RegExp relativeImportRegExp = |
| 83 const RegExp('^#(import|source)[(]["\'](?!(dart:|/))'); | 83 const RegExp('^#(import|source)[(]["\'](?!(dart:|/))'); |
| 84 int lineCount = 0; |
| 84 for (String line in lines) { | 85 for (String line in lines) { |
| 86 lineCount++; |
| 85 if (line.contains('///')) { | 87 if (line.contains('///')) { |
| 86 var parts = line.split('///')[1].split(':'); | 88 var parts = line.split('///')[1].split(':'); |
| 87 var key = parts[0].trim(); | 89 var key = parts[0].trim(); |
| 88 var rest = parts[1].trim(); | 90 var rest = parts[1].trim(); |
| 89 if (testsAsLines.containsKey(key)) { | 91 if (testsAsLines.containsKey(key)) { |
| 90 Expect.equals('continued', rest); | 92 Expect.equals('continued', rest); |
| 91 testsAsLines[key].add(line); | 93 testsAsLines[key].add(line); |
| 92 } else { | 94 } else { |
| 93 (testsAsLines[key] = new List<String>.from(testTemplate)).add(line); | 95 (testsAsLines[key] = new List<String>.from(testTemplate)).add(line); |
| 94 outcomes[key] = rest; | 96 outcomes[key] = rest; |
| 95 Expect.isTrue(validMultitestOutcomes.contains(rest)); | 97 if (!validMultitestOutcomes.contains(rest)) { |
| 98 Expect.fail("Invalid test directive on line ${lineCount}: $rest "); |
| 99 } |
| 96 } | 100 } |
| 97 } else { | 101 } else { |
| 98 testTemplate.add(line); | 102 testTemplate.add(line); |
| 99 for (var test in testsAsLines.getValues()) test.add(line); | 103 for (var test in testsAsLines.getValues()) test.add(line); |
| 100 } | 104 } |
| 101 // Warn if any import or source tags have relative paths. | 105 // Warn if any import or source tags have relative paths. |
| 102 if (relativeImportRegExp.hasMatch(line)) { | 106 if (relativeImportRegExp.hasMatch(line)) { |
| 103 print('Warning: Multitest cannot contain relative imports:'); | 107 print('Warning: Multitest cannot contain relative imports:'); |
| 104 print(' $filename: $line'); | 108 print(' $filename: $line'); |
| 105 } | 109 } |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 var split = testDir.split('/'); | 176 var split = testDir.split('/'); |
| 173 var lastComponent = split.removeLast(); | 177 var lastComponent = split.removeLast(); |
| 174 Expect.isTrue(lastComponent == 'src'); | 178 Expect.isTrue(lastComponent == 'src'); |
| 175 String path = '${generatedTestDir.path}/${split.last()}'; | 179 String path = '${generatedTestDir.path}/${split.last()}'; |
| 176 Directory dir = new Directory(path); | 180 Directory dir = new Directory(path); |
| 177 if (!dir.existsSync()) { | 181 if (!dir.existsSync()) { |
| 178 dir.createSync(); | 182 dir.createSync(); |
| 179 } | 183 } |
| 180 return path; | 184 return path; |
| 181 } | 185 } |
| OLD | NEW |