summaryrefslogtreecommitdiff
path: root/std/path/extname_test.ts
blob: e27222655650bb330fd5f7d7f74215f86cdf49ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// Copyright the Browserify authors. MIT License.
// Ported from https://github.com/browserify/path-browserify/

import { test } from "../testing/mod.ts";
import { assertEquals } from "../testing/asserts.ts";
import * as path from "./mod.ts";

const slashRE = /\//g;

const pairs = [
  ["", ""],
  ["/path/to/file", ""],
  ["/path/to/file.ext", ".ext"],
  ["/path.to/file.ext", ".ext"],
  ["/path.to/file", ""],
  ["/path.to/.file", ""],
  ["/path.to/.file.ext", ".ext"],
  ["/path/to/f.ext", ".ext"],
  ["/path/to/..ext", ".ext"],
  ["/path/to/..", ""],
  ["file", ""],
  ["file.ext", ".ext"],
  [".file", ""],
  [".file.ext", ".ext"],
  ["/file", ""],
  ["/file.ext", ".ext"],
  ["/.file", ""],
  ["/.file.ext", ".ext"],
  [".path/file.ext", ".ext"],
  ["file.ext.ext", ".ext"],
  ["file.", "."],
  [".", ""],
  ["./", ""],
  [".file.ext", ".ext"],
  [".file", ""],
  [".file.", "."],
  [".file..", "."],
  ["..", ""],
  ["../", ""],
  ["..file.ext", ".ext"],
  ["..file", ".file"],
  ["..file.", "."],
  ["..file..", "."],
  ["...", "."],
  ["...ext", ".ext"],
  ["....", "."],
  ["file.ext/", ".ext"],
  ["file.ext//", ".ext"],
  ["file/", ""],
  ["file//", ""],
  ["file./", "."],
  ["file.//", "."]
];

test(function extname() {
  pairs.forEach(function(p) {
    const input = p[0];
    const expected = p[1];
    assertEquals(expected, path.posix.extname(input));
  });

  // On *nix, backslash is a valid name component like any other character.
  assertEquals(path.posix.extname(".\\"), "");
  assertEquals(path.posix.extname("..\\"), ".\\");
  assertEquals(path.posix.extname("file.ext\\"), ".ext\\");
  assertEquals(path.posix.extname("file.ext\\\\"), ".ext\\\\");
  assertEquals(path.posix.extname("file\\"), "");
  assertEquals(path.posix.extname("file\\\\"), "");
  assertEquals(path.posix.extname("file.\\"), ".\\");
  assertEquals(path.posix.extname("file.\\\\"), ".\\\\");
});

test(function extnameWin32() {
  pairs.forEach(function(p) {
    const input = p[0].replace(slashRE, "\\");
    const expected = p[1];
    assertEquals(expected, path.win32.extname(input));
    assertEquals(expected, path.win32.extname("C:" + input));
  });

  // On Windows, backslash is a path separator.
  assertEquals(path.win32.extname(".\\"), "");
  assertEquals(path.win32.extname("..\\"), "");
  assertEquals(path.win32.extname("file.ext\\"), ".ext");
  assertEquals(path.win32.extname("file.ext\\\\"), ".ext");
  assertEquals(path.win32.extname("file\\"), "");
  assertEquals(path.win32.extname("file\\\\"), "");
  assertEquals(path.win32.extname("file.\\"), ".");
  assertEquals(path.win32.extname("file.\\\\"), ".");
});