You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
4.2 KiB
126 lines
4.2 KiB
'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(); |
|
});
|
|
|