-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test: split path tests into multiple files
Create one file for testing each function of the path module. Keep general error tests and tests for constant properties in test-path.js. PR-URL: nodejs/node#15093 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Yuta Hiroto <hello@about-hiroppy.com>
- Loading branch information
Showing
10 changed files
with
605 additions
and
587 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
'use strict'; | ||
require('../common'); | ||
const assert = require('assert'); | ||
const path = require('path'); | ||
|
||
assert.strictEqual(path.basename(__filename), 'test-path-basename.js'); | ||
assert.strictEqual(path.basename(__filename, '.js'), 'test-path-basename'); | ||
assert.strictEqual(path.basename('.js', '.js'), ''); | ||
assert.strictEqual(path.basename(''), ''); | ||
assert.strictEqual(path.basename('/dir/basename.ext'), 'basename.ext'); | ||
assert.strictEqual(path.basename('/basename.ext'), 'basename.ext'); | ||
assert.strictEqual(path.basename('basename.ext'), 'basename.ext'); | ||
assert.strictEqual(path.basename('basename.ext/'), 'basename.ext'); | ||
assert.strictEqual(path.basename('basename.ext//'), 'basename.ext'); | ||
assert.strictEqual(path.basename('aaa/bbb', '/bbb'), 'bbb'); | ||
assert.strictEqual(path.basename('aaa/bbb', 'a/bbb'), 'bbb'); | ||
assert.strictEqual(path.basename('aaa/bbb', 'bbb'), 'bbb'); | ||
assert.strictEqual(path.basename('aaa/bbb//', 'bbb'), 'bbb'); | ||
assert.strictEqual(path.basename('aaa/bbb', 'bb'), 'b'); | ||
assert.strictEqual(path.basename('aaa/bbb', 'b'), 'bb'); | ||
assert.strictEqual(path.basename('/aaa/bbb', '/bbb'), 'bbb'); | ||
assert.strictEqual(path.basename('/aaa/bbb', 'a/bbb'), 'bbb'); | ||
assert.strictEqual(path.basename('/aaa/bbb', 'bbb'), 'bbb'); | ||
assert.strictEqual(path.basename('/aaa/bbb//', 'bbb'), 'bbb'); | ||
assert.strictEqual(path.basename('/aaa/bbb', 'bb'), 'b'); | ||
assert.strictEqual(path.basename('/aaa/bbb', 'b'), 'bb'); | ||
assert.strictEqual(path.basename('/aaa/bbb'), 'bbb'); | ||
assert.strictEqual(path.basename('/aaa/'), 'aaa'); | ||
assert.strictEqual(path.basename('/aaa/b'), 'b'); | ||
assert.strictEqual(path.basename('/a/b'), 'b'); | ||
assert.strictEqual(path.basename('//a'), 'a'); | ||
|
||
// On Windows a backslash acts as a path separator. | ||
assert.strictEqual(path.win32.basename('\\dir\\basename.ext'), 'basename.ext'); | ||
assert.strictEqual(path.win32.basename('\\basename.ext'), 'basename.ext'); | ||
assert.strictEqual(path.win32.basename('basename.ext'), 'basename.ext'); | ||
assert.strictEqual(path.win32.basename('basename.ext\\'), 'basename.ext'); | ||
assert.strictEqual(path.win32.basename('basename.ext\\\\'), 'basename.ext'); | ||
assert.strictEqual(path.win32.basename('foo'), 'foo'); | ||
assert.strictEqual(path.win32.basename('aaa\\bbb', '\\bbb'), 'bbb'); | ||
assert.strictEqual(path.win32.basename('aaa\\bbb', 'a\\bbb'), 'bbb'); | ||
assert.strictEqual(path.win32.basename('aaa\\bbb', 'bbb'), 'bbb'); | ||
assert.strictEqual(path.win32.basename('aaa\\bbb\\\\\\\\', 'bbb'), 'bbb'); | ||
assert.strictEqual(path.win32.basename('aaa\\bbb', 'bb'), 'b'); | ||
assert.strictEqual(path.win32.basename('aaa\\bbb', 'b'), 'bb'); | ||
assert.strictEqual(path.win32.basename('C:'), ''); | ||
assert.strictEqual(path.win32.basename('C:.'), '.'); | ||
assert.strictEqual(path.win32.basename('C:\\'), ''); | ||
assert.strictEqual(path.win32.basename('C:\\dir\\base.ext'), 'base.ext'); | ||
assert.strictEqual(path.win32.basename('C:\\basename.ext'), 'basename.ext'); | ||
assert.strictEqual(path.win32.basename('C:basename.ext'), 'basename.ext'); | ||
assert.strictEqual(path.win32.basename('C:basename.ext\\'), 'basename.ext'); | ||
assert.strictEqual(path.win32.basename('C:basename.ext\\\\'), 'basename.ext'); | ||
assert.strictEqual(path.win32.basename('C:foo'), 'foo'); | ||
assert.strictEqual(path.win32.basename('file:stream'), 'file:stream'); | ||
|
||
// On unix a backslash is just treated as any other character. | ||
assert.strictEqual(path.posix.basename('\\dir\\basename.ext'), | ||
'\\dir\\basename.ext'); | ||
assert.strictEqual(path.posix.basename('\\basename.ext'), '\\basename.ext'); | ||
assert.strictEqual(path.posix.basename('basename.ext'), 'basename.ext'); | ||
assert.strictEqual(path.posix.basename('basename.ext\\'), 'basename.ext\\'); | ||
assert.strictEqual(path.posix.basename('basename.ext\\\\'), 'basename.ext\\\\'); | ||
assert.strictEqual(path.posix.basename('foo'), 'foo'); | ||
|
||
// POSIX filenames may include control characters | ||
// c.f. http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html | ||
const controlCharFilename = `Icon${String.fromCharCode(13)}`; | ||
assert.strictEqual(path.posix.basename(`/a/b/${controlCharFilename}`), | ||
controlCharFilename); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
'use strict'; | ||
const common = require('../common'); | ||
const assert = require('assert'); | ||
const path = require('path'); | ||
|
||
assert.strictEqual(path.dirname(__filename).substr(-13), | ||
common.isWindows ? 'test\\parallel' : 'test/parallel'); | ||
|
||
assert.strictEqual(path.posix.dirname('/a/b/'), '/a'); | ||
assert.strictEqual(path.posix.dirname('/a/b'), '/a'); | ||
assert.strictEqual(path.posix.dirname('/a'), '/'); | ||
assert.strictEqual(path.posix.dirname(''), '.'); | ||
assert.strictEqual(path.posix.dirname('/'), '/'); | ||
assert.strictEqual(path.posix.dirname('////'), '/'); | ||
assert.strictEqual(path.posix.dirname('//a'), '//'); | ||
assert.strictEqual(path.posix.dirname('foo'), '.'); | ||
|
||
assert.strictEqual(path.win32.dirname('c:\\'), 'c:\\'); | ||
assert.strictEqual(path.win32.dirname('c:\\foo'), 'c:\\'); | ||
assert.strictEqual(path.win32.dirname('c:\\foo\\'), 'c:\\'); | ||
assert.strictEqual(path.win32.dirname('c:\\foo\\bar'), 'c:\\foo'); | ||
assert.strictEqual(path.win32.dirname('c:\\foo\\bar\\'), 'c:\\foo'); | ||
assert.strictEqual(path.win32.dirname('c:\\foo\\bar\\baz'), 'c:\\foo\\bar'); | ||
assert.strictEqual(path.win32.dirname('\\'), '\\'); | ||
assert.strictEqual(path.win32.dirname('\\foo'), '\\'); | ||
assert.strictEqual(path.win32.dirname('\\foo\\'), '\\'); | ||
assert.strictEqual(path.win32.dirname('\\foo\\bar'), '\\foo'); | ||
assert.strictEqual(path.win32.dirname('\\foo\\bar\\'), '\\foo'); | ||
assert.strictEqual(path.win32.dirname('\\foo\\bar\\baz'), '\\foo\\bar'); | ||
assert.strictEqual(path.win32.dirname('c:'), 'c:'); | ||
assert.strictEqual(path.win32.dirname('c:foo'), 'c:'); | ||
assert.strictEqual(path.win32.dirname('c:foo\\'), 'c:'); | ||
assert.strictEqual(path.win32.dirname('c:foo\\bar'), 'c:foo'); | ||
assert.strictEqual(path.win32.dirname('c:foo\\bar\\'), 'c:foo'); | ||
assert.strictEqual(path.win32.dirname('c:foo\\bar\\baz'), 'c:foo\\bar'); | ||
assert.strictEqual(path.win32.dirname('file:stream'), '.'); | ||
assert.strictEqual(path.win32.dirname('dir\\file:stream'), 'dir'); | ||
assert.strictEqual(path.win32.dirname('\\\\unc\\share'), | ||
'\\\\unc\\share'); | ||
assert.strictEqual(path.win32.dirname('\\\\unc\\share\\foo'), | ||
'\\\\unc\\share\\'); | ||
assert.strictEqual(path.win32.dirname('\\\\unc\\share\\foo\\'), | ||
'\\\\unc\\share\\'); | ||
assert.strictEqual(path.win32.dirname('\\\\unc\\share\\foo\\bar'), | ||
'\\\\unc\\share\\foo'); | ||
assert.strictEqual(path.win32.dirname('\\\\unc\\share\\foo\\bar\\'), | ||
'\\\\unc\\share\\foo'); | ||
assert.strictEqual(path.win32.dirname('\\\\unc\\share\\foo\\bar\\baz'), | ||
'\\\\unc\\share\\foo\\bar'); | ||
assert.strictEqual(path.win32.dirname('/a/b/'), '/a'); | ||
assert.strictEqual(path.win32.dirname('/a/b'), '/a'); | ||
assert.strictEqual(path.win32.dirname('/a'), '/'); | ||
assert.strictEqual(path.win32.dirname(''), '.'); | ||
assert.strictEqual(path.win32.dirname('/'), '/'); | ||
assert.strictEqual(path.win32.dirname('////'), '/'); | ||
assert.strictEqual(path.win32.dirname('foo'), '.'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
'use strict'; | ||
require('../common'); | ||
const assert = require('assert'); | ||
const path = require('path'); | ||
|
||
const failures = []; | ||
const slashRE = /\//g; | ||
|
||
[ | ||
[__filename, '.js'], | ||
['', ''], | ||
['/path/to/file', ''], | ||
['/path/to/file.ext', '.ext'], | ||
['/path.to/file.ext', '.ext'], | ||
['/path.to/file', ''], | ||
['/path.to/.file', ''], | ||
['/path.to/.file.ext', '.ext'], | ||
['/path/to/f.ext', '.ext'], | ||
['/path/to/..ext', '.ext'], | ||
['/path/to/..', ''], | ||
['file', ''], | ||
['file.ext', '.ext'], | ||
['.file', ''], | ||
['.file.ext', '.ext'], | ||
['/file', ''], | ||
['/file.ext', '.ext'], | ||
['/.file', ''], | ||
['/.file.ext', '.ext'], | ||
['.path/file.ext', '.ext'], | ||
['file.ext.ext', '.ext'], | ||
['file.', '.'], | ||
['.', ''], | ||
['./', ''], | ||
['.file.ext', '.ext'], | ||
['.file', ''], | ||
['.file.', '.'], | ||
['.file..', '.'], | ||
['..', ''], | ||
['../', ''], | ||
['..file.ext', '.ext'], | ||
['..file', '.file'], | ||
['..file.', '.'], | ||
['..file..', '.'], | ||
['...', '.'], | ||
['...ext', '.ext'], | ||
['....', '.'], | ||
['file.ext/', '.ext'], | ||
['file.ext//', '.ext'], | ||
['file/', ''], | ||
['file//', ''], | ||
['file./', '.'], | ||
['file.//', '.'], | ||
].forEach((test) => { | ||
const expected = test[1]; | ||
[path.posix.extname, path.win32.extname].forEach((extname) => { | ||
let input = test[0]; | ||
let os; | ||
if (extname === path.win32.extname) { | ||
input = input.replace(slashRE, '\\'); | ||
os = 'win32'; | ||
} else { | ||
os = 'posix'; | ||
} | ||
const actual = extname(input); | ||
const message = `path.${os}.extname(${JSON.stringify(input)})\n expect=${ | ||
JSON.stringify(expected)}\n actual=${JSON.stringify(actual)}`; | ||
if (actual !== expected) | ||
failures.push(`\n${message}`); | ||
}); | ||
{ | ||
const input = `C:${test[0].replace(slashRE, '\\')}`; | ||
const actual = path.win32.extname(input); | ||
const message = `path.win32.extname(${JSON.stringify(input)})\n expect=${ | ||
JSON.stringify(expected)}\n actual=${JSON.stringify(actual)}`; | ||
if (actual !== expected) | ||
failures.push(`\n${message}`); | ||
} | ||
}); | ||
assert.strictEqual(failures.length, 0, failures.join('')); | ||
|
||
// On Windows, backslash is a path separator. | ||
assert.strictEqual(path.win32.extname('.\\'), ''); | ||
assert.strictEqual(path.win32.extname('..\\'), ''); | ||
assert.strictEqual(path.win32.extname('file.ext\\'), '.ext'); | ||
assert.strictEqual(path.win32.extname('file.ext\\\\'), '.ext'); | ||
assert.strictEqual(path.win32.extname('file\\'), ''); | ||
assert.strictEqual(path.win32.extname('file\\\\'), ''); | ||
assert.strictEqual(path.win32.extname('file.\\'), '.'); | ||
assert.strictEqual(path.win32.extname('file.\\\\'), '.'); | ||
|
||
// On *nix, backslash is a valid name component like any other character. | ||
assert.strictEqual(path.posix.extname('.\\'), ''); | ||
assert.strictEqual(path.posix.extname('..\\'), '.\\'); | ||
assert.strictEqual(path.posix.extname('file.ext\\'), '.ext\\'); | ||
assert.strictEqual(path.posix.extname('file.ext\\\\'), '.ext\\\\'); | ||
assert.strictEqual(path.posix.extname('file\\'), ''); | ||
assert.strictEqual(path.posix.extname('file\\\\'), ''); | ||
assert.strictEqual(path.posix.extname('file.\\'), '.\\'); | ||
assert.strictEqual(path.posix.extname('file.\\\\'), '.\\\\'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
'use strict'; | ||
require('../common'); | ||
const assert = require('assert'); | ||
const path = require('path'); | ||
|
||
assert.strictEqual(path.win32.isAbsolute('/'), true); | ||
assert.strictEqual(path.win32.isAbsolute('//'), true); | ||
assert.strictEqual(path.win32.isAbsolute('//server'), true); | ||
assert.strictEqual(path.win32.isAbsolute('//server/file'), true); | ||
assert.strictEqual(path.win32.isAbsolute('\\\\server\\file'), true); | ||
assert.strictEqual(path.win32.isAbsolute('\\\\server'), true); | ||
assert.strictEqual(path.win32.isAbsolute('\\\\'), true); | ||
assert.strictEqual(path.win32.isAbsolute('c'), false); | ||
assert.strictEqual(path.win32.isAbsolute('c:'), false); | ||
assert.strictEqual(path.win32.isAbsolute('c:\\'), true); | ||
assert.strictEqual(path.win32.isAbsolute('c:/'), true); | ||
assert.strictEqual(path.win32.isAbsolute('c://'), true); | ||
assert.strictEqual(path.win32.isAbsolute('C:/Users/'), true); | ||
assert.strictEqual(path.win32.isAbsolute('C:\\Users\\'), true); | ||
assert.strictEqual(path.win32.isAbsolute('C:cwd/another'), false); | ||
assert.strictEqual(path.win32.isAbsolute('C:cwd\\another'), false); | ||
assert.strictEqual(path.win32.isAbsolute('directory/directory'), false); | ||
assert.strictEqual(path.win32.isAbsolute('directory\\directory'), false); | ||
|
||
assert.strictEqual(path.posix.isAbsolute('/home/foo'), true); | ||
assert.strictEqual(path.posix.isAbsolute('/home/foo/..'), true); | ||
assert.strictEqual(path.posix.isAbsolute('bar/'), false); | ||
assert.strictEqual(path.posix.isAbsolute('./baz'), false); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
'use strict'; | ||
require('../common'); | ||
const assert = require('assert'); | ||
const path = require('path'); | ||
|
||
const failures = []; | ||
const backslashRE = /\\/g; | ||
|
||
const joinTests = [ | ||
[ [path.posix.join, path.win32.join], | ||
// 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 | ||
joinTests.push([ | ||
path.win32.join, | ||
joinTests[0][1].slice(0).concat( | ||
[// 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'] | ||
] | ||
) | ||
]); | ||
joinTests.forEach((test) => { | ||
if (!Array.isArray(test[0])) | ||
test[0] = [test[0]]; | ||
test[0].forEach((join) => { | ||
test[1].forEach((test) => { | ||
const actual = join.apply(null, test[0]); | ||
const expected = test[1]; | ||
// For non-Windows specific tests with the Windows join(), we need to try | ||
// replacing the slashes since the non-Windows specific tests' `expected` | ||
// use forward slashes | ||
let actualAlt; | ||
let os; | ||
if (join === path.win32.join) { | ||
actualAlt = actual.replace(backslashRE, '/'); | ||
os = 'win32'; | ||
} else { | ||
os = 'posix'; | ||
} | ||
const message = | ||
`path.${os}.join(${test[0].map(JSON.stringify).join(',')})\n expect=${ | ||
JSON.stringify(expected)}\n actual=${JSON.stringify(actual)}`; | ||
if (actual !== expected && actualAlt !== expected) | ||
failures.push(`\n${message}`); | ||
}); | ||
}); | ||
}); | ||
assert.strictEqual(failures.length, 0, failures.join('')); |
Oops, something went wrong.