// 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 { 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 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"; } }