| Index: utils/testrunner/utils.dart
|
| ===================================================================
|
| --- utils/testrunner/utils.dart (revision 0)
|
| +++ utils/testrunner/utils.dart (revision 0)
|
| @@ -0,0 +1,102 @@
|
| +// Copyright (c) 2012, 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.
|
| +
|
| +/**
|
| + * Read the contents of a file [fileName] into a [List] of [String]s.
|
| + * If the file does not exist and [errorIfNoFile] is true, throw an
|
| + * exception, else return an empty list.
|
| + */
|
| +List<String> getFileContents(String filename, bool errorIfNoFile) {
|
| + File f = new File(filename);
|
| + if (!f.existsSync()) {
|
| + if (errorIfNoFile) {
|
| + throw new Exception('Config file $filename not found.');
|
| + } else {
|
| + return new List();
|
| + }
|
| + }
|
| + return f.readAsLinesSync();
|
| +}
|
| +
|
| +/** Copy a file with path [sourceName] to destination [destName]. */
|
| +void copyFile(String sourceName, String destName) {
|
| + var sourceFile = new File(sourceName);
|
| + var destFile = new File(destName);
|
| + var istream = sourceFile.openInputStream();
|
| + var ostream = destFile.openOutputStream(FileMode.WRITE);
|
| + istream.pipe(ostream);
|
| + // TODO(gram) - make sure both streams are closed.
|
| + // I think they are but the docs are not clear on this point.
|
| +}
|
| +
|
| +/** Create a file [fileName] and populate it with [contents]. */
|
| +void createFile(String fileName, String contents) {
|
| + var file = new File(fileName);
|
| + var ostream = file.openOutputStream(FileMode.WRITE);
|
| + ostream.writeString(contents);
|
| + ostream.close();
|
| +}
|
| +
|
| +/**
|
| + * Given a file path [path], make it absolute if it is relative,
|
| + * and return the result.
|
| + */
|
| +String makePathAbsolute(String path) {
|
| + var p = new Path(path).canonicalize();
|
| + if (p.isAbsolute) {
|
| + return p.toString();
|
| + } else {
|
| + var cwd = new Path((new Directory.current()).path);
|
| + return cwd.join(p).toString();
|
| + }
|
| +}
|
| +
|
| +/**
|
| + * Create the list of all the files in a set of directories
|
| + * ([dirs]) whose names match [filePat]. If [recurse] is true
|
| + * look at subdirectories too. Once they have all been enumerated,
|
| + * call [onComplete].
|
| + */
|
| +void buildFileList(List dirs, RegExp filePat, bool recurse,
|
| + Function onComplete) {
|
| + var files = new List();
|
| + var dirCount = 1;
|
| + for (var i = 0; i < dirs.length; i++) {
|
| + var path = dirs[i];
|
| + // Is this a regular file?
|
| + File f = new File(path);
|
| + if (f.existsSync()) {
|
| + if (filePat.hasMatch(path)) {
|
| + files.add(path);
|
| + }
|
| + } else { // Try treat it as a directory.
|
| + Directory d = new Directory(path);
|
| + if (d.existsSync()) {
|
| + ++dirCount;
|
| + var lister = d.list(recursive: recurse);
|
| + lister.onFile = (file) {
|
| + if (filePat.hasMatch(file)) {
|
| + files.add(file);
|
| + }
|
| + };
|
| + lister.onDone = (complete) {
|
| + if (complete && --dirCount == 0) {
|
| + onComplete(files);
|
| + }
|
| + };
|
| + } else { // Does not exist.
|
| + print('$path does not exist.');
|
| + }
|
| + }
|
| + }
|
| + if (--dirCount == 0) {
|
| + onComplete(files);
|
| + }
|
| +}
|
| +
|
| +/** Delete a file. */
|
| +void deleteFile(String fname) {
|
| + var f = new File(fname);
|
| + f.deleteSync();
|
| +}
|
|
|