summaryrefslogtreecommitdiff
path: root/test/parallel/test-path-join.js
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2017-08-30 15:34:45 +0200
committerMichaël Zasso <targos@protonmail.com>2017-09-01 14:28:53 +0200
commit2ef0f007a4ac969d0225d7159e495e43b1ffad71 (patch)
tree8f2d1552601876486224fb30e41e0417ab8e498c /test/parallel/test-path-join.js
parent204d94fc756218bfeee921905c8be488027f9627 (diff)
downloadandroid-node-v8-2ef0f007a4ac969d0225d7159e495e43b1ffad71.tar.gz
android-node-v8-2ef0f007a4ac969d0225d7159e495e43b1ffad71.tar.bz2
android-node-v8-2ef0f007a4ac969d0225d7159e495e43b1ffad71.zip
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: https://github.com/nodejs/node/pull/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>
Diffstat (limited to 'test/parallel/test-path-join.js')
-rw-r--r--test/parallel/test-path-join.js142
1 files changed, 142 insertions, 0 deletions
diff --git a/test/parallel/test-path-join.js b/test/parallel/test-path-join.js
new file mode 100644
index 0000000000..691ba98f9b
--- /dev/null
+++ b/test/parallel/test-path-join.js
@@ -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(''));