blob: 32ddbedd13a31f1fff9319fc63e73ba04e3762aa [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
/// [extension].
Iterable<String> listFiles(String dir, {String extension = ".dart"}) {
try {
return new Directory(p.join(testRoot, dir))
.listSync(recursive: true)
.map((entry) {
if (!entry.path.endsWith(extension)) return null;
return entry.path;
}).where((path) => path != null);
} catch (FileSystemException) {
return [];
}
}