blob: 68b0fad938def2c960fc28baf921ad19e189a295 [file] [log] [blame]
// Copyright (c) 2017, 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:io';
import 'package:path/path.dart' as p;
/// True if the file system should be left untouched.
bool dryRun = false;
final String sdkRoot =
p.normalize(p.join(p.dirname(p.fromUri(Platform.script)), '../../../'));
final String testRoot = p.join(sdkRoot, "tests");
/// Copies the file from [from] to [to], which are both assumed to be relative
/// paths inside "tests".
void copyFile(String from, String to) {
if (dryRun) {
print(" Dry run: move $from to $to");
return;
}
// Create the directory if needed.
new Directory(p.dirname(p.join(testRoot, to))).createSync(recursive: true);
new File(p.join(testRoot, from)).copySync(p.join(testRoot, to));
}
/// Moves the file from [from] to [to], which are both assumed to be relative
/// paths inside "tests".
void moveFile(String from, String to) {
if (dryRun) {
print(" Dry run: move $from to $to");
return;
}
// Create the directory if needed.
new Directory(p.dirname(p.join(testRoot, to))).createSync(recursive: true);
new File(p.join(testRoot, from)).renameSync(p.join(testRoot, to));
}
/// Reads the contents of the file at [path], which is assumed to be relative
/// within "tests".
String readFile(String path) {
return new File(p.join(testRoot, path)).readAsStringSync();
}
/// Deletes the file at [path], which is assumed to be relative within "tests".
void deleteFile(String path) {
if (dryRun) {
print(" Dry run: delete $path");
return;
}
new File(p.join(testRoot, path)).deleteSync();
}
/// Returns a list of the paths to all files within [dir], which is
/// assumed to be relative to the SDK's "tests" directory and having file with
/// an extension in [extensions].
Iterable<String> listFiles(String dir,
{List<String> extensions = const [".dart", ".html"]}) {
try {
return new Directory(p.join(testRoot, dir))
.listSync(recursive: true)
.map((entry) {
var matches = extensions.map((extension) {
return entry.path.endsWith(extension);
}).where((match) => match);
return matches.isEmpty ? null : entry.path;
}).where((path) => path != null);
} catch (FileSystemException) {
return [];
}
}