123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- 'use strict';
- var tape = require('tape');
- var path = require('../');
- var backslashRE = /\\/g;
- var joinTests =
- // arguments result
- [[['.', 'x/b', '..', '/b/c.js'], 'x/b/c.js'],
- [[], '.'],
- [['/.', 'x/b', '..', '/b/c.js'], '/x/b/c.js'],
- [['/foo', '../../../bar'], '/bar'],
- [['foo', '../../../bar'], '../../bar'],
- [['foo/', '../../../bar'], '../../bar'],
- [['foo/x', '../../../bar'], '../bar'],
- [['foo/x', './bar'], 'foo/x/bar'],
- [['foo/x/', './bar'], 'foo/x/bar'],
- [['foo/x/', '.', 'bar'], 'foo/x/bar'],
- [['./'], './'],
- [['.', './'], './'],
- [['.', '.', '.'], '.'],
- [['.', './', '.'], '.'],
- [['.', '/./', '.'], '.'],
- [['.', '/////./', '.'], '.'],
- [['.'], '.'],
- [['', '.'], '.'],
- [['', 'foo'], 'foo'],
- [['foo', '/bar'], 'foo/bar'],
- [['', '/foo'], '/foo'],
- [['', '', '/foo'], '/foo'],
- [['', '', 'foo'], 'foo'],
- [['foo', ''], 'foo'],
- [['foo/', ''], 'foo/'],
- [['foo', '', '/bar'], 'foo/bar'],
- [['./', '..', '/foo'], '../foo'],
- [['./', '..', '..', '/foo'], '../../foo'],
- [['.', '..', '..', '/foo'], '../../foo'],
- [['', '..', '..', '/foo'], '../../foo'],
- [['/'], '/'],
- [['/', '.'], '/'],
- [['/', '..'], '/'],
- [['/', '..', '..'], '/'],
- [[''], '.'],
- [['', ''], '.'],
- [[' /foo'], ' /foo'],
- [[' ', 'foo'], ' /foo'],
- [[' ', '.'], ' '],
- [[' ', '/'], ' /'],
- [[' ', ''], ' '],
- [['/', 'foo'], '/foo'],
- [['/', '/foo'], '/foo'],
- [['/', '//foo'], '/foo'],
- [['/', '', '/foo'], '/foo'],
- [['', '/', 'foo'], '/foo'],
- [['', '/', '/foo'], '/foo']
- ];
- // Windows-specific join tests
- var windowsJoinTests =
- [// arguments result
- // UNC path expected
- [['//foo/bar'], '\\\\foo\\bar\\'],
- [['\\/foo/bar'], '\\\\foo\\bar\\'],
- [['\\\\foo/bar'], '\\\\foo\\bar\\'],
- // UNC path expected - server and share separate
- [['//foo', 'bar'], '\\\\foo\\bar\\'],
- [['//foo/', 'bar'], '\\\\foo\\bar\\'],
- [['//foo', '/bar'], '\\\\foo\\bar\\'],
- // UNC path expected - questionable
- [['//foo', '', 'bar'], '\\\\foo\\bar\\'],
- [['//foo/', '', 'bar'], '\\\\foo\\bar\\'],
- [['//foo/', '', '/bar'], '\\\\foo\\bar\\'],
- // UNC path expected - even more questionable
- [['', '//foo', 'bar'], '\\\\foo\\bar\\'],
- [['', '//foo/', 'bar'], '\\\\foo\\bar\\'],
- [['', '//foo/', '/bar'], '\\\\foo\\bar\\'],
- // No UNC path expected (no double slash in first component)
- [['\\', 'foo/bar'], '\\foo\\bar'],
- [['\\', '/foo/bar'], '\\foo\\bar'],
- [['', '/', '/foo/bar'], '\\foo\\bar'],
- // No UNC path expected (no non-slashes in first component -
- // questionable)
- [['//', 'foo/bar'], '\\foo\\bar'],
- [['//', '/foo/bar'], '\\foo\\bar'],
- [['\\\\', '/', '/foo/bar'], '\\foo\\bar'],
- [['//'], '/'],
- // No UNC path expected (share name missing - questionable).
- [['//foo'], '\\foo'],
- [['//foo/'], '\\foo\\'],
- [['//foo', '/'], '\\foo\\'],
- [['//foo', '', '/'], '\\foo\\'],
- // No UNC path expected (too many leading slashes - questionable)
- [['///foo/bar'], '\\foo\\bar'],
- [['////foo', 'bar'], '\\foo\\bar'],
- [['\\\\\\/foo/bar'], '\\foo\\bar'],
- // Drive-relative vs drive-absolute paths. This merely describes the
- // status quo, rather than being obviously right
- [['c:'], 'c:.'],
- [['c:.'], 'c:.'],
- [['c:', ''], 'c:.'],
- [['', 'c:'], 'c:.'],
- [['c:.', '/'], 'c:.\\'],
- [['c:.', 'file'], 'c:file'],
- [['c:', '/'], 'c:\\'],
- [['c:', 'file'], 'c:\\file']
- ];
- tape('path.posix.join', function (t) {
- joinTests.forEach(function (p) {
- var actual = path.posix.join.apply(null, p[0]);
- t.strictEqual(actual, p[1]);
- });
- t.end();
- });
- tape('path.win32.join', { skip: true }, function (t) {
- joinTests.forEach(function (p) {
- var actual = path.win32.join.apply(null, p[0]).replace(backslashRE, '/');
- t.strictEqual(actual, p[1]);
- });
- windowsJoinTests.forEach(function (p) {
- var actual = path.win32.join.apply(null, p[0]);
- t.strictEqual(actual, p[1]);
- });
- t.end();
- });
|