Make path.extname do the right thing when the last path component is . or ..
Closes GH-2526
This commit is contained in:
parent
d44ce97909
commit
d489a01f81
@ -61,7 +61,7 @@ if (isWindows) {
|
|||||||
/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?([\\\/])?([\s\S]*?)$/;
|
/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?([\\\/])?([\s\S]*?)$/;
|
||||||
|
|
||||||
// Regex to split the tail part of the above into [*, dir, basename, ext]
|
// Regex to split the tail part of the above into [*, dir, basename, ext]
|
||||||
var splitTailRe = /^([\s\S]+[\\\/](?!$)|[\\\/])?((?:[\s\S]+?)?(\.[^.]*)?)$/;
|
var splitTailRe = /^([\s\S]+[\\\/](?!$)|[\\\/])?((?:\.{1,2}$|[\s\S]+?)?(\.[^.\/\\]*)?)$/;
|
||||||
|
|
||||||
// Function to split a filename into [root, dir, basename, ext]
|
// Function to split a filename into [root, dir, basename, ext]
|
||||||
// windows version
|
// windows version
|
||||||
@ -255,7 +255,7 @@ if (isWindows) {
|
|||||||
|
|
||||||
// Split a filename into [root, dir, basename, ext], unix version
|
// Split a filename into [root, dir, basename, ext], unix version
|
||||||
// 'root' is just a slash, or nothing.
|
// 'root' is just a slash, or nothing.
|
||||||
var splitPathRe = /^(\/?)([\s\S]+\/(?!$)|\/)?((?:[\s\S]+?)?(\.[^.]*)?)$/;
|
var splitPathRe = /^(\/?)([\s\S]+\/(?!$)|\/)?((?:\.{1,2}$|[\s\S]+?)?(\.[^.\/]*)?)$/;
|
||||||
var splitPath = function(filename) {
|
var splitPath = function(filename) {
|
||||||
var result = splitPathRe.exec(filename);
|
var result = splitPathRe.exec(filename);
|
||||||
return [result[1] || '', result[2] || '', result[3] || '', result[4] || ''];
|
return [result[1] || '', result[2] || '', result[3] || '', result[4] || ''];
|
||||||
|
@ -102,6 +102,34 @@ assert.equal(path.extname('/.file.ext'), '.ext');
|
|||||||
assert.equal(path.extname('.path/file.ext'), '.ext');
|
assert.equal(path.extname('.path/file.ext'), '.ext');
|
||||||
assert.equal(path.extname('file.ext.ext'), '.ext');
|
assert.equal(path.extname('file.ext.ext'), '.ext');
|
||||||
assert.equal(path.extname('file.'), '.');
|
assert.equal(path.extname('file.'), '.');
|
||||||
|
assert.equal(path.extname('.'), '');
|
||||||
|
assert.equal(path.extname('./'), '');
|
||||||
|
assert.equal(path.extname('.file.ext'), '.ext');
|
||||||
|
assert.equal(path.extname('.file'), '');
|
||||||
|
assert.equal(path.extname('.file.'), '.');
|
||||||
|
assert.equal(path.extname('.file..'), '.');
|
||||||
|
assert.equal(path.extname('..'), '');
|
||||||
|
assert.equal(path.extname('../'), '');
|
||||||
|
assert.equal(path.extname('..file.ext'), '.ext');
|
||||||
|
assert.equal(path.extname('..file'), '.file');
|
||||||
|
assert.equal(path.extname('..file.'), '.');
|
||||||
|
assert.equal(path.extname('..file..'), '.');
|
||||||
|
assert.equal(path.extname('...'), '.');
|
||||||
|
assert.equal(path.extname('...ext'), '.ext');
|
||||||
|
assert.equal(path.extname('....'), '.');
|
||||||
|
assert.equal(path.extname('file.ext/'), '');
|
||||||
|
|
||||||
|
if (isWindows) {
|
||||||
|
// On windows, backspace is a path separator.
|
||||||
|
assert.equal(path.extname('.\\'), '');
|
||||||
|
assert.equal(path.extname('..\\'), '');
|
||||||
|
assert.equal(path.extname('file.ext\\'), '');
|
||||||
|
} else {
|
||||||
|
// On unix, backspace is a valid name component like any other character.
|
||||||
|
assert.equal(path.extname('.\\'), '');
|
||||||
|
assert.equal(path.extname('..\\'), '.\\');
|
||||||
|
assert.equal(path.extname('file.ext\\'), '.ext\\');
|
||||||
|
}
|
||||||
|
|
||||||
// path.join tests
|
// path.join tests
|
||||||
var failures = [];
|
var failures = [];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user