UNPKG

3.35 kBJavaScriptView Raw
1var validate = require("..")
2var test = require("tap").test
3var path = require("path")
4var fs = require("fs")
5
6test("validate-npm-package-name", function (t) {
7
8 // Traditional
9
10 t.deepEqual(validate("some-package"), {validForNewPackages: true, validForOldPackages: true})
11 t.deepEqual(validate("example.com"), {validForNewPackages: true, validForOldPackages: true})
12 t.deepEqual(validate("under_score"), {validForNewPackages: true, validForOldPackages: true})
13 t.deepEqual(validate("period.js"), {validForNewPackages: true, validForOldPackages: true})
14 t.deepEqual(validate("123numeric"), {validForNewPackages: true, validForOldPackages: true})
15 t.deepEqual(validate("crazy!"), {validForNewPackages: true, validForOldPackages: true})
16
17 // Scoped (npm 2+)
18
19 t.deepEqual(validate("@npm/thingy"), {validForNewPackages: true, validForOldPackages: true})
20 t.deepEqual(validate("@npm-zors/money!time.js"), {validForNewPackages: true, validForOldPackages: true})
21
22 // Invalid
23
24 t.deepEqual(validate(""), {
25 validForNewPackages: false,
26 validForOldPackages: false,
27 errors: ["name length must be greater than zero"]})
28
29 t.deepEqual(validate(""), {
30 validForNewPackages: false,
31 validForOldPackages: false,
32 errors: ["name length must be greater than zero"]})
33
34 t.deepEqual(validate(".start-with-period"), {
35 validForNewPackages: false,
36 validForOldPackages: false,
37 errors: ["name cannot start with a period"]})
38
39 t.deepEqual(validate("_start-with-underscore"), {
40 validForNewPackages: false,
41 validForOldPackages: false,
42 errors: ["name cannot start with an underscore"]})
43
44 t.deepEqual(validate("contain:colons"), {
45 validForNewPackages: false,
46 validForOldPackages: false,
47 errors: ["name can only contain URL-friendly characters"]})
48
49 t.deepEqual(validate(" leading-space"), {
50 validForNewPackages: false,
51 validForOldPackages: false,
52 errors: ["name cannot contain leading or trailing spaces", "name can only contain URL-friendly characters"]})
53
54 t.deepEqual(validate("trailing-space "), {
55 validForNewPackages: false,
56 validForOldPackages: false,
57 errors: ["name cannot contain leading or trailing spaces", "name can only contain URL-friendly characters"]})
58
59 t.deepEqual(validate("s/l/a/s/h/e/s"), {
60 validForNewPackages: false,
61 validForOldPackages: false,
62 errors: ["name can only contain URL-friendly characters"]})
63
64 t.deepEqual(validate("node_modules"), {
65 validForNewPackages: false,
66 validForOldPackages: false,
67 errors: ["node_modules is a blacklisted name"]})
68
69 t.deepEqual(validate("favicon.ico"), {
70 validForNewPackages: false,
71 validForOldPackages: false,
72 errors: ["favicon.ico is a blacklisted name"]})
73
74 // Node/IO Core
75
76 t.deepEqual(validate("http"), {
77 validForNewPackages: false,
78 validForOldPackages: true,
79 warnings: ["http is a core module name"]})
80
81 // Long Package Names
82
83 t.deepEqual(validate("1234567890123456789012345678901234567890-more-than-fifty"), {
84 validForNewPackages: false,
85 validForOldPackages: true,
86 warnings: ["name can no longer contain more than 50 characters"]
87 })
88
89 // Legacy Mixed-Case
90
91 t.deepEqual(validate("CAPITAL-LETTERS"), {
92 validForNewPackages: false,
93 validForOldPackages: true,
94 warnings: ["name can no longer contain capital letters"]})
95
96 t.end()
97})