blob: 7480ee0118e109027b620dc925ed1f0f308f5b62 [file] [log] [blame]
// 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;
abstract class TestDescription implements Comparable<TestDescription> {
Uri get uri;
String get shortName;
int compareTo(TestDescription other) => "$uri".compareTo("${other.uri}");
}
class FileBasedTestDescription extends 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;
FileBasedTestDescription(this.root, this.file, {this.output});
@override
Uri get uri => file.uri;
@override
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 FileBasedTestDescription 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 FileBasedTestDescription(root, entity) : null;
}
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";
}
}