Index: tools/testing/dart/status_file.dart |
diff --git a/tools/testing/dart/status_file.dart b/tools/testing/dart/status_file.dart |
index 8df6a70c575083fd4b7c175a49120f63af57cbfc..cd2d65f2f9511fadf5a356abb930d42fae257000 100644 |
--- a/tools/testing/dart/status_file.dart |
+++ b/tools/testing/dart/status_file.dart |
@@ -4,9 +4,7 @@ |
import 'dart:io'; |
-import 'environment.dart'; |
import 'expectation.dart'; |
-import 'path.dart'; |
import 'status_expression.dart'; |
/// Splits out a trailing line comment |
@@ -45,32 +43,19 @@ final _issuePattern = new RegExp("[Ii]ssue ([0-9]+)"); |
/// Entries may also appear before any section header, in which case they |
/// always apply. |
class StatusFile { |
- final String _path; |
final List<StatusSection> sections = []; |
- /// Parses the status file at [_path]. |
- StatusFile.read(this._path) { |
- var lines = new File(_path).readAsLinesSync(); |
+ /// Parses the status file at [path]. |
+ StatusFile.read(String path) { |
+ var lines = new File(path).readAsLinesSync(); |
// The current section whose rules are being parsed. |
StatusSection section; |
var lineNumber = 0; |
- |
for (var line in lines) { |
lineNumber++; |
- fail(String message, [List<String> errors]) { |
- print('$message in "$_shortPath" line $lineNumber:\n$line'); |
- |
- if (errors != null) { |
- for (var error in errors) { |
- print("- ${error.replaceAll('\n', '\n ')}"); |
- } |
- } |
- exit(1); |
- } |
- |
// Strip off the comment and whitespace. |
var match = _commentPattern.firstMatch(line); |
var source = ""; |
@@ -86,22 +71,9 @@ class StatusFile { |
// See if we are starting a new section. |
match = _sectionPattern.firstMatch(source); |
if (match != null) { |
- try { |
- var condition = Expression.parse(match[1].trim()); |
- |
- var errors = <String>[]; |
- condition.validate(errors); |
- |
- if (errors.isNotEmpty) { |
- var s = errors.length > 1 ? "s" : ""; |
- fail('Validation error$s', errors); |
- } |
- |
- section = new StatusSection(condition); |
- sections.add(section); |
- } on FormatException { |
- fail("Status expression syntax error"); |
- } |
+ var condition = Expression.parse(match[1].trim()); |
+ section = new StatusSection(condition); |
+ sections.add(section); |
continue; |
} |
@@ -110,16 +82,7 @@ class StatusFile { |
if (match != null) { |
var path = match[1].trim(); |
// TODO(whesse): Handle test names ending in a wildcard (*). |
- var expectations = <Expectation>[]; |
- for (var name in match[2].split(",")) { |
- name = name.trim(); |
- try { |
- expectations.add(Expectation.find(name)); |
- } on ArgumentError { |
- fail('Unrecognized test expectation "$name"'); |
- } |
- } |
- |
+ var expectations = _parseExpectations(match[2]); |
var issue = _issueNumber(comment); |
// If we haven't found a section header yet, create an implicit section |
@@ -133,16 +96,17 @@ class StatusFile { |
continue; |
} |
- fail("Unrecognized input"); |
+ throw new FormatException( |
+ "Could not parse line $lineNumber of status file '$path':\n$line"); |
} |
} |
- /// Gets the path to this status file relative to the Dart repo root. |
- String get _shortPath { |
- var repoRoot = new Path(Platform.script |
- .toFilePath(windows: Platform.operatingSystem == "windows")) |
- .join(new Path("../../../../")); |
- return new Path(_path).relativeTo(repoRoot).toString(); |
+ /// Parses a comma-separated list of expectation names from [text]. |
+ List<Expectation> _parseExpectations(String text) { |
+ return text |
+ .split(",") |
+ .map((name) => Expectation.find(name.trim())) |
+ .toList(); |
} |
/// Returns the issue number embedded in [comment] or `null` if there is none. |
@@ -184,7 +148,7 @@ class StatusSection { |
final List<StatusEntry> entries = []; |
/// Returns true if this section should apply in the given [environment]. |
- bool isEnabled(Environment environment) => |
+ bool isEnabled(Map<String, dynamic> environment) => |
_condition == null || _condition.evaluate(environment); |
StatusSection(this._condition); |