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

Side by Side Diff: tests/standalone/io/resolve_symbolic_links_test.dart

Issue 23480093: Recommit add FileSystemEntity.resolveSymbolicLinks (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix assertion failure on Windows Created 7 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/standalone/io/file_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4 //
5 // Dart test program for testing FileSystemEntity.resolveSymbolicLinks
6
7 import "package:expect/expect.dart";
8 import "package:path/path.dart";
9 import "package:async_helper/async_helper.dart";
10 import 'dart:async';
11 import 'dart:io';
12
13 main() {
14 String testsDir = dirname(dirname(dirname(Platform.script)));
15 // All of these tests test that resolveSymbolicLinks gives a path
16 // that points to the same place as the original, and that it removes
17 // all links, .., and . segments, and that it produces an absolute path.
18 asyncTest(() => testFile(join(
19 testsDir, 'standalone', 'io', 'resolve_symbolic_links_test.dart')));
20 asyncTest(() => testFile(join(testsDir, 'standalone', 'io', '..', 'io',
21 'resolve_symbolic_links_test.dart')));
22
23 asyncTest(() => testDir(join(testsDir, 'standalone', 'io')));
24 asyncTest(() => testDir(join(testsDir, 'lib', '..', 'standalone', 'io')));
25 // Test a relative path.
26 asyncTest(() => testDir('.'));
27 if (Platform.isWindows) {
28 asyncTest(() =>testFile(join('\\\\?\\$testsDir', 'standalone', 'io',
29 'resolve_symbolic_links_test.dart')));
30 asyncTest(() => testDir('\\\\?\\$testsDir'));
31 }
32 asyncTest(() => new Directory('').createTemp().then((tempDir) {
33 String temp = tempDir.path;
34 return makeEntities(temp).then((_) => Future.wait(
35 [testFile(join(temp, 'dir1', 'file1')),
36 testFile(join(temp, 'link1', 'file2')),
37 testDir(join(temp, 'dir1', 'dir2', '..', '.', '..', 'dir1')),
38 testDir(join(temp, 'dir1', 'dir2', '..', '.', '..', 'dir1')),
39 testLink(join(temp, 'link1'))]))
40 .then((_) {
41 if (Platform.isWindows) {
42 // Windows applies '..' to a link without resolving the link first.
43 return Future.wait([
44 testFile(join(
45 temp, 'dir1', '..', 'link1', '..', 'dir1', 'dir2', 'file2')),
46 testDir(join(temp, 'dir1', '..', 'link1', '..', 'dir1')),
47 testLink(join(temp, 'link1', '..', 'link1'))]);
48 } else {
49 // Non-Windows platforms resolve the link before adding the '..'.
50 return Future.wait([
51 testFile(join(
52 temp, 'dir1', '..', 'link1', '..', 'dir2', 'file2')),
53 testDir(join(temp, 'dir1', '..', 'link1', '..', 'dir2')),
54 testLink(join(temp, 'link1', '..', '..', 'link1'))]);
55 }
56 })
57 .then((_) {
58 Directory.current = temp;
59 return Future.wait([
60 testFile('dir1/dir2/file2'), // Test forward slashes on Windows too.
61 testFile('link1/file2'),
62 testFile(join('dir1', '..', 'dir1', '.', 'file1')),
63 testDir('.'),
64 testLink('link1')]);
65 })
66 .then((_) {
67 Directory.current = 'link1';
68 if (Platform.isWindows) {
69 return Future.wait([
70 testFile('file2'),
71 // Windows applies '..' to a link without resolving the link first.
72 testFile('..\\dir1\\file1'),
73 testLink('.'),
74 testDir('..'),
75 testLink('..\\link1')]);
76 } else {
77 return Future.wait([
78 testFile('file2'),
79 // On non-Windows the link is changed to dir1/dir2 before .. happens.
80 testFile('../dir2/file2'),
81 testDir('.'),
82 testDir('..'),
83 testLink('../../link1')]);
84 }
85 })
86 .whenComplete(() {
87 Directory.current = testsDir;
88 tempDir.delete(recursive: true);
89 });
90 }));
91 }
92
93 Future makeEntities(String temp) {
94 return new Directory(join(temp, 'dir1', 'dir2')).create(recursive: true)
95 .then((_) => new File(join(temp, 'dir1', 'dir2', 'file2')).create())
96 .then((_) => new File(join(temp, 'dir1', 'file1')).create())
97 .then((_) => new Link(join(temp, 'link1'))
98 .create(join(temp, 'dir1', 'dir2')));
99 }
100
101 Future testFile(String name) {
102 // We test that f.resolveSymbolicLinks points to the same place
103 // as f, because the actual resolved path is not easily predictable.
104 // The location of the temp directory varies from system to system,
105 // and its path includes symbolic links on some systems.
106 //Expect.isTrue(FileSystemEntity.identicalSync(name,
107 // new File(name).resolveSymbolicLinksSync()));
108 return new File(name).resolveSymbolicLinks().then((String resolved) {
109 //Expect.isTrue(FileSystemEntity.identicalSync(name, resolved));
110 Expect.isTrue(isAbsolute(resolved));
111 // Test that resolveSymbolicLinks removes all links, .., and . segments.
112 Expect.isFalse(resolved.contains('..'));
113 Expect.isFalse(resolved.contains('./'));
114 Expect.isFalse(resolved.contains('link1'));
115 });
116 }
117
118 Future testDir(String name) {
119 Expect.isTrue(FileSystemEntity.identicalSync(name,
120 new Directory(name).resolveSymbolicLinksSync()));
121 return new Directory(name).resolveSymbolicLinks().then((String resolved) {
122 Expect.isTrue(FileSystemEntity.identicalSync(name, resolved));
123 Expect.isTrue(isAbsolute(resolved));
124 // Test that resolveSymbolicLinks removes all links, .., and . segments.
125 Expect.isFalse(resolved.contains('..'));
126 Expect.isFalse(resolved.contains('./'));
127 Expect.isFalse(resolved.contains('link1'));
128 });
129 }
130
131 Future testLink(String name) {
132 Expect.isFalse(FileSystemEntity.identicalSync(name,
133 new Link(name).resolveSymbolicLinksSync()));
134 Expect.isTrue(FileSystemEntity.identicalSync(new Link(name).targetSync(),
135 new Link(name).resolveSymbolicLinksSync()));
136 return new Link(name).resolveSymbolicLinks().then((String resolved) {
137 Expect.isFalse(FileSystemEntity.identicalSync(name, resolved));
138 Expect.isTrue(isAbsolute(resolved));
139 // Test that resolveSymbolicLinks removes all links, .., and . segments.
140 Expect.isFalse(resolved.contains('..'));
141 Expect.isFalse(resolved.contains('./'));
142 Expect.isFalse(resolved.contains('link1'));
143 return new Link(name).target()
144 .then((targetName) => FileSystemEntity.identical(targetName, resolved))
145 .then((identical) => Expect.isTrue(identical));
146 });
147 }
OLDNEW
« no previous file with comments | « tests/standalone/io/file_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698