1 | var assert = require('assert');
|
2 | var pathParse = require('./index');
|
3 |
|
4 | var winParseTests = [
|
5 | [{ root: 'C:\\', dir: 'C:\\path\\dir', base: 'index.html', ext: '.html', name: 'index' }, 'C:\\path\\dir\\index.html'],
|
6 | [{ root: 'C:\\', dir: 'C:\\another_path\\DIR\\1\\2\\33', base: 'index', ext: '', name: 'index' }, 'C:\\another_path\\DIR\\1\\2\\33\\index'],
|
7 | [{ root: '', dir: 'another_path\\DIR with spaces\\1\\2\\33', base: 'index', ext: '', name: 'index' }, 'another_path\\DIR with spaces\\1\\2\\33\\index'],
|
8 | [{ root: '\\', dir: '\\foo', base: 'C:', ext: '', name: 'C:' }, '\\foo\\C:'],
|
9 | [{ root: '', dir: '', base: 'file', ext: '', name: 'file' }, 'file'],
|
10 | [{ root: '', dir: '.', base: 'file', ext: '', name: 'file' }, '.\\file'],
|
11 |
|
12 |
|
13 | [{ root: '\\\\server\\share\\', dir: '\\\\server\\share\\', base: 'file_path', ext: '', name: 'file_path' }, '\\\\server\\share\\file_path'],
|
14 | [{ root: '\\\\server two\\shared folder\\', dir: '\\\\server two\\shared folder\\', base: 'file path.zip', ext: '.zip', name: 'file path' }, '\\\\server two\\shared folder\\file path.zip'],
|
15 | [{ root: '\\\\teela\\admin$\\', dir: '\\\\teela\\admin$\\', base: 'system32', ext: '', name: 'system32' }, '\\\\teela\\admin$\\system32'],
|
16 | [{ root: '\\\\?\\UNC\\', dir: '\\\\?\\UNC\\server', base: 'share', ext: '', name: 'share' }, '\\\\?\\UNC\\server\\share']
|
17 | ];
|
18 |
|
19 | var winSpecialCaseFormatTests = [
|
20 | [{dir: 'some\\dir'}, 'some\\dir\\'],
|
21 | [{base: 'index.html'}, 'index.html'],
|
22 | [{}, '']
|
23 | ];
|
24 |
|
25 | var unixParseTests = [
|
26 | [{ root: '/', dir: '/home/user/dir', base: 'file.txt', ext: '.txt', name: 'file' }, '/home/user/dir/file.txt'],
|
27 | [{ root: '/', dir: '/home/user/a dir', base: 'another File.zip', ext: '.zip', name: 'another File' }, '/home/user/a dir/another File.zip'],
|
28 | [{ root: '/', dir: '/home/user/a dir/', base: 'another&File.', ext: '.', name: 'another&File' }, '/home/user/a dir//another&File.'],
|
29 | [{ root: '/', dir: '/home/user/a$$$dir/', base: 'another File.zip', ext: '.zip', name: 'another File' }, '/home/user/a$$$dir//another File.zip'],
|
30 | [{ root: '', dir: 'user/dir', base: 'another File.zip', ext: '.zip', name: 'another File' }, 'user/dir/another File.zip'],
|
31 | [{ root: '', dir: '', base: 'file', ext: '', name: 'file' }, 'file'],
|
32 | [{ root: '', dir: '', base: '.\\file', ext: '', name: '.\\file' }, '.\\file'],
|
33 | [{ root: '', dir: '.', base: 'file', ext: '', name: 'file' }, './file'],
|
34 | [{ root: '', dir: '', base: 'C:\\foo', ext: '', name: 'C:\\foo' }, 'C:\\foo']
|
35 | ];
|
36 |
|
37 | var unixSpecialCaseFormatTests = [
|
38 | [{dir: 'some/dir'}, 'some/dir/'],
|
39 | [{base: 'index.html'}, 'index.html'],
|
40 | [{}, '']
|
41 | ];
|
42 |
|
43 | var errors = [
|
44 | {input: null, message: /Parameter 'pathString' must be a string, not/},
|
45 | {input: {}, message: /Parameter 'pathString' must be a string, not object/},
|
46 | {input: true, message: /Parameter 'pathString' must be a string, not boolean/},
|
47 | {input: 1, message: /Parameter 'pathString' must be a string, not number/},
|
48 | {input: undefined, message: /Parameter 'pathString' must be a string, not undefined/},
|
49 | ];
|
50 |
|
51 | checkParseFormat(pathParse.win32, winParseTests);
|
52 | checkParseFormat(pathParse.posix, unixParseTests);
|
53 | checkErrors(pathParse.win32);
|
54 | checkErrors(pathParse.posix);
|
55 |
|
56 | function checkErrors(parse) {
|
57 | errors.forEach(function(errorCase) {
|
58 | try {
|
59 | parse(errorCase.input);
|
60 | } catch(err) {
|
61 | assert.ok(err instanceof TypeError);
|
62 | assert.ok(
|
63 | errorCase.message.test(err.message),
|
64 | 'expected ' + errorCase.message + ' to match ' + err.message
|
65 | );
|
66 | return;
|
67 | }
|
68 |
|
69 | assert.fail('should have thrown');
|
70 | });
|
71 | }
|
72 |
|
73 | function checkParseFormat(parse, testCases) {
|
74 | testCases.forEach(function(testCase) {
|
75 | assert.deepEqual(parse(testCase[1]), testCase[0]);
|
76 | });
|
77 | }
|