var path = require("path"); common = require("../common"); assert = common.assert var f = __filename; assert.equal(path.basename(f), "test-path.js"); assert.equal(path.basename(f, ".js"), "test-path"); assert.equal(path.extname(f), ".js"); assert.equal(path.dirname(f).substr(-11), "test/simple"); assert.equal(path.dirname("/a/b/"), "/a"); assert.equal(path.dirname("/a/b"), "/a"); assert.equal(path.dirname("/a"), "/"); assert.equal(path.dirname("/"), "/"); path.exists(f, function (y) { assert.equal(y, true) }); assert.equal(path.existsSync(f), true); assert.equal(path.extname(""), ""); assert.equal(path.extname("/path/to/file"), ""); assert.equal(path.extname("/path/to/file.ext"), ".ext"); assert.equal(path.extname("/path.to/file.ext"), ".ext"); assert.equal(path.extname("/path.to/file"), ""); assert.equal(path.extname("/path.to/.file"), ""); assert.equal(path.extname("/path.to/.file.ext"), ".ext"); assert.equal(path.extname("/path/to/f.ext"), ".ext"); assert.equal(path.extname("/path/to/..ext"), ".ext"); assert.equal(path.extname("file"), ""); assert.equal(path.extname("file.ext"), ".ext"); assert.equal(path.extname(".file"), ""); assert.equal(path.extname(".file.ext"), ".ext"); assert.equal(path.extname("/file"), ""); assert.equal(path.extname("/file.ext"), ".ext"); assert.equal(path.extname("/.file"), ""); assert.equal(path.extname("/.file.ext"), ".ext"); assert.equal(path.extname(".path/file.ext"), ".ext"); assert.equal(path.extname("file.ext.ext"), ".ext"); assert.equal(path.extname("file."), "."); // path.join tests var failures = []; 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' ] ,[[' ', '.' ], ' ' ] ,[[' ', '/' ], ' /' ] ,[[' ', '' ], ' ' ] // preserving empty path parts, for url resolution case // pass boolean true as LAST argument. ,[['', '', true ], '/' ] ,[['foo', '', true ], 'foo/' ] ,[['foo', '', 'bar', true ], 'foo//bar' ] ,[['foo/', '', 'bar', true ], 'foo///bar' ] ,[['', true ], '.' ] // filtration of non-strings. ,[['x', true, 7, 'y', null, {} ], 'x/y' ] ]; joinTests.forEach(function (test) { var actual = path.join.apply(path, test[0]); var expected = test[1]; var message = "path.join("+test[0].map(JSON.stringify).join(",")+")" + "\n expect="+JSON.stringify(expected) + "\n actual="+JSON.stringify(actual); if (actual !== expected) failures.push("\n"+message); // assert.equal(actual, expected, message); }); assert.equal(failures.length, 0, failures.join("")) assert.equal(path.normalize("./fixtures///b/../b/c.js"), "fixtures/b/c.js"); assert.equal(path.normalize("./fixtures///b/../b/c.js",true), "fixtures///b/c.js"); assert.equal(path.normalize("/foo/../../../bar"), "/bar"); assert.deepEqual(path.normalizeArray(["fixtures","b","","..","b","c.js"]), ["fixtures","b","c.js"]); assert.deepEqual(path.normalizeArray(["fixtures","","b","..","b","c.js"], true), ["fixtures","","b","c.js"]); assert.equal(path.normalize("a//b//../b", true), "a//b/b"); assert.equal(path.normalize("a//b//../b"), "a/b"); assert.equal(path.normalize("a//b//./c", true), "a//b//c"); assert.equal(path.normalize("a//b//./c"), "a/b/c"); assert.equal(path.normalize("a//b//.", true), "a//b/"); assert.equal(path.normalize("a//b//."), "a/b");