blob: 990dd6cf774692607ebd1f79553f59fa207b9df9 [file] [log] [blame]
// 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.
library io_test;
import '../../../pkg/path/lib/path.dart' as path;
import '../../../pkg/unittest/lib/unittest.dart';
import '../../pub/io.dart';
import '../../pub/utils.dart';
import 'test_pub.dart';
main() {
initConfig();
group('listDir', () {
test('lists a simple directory non-recursively', () {
expect(withTempDir((temp) {
var future = defer(() {
writeTextFile(path.join(temp, 'file1.txt'), '');
writeTextFile(path.join(temp, 'file2.txt'), '');
createDir(path.join(temp, 'subdir'));
writeTextFile(path.join(temp, 'subdir', 'file3.txt'), '');
return listDir(temp);
});
expect(future, completion(unorderedEquals([
path.join(temp, 'file1.txt'),
path.join(temp, 'file2.txt'),
path.join(temp, 'subdir')
])));
return future;
}), completes);
});
test('lists a simple directory recursively', () {
expect(withTempDir((temp) {
var future = defer(() {
writeTextFile(path.join(temp, 'file1.txt'), '');
writeTextFile(path.join(temp, 'file2.txt'), '');
createDir(path.join(temp, 'subdir'));
writeTextFile(path.join(temp, 'subdir', 'file3.txt'), '');
return listDir(temp, recursive: true);
});
expect(future, completion(unorderedEquals([
path.join(temp, 'file1.txt'),
path.join(temp, 'file2.txt'),
path.join(temp, 'subdir'),
path.join(temp, 'subdir', 'file3.txt'),
])));
return future;
}), completes);
});
test('ignores hidden files by default', () {
expect(withTempDir((temp) {
var future = defer(() {
writeTextFile(path.join(temp, 'file1.txt'), '');
writeTextFile(path.join(temp, 'file2.txt'), '');
writeTextFile(path.join(temp, '.file3.txt'), '');
createDir(path.join(temp, '.subdir'));
writeTextFile(path.join(temp, '.subdir', 'file3.txt'), '');
return listDir(temp, recursive: true);
});
expect(future, completion(unorderedEquals([
path.join(temp, 'file1.txt'),
path.join(temp, 'file2.txt')
])));
return future;
}), completes);
});
test('includes hidden files when told to', () {
expect(withTempDir((temp) {
var future = defer(() {
writeTextFile(path.join(temp, 'file1.txt'), '');
writeTextFile(path.join(temp, 'file2.txt'), '');
writeTextFile(path.join(temp, '.file3.txt'), '');
createDir(path.join(temp, '.subdir'));
writeTextFile(path.join(temp, '.subdir', 'file3.txt'), '');
return listDir(temp, recursive: true, includeHiddenFiles: true);
});
expect(future, completion(unorderedEquals([
path.join(temp, 'file1.txt'),
path.join(temp, 'file2.txt'),
path.join(temp, '.file3.txt'),
path.join(temp, '.subdir'),
path.join(temp, '.subdir', 'file3.txt')
])));
return future;
}), completes);
});
test('returns the unresolved paths for symlinks', () {
expect(withTempDir((temp) {
var dirToList = path.join(temp, 'dir-to-list');
var future = defer(() {
createDir(path.join(temp, 'dir1'));
writeTextFile(path.join(temp, 'dir1', 'file1.txt'), '');
createDir(path.join(temp, 'dir2'));
writeTextFile(path.join(temp, 'dir2', 'file2.txt'), '');
createDir(dirToList);
return createSymlink(path.join(temp, 'dir1'),
path.join(dirToList, 'linked-dir1'));
}).then((_) {
createDir(path.join(dirToList, 'subdir'));
return createSymlink(
path.join(temp, 'dir2'),
path.join(dirToList, 'subdir', 'linked-dir2'));
}).then((_) => listDir(dirToList, recursive: true));
expect(future, completion(unorderedEquals([
path.join(dirToList, 'linked-dir1'),
path.join(dirToList, 'linked-dir1', 'file1.txt'),
path.join(dirToList, 'subdir'),
path.join(dirToList, 'subdir', 'linked-dir2'),
path.join(dirToList, 'subdir', 'linked-dir2', 'file2.txt'),
])));
return future;
}), completes);
});
test('works with recursive symlinks', () {
expect(withTempDir((temp) {
var future = defer(() {
writeTextFile(path.join(temp, 'file1.txt'), '');
return createSymlink(temp, path.join(temp, 'linkdir'));
}).then((_) => listDir(temp, recursive: true));
expect(future, completion(unorderedEquals([
path.join(temp, 'file1.txt'),
path.join(temp, 'linkdir')
])));
return future;
}), completes);
});
});
}