de54e18369
BUG= R=efortuna@google.com Review-Url: https://codereview.chromium.org/2743423009 .
70 lines
1.9 KiB
Dart
70 lines
1.9 KiB
Dart
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE.md file.
|
|
|
|
library testing.test_description;
|
|
|
|
import 'dart:io' show File, FileSystemEntity;
|
|
|
|
class TestDescription implements Comparable<TestDescription> {
|
|
final Uri root;
|
|
final File file;
|
|
final Uri output;
|
|
|
|
/// If non-null, this is a generated multitest, and the set contains the
|
|
/// expected outcomes.
|
|
Set<String> multitestExpectations;
|
|
|
|
TestDescription(this.root, this.file, {this.output});
|
|
|
|
Uri get uri => file.uri;
|
|
|
|
String get shortName {
|
|
String baseName = "$uri".substring("$root".length);
|
|
return baseName.substring(0, baseName.length - ".dart".length);
|
|
}
|
|
|
|
String get escapedName => shortName.replaceAll("/", "__");
|
|
|
|
void writeImportOn(StringSink sink) {
|
|
sink.write("import '");
|
|
sink.write(uri);
|
|
sink.write("' as ");
|
|
sink.write(escapedName);
|
|
sink.writeln(" show main;");
|
|
}
|
|
|
|
void writeClosureOn(StringSink sink) {
|
|
sink.write(' "');
|
|
sink.write(shortName);
|
|
sink.write('": ');
|
|
sink.write(escapedName);
|
|
sink.writeln('.main,');
|
|
}
|
|
|
|
static TestDescription from(Uri root, FileSystemEntity entity,
|
|
{Pattern pattern}) {
|
|
if (entity is! File) return null;
|
|
pattern ??= "_test.dart";
|
|
String path = entity.uri.path;
|
|
bool hasMatch = false;
|
|
if (pattern is String) {
|
|
if (path.endsWith(pattern)) hasMatch = true;
|
|
} else if (path.contains(pattern)) {
|
|
hasMatch = true;
|
|
}
|
|
return hasMatch ? new TestDescription(root, entity) : null;
|
|
}
|
|
|
|
int compareTo(TestDescription other) => "$uri".compareTo("${other.uri}");
|
|
|
|
String formatError(String message) {
|
|
String base = Uri.base.toFilePath();
|
|
String path = uri.toFilePath();
|
|
if (path.startsWith(base)) {
|
|
path = path.substring(base.length);
|
|
}
|
|
return "$path:$message";
|
|
}
|
|
}
|