• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1var assert = require('assert');
2var pathParse = require('./index');
3
4var 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
19var winSpecialCaseFormatTests = [
20  [{dir: 'some\\dir'}, 'some\\dir\\'],
21  [{base: 'index.html'}, 'index.html'],
22  [{}, '']
23];
24
25var 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
37var unixSpecialCaseFormatTests = [
38  [{dir: 'some/dir'}, 'some/dir/'],
39  [{base: 'index.html'}, 'index.html'],
40  [{}, '']
41];
42
43var 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
51checkParseFormat(pathParse.win32, winParseTests);
52checkParseFormat(pathParse.posix, unixParseTests);
53checkErrors(pathParse.win32);
54checkErrors(pathParse.posix);
55
56function 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
73function checkParseFormat(parse, testCases) {
74  testCases.forEach(function(testCase) {
75    assert.deepEqual(parse(testCase[1]), testCase[0]);
76  });
77}
78