Skip to content

Commit fc1c3f3

Browse files
committed
Port test-path-basename.
1 parent 2806bff commit fc1c3f3

File tree

3 files changed

+82
-2
lines changed

3 files changed

+82
-2
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
"main": "index.js",
66
"dependencies": {},
77
"devDependencies": {
8-
"tape": "~1.0.4"
8+
"tape": "^4.9.0"
99
},
1010
"scripts": {
11-
"test": "tape test/*.js"
11+
"test": "node test"
1212
},
1313
"repository": {
1414
"type": "git",

test/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
require('./test-path-basename');

test/test-path-basename.js

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
'use strict';
2+
var tape = require('tape');
3+
var path = require('../');
4+
5+
tape('path.basename', function (t) {
6+
t.strictEqual(path.basename(__filename), 'test-path-basename.js');
7+
t.strictEqual(path.basename(__filename, '.js'), 'test-path-basename');
8+
t.strictEqual(path.basename('.js', '.js'), '');
9+
t.strictEqual(path.basename(''), '');
10+
t.strictEqual(path.basename('/dir/basename.ext'), 'basename.ext');
11+
t.strictEqual(path.basename('/basename.ext'), 'basename.ext');
12+
t.strictEqual(path.basename('basename.ext'), 'basename.ext');
13+
t.strictEqual(path.basename('basename.ext/'), 'basename.ext');
14+
t.strictEqual(path.basename('basename.ext//'), 'basename.ext');
15+
t.strictEqual(path.basename('aaa/bbb', '/bbb'), 'bbb');
16+
t.strictEqual(path.basename('aaa/bbb', 'a/bbb'), 'bbb');
17+
t.strictEqual(path.basename('aaa/bbb', 'bbb'), 'bbb');
18+
t.strictEqual(path.basename('aaa/bbb//', 'bbb'), 'bbb');
19+
t.strictEqual(path.basename('aaa/bbb', 'bb'), 'b');
20+
t.strictEqual(path.basename('aaa/bbb', 'b'), 'bb');
21+
t.strictEqual(path.basename('/aaa/bbb', '/bbb'), 'bbb');
22+
t.strictEqual(path.basename('/aaa/bbb', 'a/bbb'), 'bbb');
23+
t.strictEqual(path.basename('/aaa/bbb', 'bbb'), 'bbb');
24+
t.strictEqual(path.basename('/aaa/bbb//', 'bbb'), 'bbb');
25+
t.strictEqual(path.basename('/aaa/bbb', 'bb'), 'b');
26+
t.strictEqual(path.basename('/aaa/bbb', 'b'), 'bb');
27+
t.strictEqual(path.basename('/aaa/bbb'), 'bbb');
28+
t.strictEqual(path.basename('/aaa/'), 'aaa');
29+
t.strictEqual(path.basename('/aaa/b'), 'b');
30+
t.strictEqual(path.basename('/a/b'), 'b');
31+
t.strictEqual(path.basename('//a'), 'a');
32+
t.end();
33+
})
34+
35+
tape('path.win32.basename', { skip: true }, function (t) {
36+
// On Windows a backslash acts as a path separator.
37+
t.strictEqual(path.win32.basename('\\dir\\basename.ext'), 'basename.ext');
38+
t.strictEqual(path.win32.basename('\\basename.ext'), 'basename.ext');
39+
t.strictEqual(path.win32.basename('basename.ext'), 'basename.ext');
40+
t.strictEqual(path.win32.basename('basename.ext\\'), 'basename.ext');
41+
t.strictEqual(path.win32.basename('basename.ext\\\\'), 'basename.ext');
42+
t.strictEqual(path.win32.basename('foo'), 'foo');
43+
t.strictEqual(path.win32.basename('aaa\\bbb', '\\bbb'), 'bbb');
44+
t.strictEqual(path.win32.basename('aaa\\bbb', 'a\\bbb'), 'bbb');
45+
t.strictEqual(path.win32.basename('aaa\\bbb', 'bbb'), 'bbb');
46+
t.strictEqual(path.win32.basename('aaa\\bbb\\\\\\\\', 'bbb'), 'bbb');
47+
t.strictEqual(path.win32.basename('aaa\\bbb', 'bb'), 'b');
48+
t.strictEqual(path.win32.basename('aaa\\bbb', 'b'), 'bb');
49+
t.strictEqual(path.win32.basename('C:'), '');
50+
t.strictEqual(path.win32.basename('C:.'), '.');
51+
t.strictEqual(path.win32.basename('C:\\'), '');
52+
t.strictEqual(path.win32.basename('C:\\dir\\base.ext'), 'base.ext');
53+
t.strictEqual(path.win32.basename('C:\\basename.ext'), 'basename.ext');
54+
t.strictEqual(path.win32.basename('C:basename.ext'), 'basename.ext');
55+
t.strictEqual(path.win32.basename('C:basename.ext\\'), 'basename.ext');
56+
t.strictEqual(path.win32.basename('C:basename.ext\\\\'), 'basename.ext');
57+
t.strictEqual(path.win32.basename('C:foo'), 'foo');
58+
t.strictEqual(path.win32.basename('file:stream'), 'file:stream');
59+
t.end();
60+
});
61+
62+
tape('On unix a backslash is just treated as any other character.', function (t) {
63+
t.strictEqual(path.posix.basename('\\dir\\basename.ext'),
64+
'\\dir\\basename.ext');
65+
t.strictEqual(path.posix.basename('\\basename.ext'), '\\basename.ext');
66+
t.strictEqual(path.posix.basename('basename.ext'), 'basename.ext');
67+
t.strictEqual(path.posix.basename('basename.ext\\'), 'basename.ext\\');
68+
t.strictEqual(path.posix.basename('basename.ext\\\\'), 'basename.ext\\\\');
69+
t.strictEqual(path.posix.basename('foo'), 'foo');
70+
t.end();
71+
});
72+
73+
tape('POSIX filenames may include control characters', function (t) {
74+
// c.f. http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html
75+
var controlCharFilename = "Icon" + (String.fromCharCode(13));
76+
t.strictEqual(path.posix.basename(("/a/b/" + controlCharFilename)),
77+
controlCharFilename);
78+
t.end();
79+
});

0 commit comments

Comments
 (0)