Yang Guo | 4fd355c | 2019-09-19 10:59:03 +0200 | [diff] [blame^] | 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 | // unc |
| 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 | } |