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

Side by Side Diff: pkg/path/test/relative_test.dart

Issue 19231002: Port dart:io Path tests to package:path. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix Windows failures Created 7 years, 5 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
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 // Test "relative" on all styles of path.Builder, on all platforms.
6
7 import "package:unittest/unittest.dart";
8 import "package:path/path.dart" as path;
9
10 void main() {
11 test("test relative", testRelativeTo);
12 }
13
14
Bob Nystrom 2013/07/18 20:45:08 Nit: just a single blank line between functions.
15 void testRelativeTo() {
Bob Nystrom 2013/07/18 20:45:08 Instead of a named function, how about just inlini
Bill Hesse 2013/07/22 11:35:22 Done.
16 relativeTest(new path.Builder(style: path.Style.posix, root: '.'), '');
17 relativeTest(new path.Builder(style: path.Style.posix, root: '/'), '');
18 relativeTest(new path.Builder(style: path.Style.windows, root: 'd:/'), 'c:');
19 relativeTest(new path.Builder(style: path.Style.windows, root: '.'), 'c:');
20 relativeTest(new path.Builder(style: path.Style.url, root: 'file:///'),
21 'http://myserver');
22 relativeTest(new path.Builder(style: path.Style.url, root: '.'),
23 'http://myserver');
24 relativeTest(new path.Builder(style: path.Style.url, root: 'file:///'),
25 '');
Bob Nystrom 2013/07/18 20:45:08 Nit: this can go on the previous line.
26 relativeTest(new path.Builder(style: path.Style.url, root: '.'),
27 '');
Bob Nystrom 2013/07/18 20:45:08 This too.
28 }
29
30
31 void relativeTest(path.Builder builder, String absolutePrefix) {
32 var m = absolutePrefix;
Bob Nystrom 2013/07/18 20:45:08 How about "prefix"? That should still keep the tes
Bill Hesse 2013/07/22 11:35:22 Done.
33 var isRelative = (builder.root == '.');
34 // Cases where the arguments are absolute paths.
35 void test(result, p, from) {
Bob Nystrom 2013/07/18 20:45:08 Nit: ditch the "void".
36 expect(builder.normalize(result), builder.relative(p, from: from));
37 }
38
39 test('c/d', '$m/a/b/c/d', '$m/a/b');
40 test('c/d', '$m/a/b/c/d', '$m/a/b/');
41 test('.', '$m/a', '$m/a');
42 // Trailing slashes in the inputs have no effect.
43 test('../../z/x/y', '$m/a/b/z/x/y', '$m/a/b/c/d/');
44 test('../../z/x/y', '$m/a/b/z/x/y', '$m/a/b/c/d');
45 test('../../z/x/y', '$m/a/b/z/x/y/', '$m/a/b/c/d');
46 test('../../../z/x/y', '$m/z/x/y', '$m/a/b/c');
47 test('../../../z/x/y', '$m/z/x/y', '$m/a/b/c/');
48 // Cases where the arguments are relative paths.
Bob Nystrom 2013/07/18 20:45:08 Use a ":" here or a "." on the comment below.
Bill Hesse 2013/07/22 11:35:22 Done.
49 test('c/d', 'a/b/c/d', 'a/b');
50 test('.', 'a/b/c', 'a/b/c');
51 test('.', 'a/d/../b/c', 'a/b/c/');
52 test('.', '', '');
53 test('.', '.', '');
54 test('.', '', '.');
55 test('.', '.', '.');
56 test('.', '..', '..');
57 if (isRelative) test('..', '..', '.');
58 test('a', 'a', '');
59 test('a', 'a', '.');
60 test('..', '.', 'a');
61 test('.', 'a/b/f/../c', 'a/e/../b/c');
62 test('d', 'a/b/f/../c/d', 'a/e/../b/c');
63 test('..', 'a/b/f/../c', 'a/e/../b/c/e/');
64 test('../..', '', 'a/b/');
65 if (isRelative) test('../../..', '..', 'a/b/');
66 test('../b/c/d', 'b/c/d/', 'a/');
67 test('../a/b/c', 'x/y/a//b/./f/../c', 'x//y/z');
68
69 // Case where base is a substring of relative:
70 test('a/b', '$m/x/y//a/b', '$m/x/y/');
71 test('a/b', 'x/y//a/b', 'x/y/');
72 test('../ya/b', '$m/x/ya/b', '$m/x/y');
73 test('../ya/b', 'x/ya/b', 'x/y');
74 test('../b', 'x/y/../b', 'x/y/.');
75 test('a/b/c', 'x/y/a//b/./f/../c', 'x/y');
76 test('.', '$m/x/y//', '$m/x/y/');
77 test('.', '$m/x/y/', '$m/x/y');
78
79 // Should always throw - no relative path can be constructed.
80 if (isRelative) {
81 expect(() => builder.relative('.', from: '..'), throws);
82 expect(() => builder.relative('a/b', from: '../../d'), throws);
83 expect(() => builder.relative('a/b', from: '$m/a/b'), throws);
Bob Nystrom 2013/07/18 20:45:08 I'm still not sure about these. My intuition is th
Bill Hesse 2013/07/22 11:35:22 This is for the case where cwd is '.'. When the u
Bob Nystrom 2013/07/22 20:53:11 Ah, that makes more sense now. If there are cases
Bill Hesse 2013/07/23 16:07:00 Done. Re the documentation, I just noticed, in lo
nweiz 2013/07/23 19:31:06 I think it's implicit that [path] may be relative
84 // An absolute path relative from a relative path returns the absolute path.
85 test('$m/a/b', '$m/a/b', 'c/d');
86 }
87 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698