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

Unified Diff: utils/tests/pub/path/path_posix_test.dart

Issue 11553005: Move path-manipulation code from io.dart into path.dart. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes + relative fix Created 8 years 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
« no previous file with comments | « utils/pub/path.dart ('k') | utils/tests/pub/path/path_windows_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: utils/tests/pub/path/path_posix_test.dart
diff --git a/utils/tests/pub/path/path_posix_test.dart b/utils/tests/pub/path/path_posix_test.dart
index a34c32d57c2c2802e481b4a0c88cef8b52563a84..085471be000b713cac532ac2f2efa0287dc2e5c7 100644
--- a/utils/tests/pub/path/path_posix_test.dart
+++ b/utils/tests/pub/path/path_posix_test.dart
@@ -33,6 +33,30 @@ main() {
expect(builder.extension(r'a.b\c'), r'.b\c');
});
+ test('rootPrefix', () {
+ expect(builder.rootPrefix(''), '');
+ expect(builder.rootPrefix('a'), '');
+ expect(builder.rootPrefix('a/b'), '');
+ expect(builder.rootPrefix('/a/c'), '/');
+ expect(builder.rootPrefix('/'), '/');
+ });
+
+ test('dirname', () {
+ expect(builder.dirname(''), '.');
+ expect(builder.dirname('a'), '.');
+ expect(builder.dirname('a/b'), 'a');
+ expect(builder.dirname('a/b/c'), 'a/b');
+ expect(builder.dirname('a/b.c'), 'a');
+ expect(builder.dirname('a/'), 'a');
+ expect(builder.dirname('a/.'), 'a');
+ expect(builder.dirname(r'a\b/c'), r'a\b');
+ expect(builder.dirname('/a'), '/');
+ expect(builder.dirname('/'), '/');
+ expect(builder.dirname('a/b/'), 'a/b');
+ expect(builder.dirname(r'a/b\c'), 'a');
+ expect(builder.dirname('a//'), 'a/');
+ });
+
test('basename', () {
expect(builder.basename(''), '');
expect(builder.basename('a'), 'a');
@@ -41,7 +65,13 @@ main() {
expect(builder.basename('a/b.c'), 'b.c');
expect(builder.basename('a/'), '');
expect(builder.basename('a/.'), '.');
+ expect(builder.basename(r'a\b/c'), 'c');
+ expect(builder.basename('/a'), 'a');
+ // TODO(nweiz): this should actually return '/'
+ expect(builder.basename('/'), '');
+ expect(builder.basename('a/b/'), '');
expect(builder.basename(r'a/b\c'), r'b\c');
+ expect(builder.basename('a//'), '');
});
test('basenameWithoutExtension', () {
@@ -104,10 +134,42 @@ main() {
});
test('ignores parts before an absolute path', () {
+ expect(builder.join('a', '/', 'b', 'c'), '/b/c');
expect(builder.join('a', '/b', '/c', 'd'), '/c/d');
expect(builder.join('a', r'c:\b', 'c', 'd'), r'a/c:\b/c/d');
expect(builder.join('a', r'\\b', 'c', 'd'), r'a/\\b/c/d');
});
+
+ test('ignores trailing nulls', () {
+ expect(builder.join('a', null), equals('a'));
+ expect(builder.join('a', 'b', 'c', null, null), equals('a/b/c'));
+ });
+
+ test('disallows intermediate nulls', () {
+ expect(() => builder.join('a', null, 'b'), throwsArgumentError);
+ expect(() => builder.join(null, 'a'), throwsArgumentError);
+ });
+ });
+
+ group('split', () {
+ test('simple cases', () {
+ expect(builder.split('foo'), equals(['foo']));
+ expect(builder.split('foo/bar'), equals(['foo', 'bar']));
+ expect(builder.split('foo/bar/baz'), equals(['foo', 'bar', 'baz']));
+ expect(builder.split('foo/../bar/./baz'),
+ equals(['foo', '..', 'bar', '.', 'baz']));
+ expect(builder.split('foo//bar///baz'), equals(['foo', 'bar', 'baz']));
+ expect(builder.split('foo/\\/baz'), equals(['foo', '\\', 'baz']));
+ expect(builder.split('.'), equals(['.']));
+ expect(builder.split(''), equals([]));
+ expect(builder.split('foo/'), equals(['foo']));
+ expect(builder.split('//'), equals(['/']));
+ });
+
+ test('includes the root for absolute paths', () {
+ expect(builder.split('/foo/bar/baz'), equals(['/', 'foo', 'bar', 'baz']));
+ expect(builder.split('/'), equals(['/']));
+ });
});
group('normalize', () {
@@ -211,15 +273,10 @@ main() {
group('from relative root', () {
var r = new path.Builder(style: path.Style.posix, root: 'foo/bar');
- // These tests rely on the current working directory, so don't do the
- // right thing if you run them on the wrong platform.
- if (io.Platform.operatingSystem != 'windows') {
- test('given absolute path', () {
- var b = new path.Builder(style: path.Style.posix);
- expect(r.relative('/'), b.join(b.relative('/'), '../..'));
- expect(r.relative('/a/b'), b.join(b.relative('/'), '../../a/b'));
- });
- }
+ test('given absolute path', () {
+ expect(r.relative('/'), equals('/'));
+ expect(r.relative('/a/b'), equals('/a/b'));
+ });
test('given relative path', () {
// The path is considered relative to the root, so it basically just
@@ -238,6 +295,23 @@ main() {
var r = new path.Builder(style: path.Style.posix, root: '/dir.ext');
expect(r.relative('/dir.ext/file'), 'file');
});
+
+ test('with a root parameter', () {
+ expect(builder.relative('/foo/bar/baz', from: '/foo/bar'), equals('baz'));
+ expect(builder.relative('..', from: '/foo/bar'), equals('../../root'));
+ expect(builder.relative('/foo/bar/baz', from: 'foo/bar'),
+ equals('../../../../foo/bar/baz'));
+ expect(builder.relative('..', from: 'foo/bar'), equals('../../..'));
+ });
+
+ test('with a root parameter and a relative root', () {
+ var r = new path.Builder(style: path.Style.posix, root: 'relative/root');
+ expect(r.relative('/foo/bar/baz', from: '/foo/bar'), equals('baz'));
+ expect(() => r.relative('..', from: '/foo/bar'), throwsArgumentError);
+ expect(r.relative('/foo/bar/baz', from: 'foo/bar'),
+ equals('/foo/bar/baz'));
+ expect(r.relative('..', from: 'foo/bar'), equals('../../..'));
+ });
});
group('resolve', () {
« no previous file with comments | « utils/pub/path.dart ('k') | utils/tests/pub/path/path_windows_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698