127 lines
4.2 KiB
JavaScript
127 lines
4.2 KiB
JavaScript
|
'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();
|
||
|
});
|