Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Unified Diff: sdk/lib/_internal/pub/test/io_test.dart

Issue 15047005: Fix canonicalize(). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/pub/test/io_test.dart
diff --git a/sdk/lib/_internal/pub/test/io_test.dart b/sdk/lib/_internal/pub/test/io_test.dart
index e735f290ae799b3342b47ce9eb21e2d3db1f3246..6aa82bc8058c8beaced0a5f66e83a86a89b77074 100644
--- a/sdk/lib/_internal/pub/test/io_test.dart
+++ b/sdk/lib/_internal/pub/test/io_test.dart
@@ -4,6 +4,7 @@
library io_test;
+import 'dart:async';
import 'dart:io';
import 'package:pathos/path.dart' as path;
@@ -137,7 +138,7 @@ main() {
group('canonicalize', () {
test('resolves a non-link', () {
- expect(withTempDir((temp) {
+ expect(withCanonicalTempDir((temp) {
var filePath = path.join(temp, 'file');
writeTextFile(filePath, '');
expect(canonicalize(filePath), equals(filePath));
@@ -145,14 +146,14 @@ main() {
});
test('resolves a non-existent file', () {
- expect(withTempDir((temp) {
+ expect(withCanonicalTempDir((temp) {
expect(canonicalize(path.join(temp, 'nothing')),
equals(path.join(temp, 'nothing')));
}), completes);
});
test('resolves a symlink', () {
- expect(withTempDir((temp) {
+ expect(withCanonicalTempDir((temp) {
createDir(path.join(temp, 'linked-dir'));
createSymlink(
path.join(temp, 'linked-dir'),
@@ -164,7 +165,7 @@ main() {
});
test('resolves a relative symlink', () {
- expect(withTempDir((temp) {
+ expect(withCanonicalTempDir((temp) {
createDir(path.join(temp, 'linked-dir'));
createSymlink(
path.join(temp, 'linked-dir'),
@@ -177,7 +178,7 @@ main() {
});
test('resolves a single-level horizontally recursive symlink', () {
- expect(withTempDir((temp) {
+ expect(withCanonicalTempDir((temp) {
var linkPath = path.join(temp, 'foo');
createSymlink(linkPath, linkPath);
expect(canonicalize(linkPath), equals(linkPath));
@@ -185,7 +186,7 @@ main() {
});
test('resolves a multi-level horizontally recursive symlink', () {
- expect(withTempDir((temp) {
+ expect(withCanonicalTempDir((temp) {
var fooPath = path.join(temp, 'foo');
var barPath = path.join(temp, 'bar');
var bazPath = path.join(temp, 'baz');
@@ -202,7 +203,7 @@ main() {
});
test('resolves a broken symlink', () {
- expect(withTempDir((temp) {
+ expect(withCanonicalTempDir((temp) {
createSymlink(path.join(temp, 'nonexistent'), path.join(temp, 'foo'));
expect(
canonicalize(path.join(temp, 'foo')),
@@ -211,7 +212,7 @@ main() {
});
test('resolves multiple nested symlinks', () {
- expect(withTempDir((temp) {
+ expect(withCanonicalTempDir((temp) {
var dir1 = path.join(temp, 'dir1');
var dir2 = path.join(temp, 'dir2');
var subdir1 = path.join(dir1, 'subdir1');
@@ -227,7 +228,7 @@ main() {
});
test('resolves a nested vertical symlink', () {
- expect(withTempDir((temp) {
+ expect(withCanonicalTempDir((temp) {
var dir1 = path.join(temp, 'dir1');
var dir2 = path.join(temp, 'dir2');
var subdir = path.join(dir1, 'subdir');
@@ -241,7 +242,7 @@ main() {
});
test('resolves a vertically recursive symlink', () {
- expect(withTempDir((temp) {
+ expect(withCanonicalTempDir((temp) {
var dir = path.join(temp, 'dir');
var subdir = path.join(dir, 'subdir');
createDir(dir);
@@ -252,6 +253,35 @@ main() {
equals(path.join(dir, 'file')));
}), completes);
});
+
+ test('resolves a symlink that links to a path that needs more resolving',
+ () {
+ expect(withCanonicalTempDir((temp) {
+ var dir = path.join(temp, 'dir');
+ var linkdir = path.join(temp, 'linkdir');
+ var linkfile = path.join(dir, 'link');
+ createDir(dir);
+ createSymlink(dir, linkdir);
+ createSymlink(path.join(linkdir, 'file'), linkfile);
+ expect(
+ canonicalize(linkfile),
+ equals(path.join(dir, 'file')));
+ }), completes);
+ });
+
+ test('resolves a pair of pathologically-recursive symlinks', () {
+ expect(withCanonicalTempDir((temp) {
+ var foo = path.join(temp, 'foo');
+ var subfoo = path.join(foo, 'subfoo');
+ var bar = path.join(temp, 'bar');
+ var subbar = path.join(bar, 'subbar');
+ createSymlink(subbar, foo);
+ createSymlink(subfoo, bar);
+ expect(
+ canonicalize(subfoo),
+ equals(path.join(subfoo, 'subbar', 'subfoo')));
+ }), completes);
+ });
});
testExistencePredicate("entryExists", entryExists,
@@ -397,3 +427,7 @@ void testExistencePredicate(String name, bool predicate(String path),
}
});
}
+
+/// Like [withTempDir], but canonicalizes the path before passing it to [fn].
+Future withCanonicalTempDir(Future fn(String path)) =>
+ withTempDir((temp) => fn(canonicalize(temp)));
« sdk/lib/_internal/pub/lib/src/io.dart ('K') | « sdk/lib/_internal/pub/lib/src/path_source.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698