blob: 98faa8201a7a5910ce673b43fb39cd757da756d2 [file] [log] [blame]
// Copyright (c) 2019, 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 file.
import 'dart:async' show Future;
import 'dart:io' show Directory, File, FileSystemEntity;
import 'package:testing/testing.dart'
show Chain, FileBasedTestDescription, TestDescription, runMe;
import 'spelling_test_base.dart' show SpellContext;
import 'spell_checking_utils.dart' as spell;
main([List<String> arguments = const []]) =>
runMe(arguments, createContext, configurationPath: "../testing.json");
Future<SpellContext> createContext(
Chain suite, Map<String, String> environment) async {
bool interactive = environment["interactive"] == "true";
return new SpellContextExternal(interactive: interactive);
}
class SpellContextExternal extends SpellContext {
SpellContextExternal({bool interactive}) : super(interactive: interactive);
@override
List<spell.Dictionaries> get dictionaries => const <spell.Dictionaries>[];
@override
bool get onlyDenylisted => true;
Stream<TestDescription> list(Chain suite) async* {
for (String subdir in const ["pkg/", "sdk/"]) {
Directory testRoot = new Directory.fromUri(suite.uri.resolve(subdir));
if (await testRoot.exists()) {
Stream<FileSystemEntity> files =
testRoot.list(recursive: true, followLinks: false);
await for (FileSystemEntity entity in files) {
if (entity is! File) continue;
String path = entity.uri.path;
if (suite.exclude.any((RegExp r) => path.contains(r))) continue;
if (suite.pattern.any((RegExp r) => path.contains(r))) {
yield new FileBasedTestDescription(suite.uri, entity);
}
}
} else {
throw "${suite.uri} isn't a directory";
}
}
}
}