|
|
|
var common = require('../common');
|
|
|
|
var assert = require('assert');
|
|
|
|
|
|
|
|
var path = require('path');
|
|
|
|
|
|
|
|
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');
|
|
|
|
|