UNPKG

4.24 kBJavaScriptView Raw
1'use strict'
2const TestRunner = require('test-runner')
3const commandLineArgs = require('../')
4const a = require('assert')
5
6const runner = new TestRunner()
7
8runner.test('err-invalid-definition: throws when no definition.name specified', function () {
9 const optionDefinitions = [
10 { something: 'one' },
11 { something: 'two' }
12 ]
13 const argv = [ '--one', '--two' ]
14 try {
15 commandLineArgs(optionDefinitions, { argv })
16 a.fail()
17 } catch (err) {
18 a.strictEqual(err.name, 'NAME_MISSING')
19 }
20})
21
22runner.test('err-invalid-definition: throws if dev set a numeric alias', function () {
23 const optionDefinitions = [
24 { name: 'colours', alias: '1' }
25 ]
26 const argv = [ '--colours', 'red' ]
27
28 try {
29 commandLineArgs(optionDefinitions, { argv })
30 a.fail()
31 } catch (err) {
32 a.strictEqual(err.name, 'INVALID_ALIAS')
33 }
34})
35
36runner.test('err-invalid-definition: throws if dev set an alias of "-"', function () {
37 const optionDefinitions = [
38 { name: 'colours', alias: '-' }
39 ]
40 const argv = [ '--colours', 'red' ]
41
42 try {
43 commandLineArgs(optionDefinitions, { argv })
44 a.fail()
45 } catch (err) {
46 a.strictEqual(err.name, 'INVALID_ALIAS')
47 }
48})
49
50runner.test('err-invalid-definition: multi-character alias', function () {
51 const optionDefinitions = [
52 { name: 'one', alias: 'aa' }
53 ]
54 const argv = [ '--one', 'red' ]
55
56 try {
57 commandLineArgs(optionDefinitions, { argv })
58 a.fail()
59 } catch (err) {
60 a.strictEqual(err.name, 'INVALID_ALIAS')
61 }
62})
63
64runner.test('err-invalid-definition: invalid type values', function () {
65 const argv = [ '--one', 'something' ]
66 try {
67 commandLineArgs([ { name: 'one', type: 'string' } ], { argv })
68 a.fail()
69 } catch (err) {
70 a.strictEqual(err.name, 'INVALID_TYPE')
71 }
72
73 try {
74 commandLineArgs([ { name: 'one', type: 234 } ], { argv })
75 a.fail()
76 } catch (err) {
77 a.strictEqual(err.name, 'INVALID_TYPE')
78 }
79
80 try {
81 commandLineArgs([ { name: 'one', type: {} } ], { argv })
82 a.fail()
83 } catch (err) {
84 a.strictEqual(err.name, 'INVALID_TYPE')
85 }
86
87 a.doesNotThrow(function () {
88 commandLineArgs([ { name: 'one', type: function () {} } ], { argv })
89 }, /invalid/i)
90})
91
92runner.test('err-invalid-definition: value without option definition', function () {
93 const optionDefinitions = [
94 { name: 'one', type: Number }
95 ]
96
97 a.deepStrictEqual(
98 commandLineArgs(optionDefinitions, { argv: [ '--one', '1' ] }),
99 { one: 1 }
100 )
101
102 try {
103 commandLineArgs(optionDefinitions, { argv: [ '--one', '--two' ] })
104 a.fail()
105 } catch (err) {
106 a.strictEqual(err.name, 'UNKNOWN_OPTION')
107 }
108
109 try {
110 commandLineArgs(optionDefinitions, { argv: [ '--one', '2', '--two', 'two' ] })
111 a.fail()
112 } catch (err) {
113 a.strictEqual(err.name, 'UNKNOWN_OPTION')
114 }
115
116 try {
117 commandLineArgs(optionDefinitions, { argv: [ '-a', '2' ] })
118 a.fail()
119 } catch (err) {
120 a.strictEqual(err.name, 'UNKNOWN_OPTION')
121 }
122
123 try {
124 commandLineArgs(optionDefinitions, { argv: [ '-sdf' ] })
125 a.fail()
126 } catch (err) {
127 a.strictEqual(err.name, 'UNKNOWN_OPTION', 'getOpts')
128 }
129})
130
131runner.test('err-invalid-definition: duplicate name', function () {
132 const optionDefinitions = [
133 { name: 'colours' },
134 { name: 'colours' }
135 ]
136 const argv = [ '--colours', 'red' ]
137
138 try {
139 commandLineArgs(optionDefinitions, { argv })
140 a.fail()
141 } catch (err) {
142 a.strictEqual(err.name, 'DUPLICATE_NAME')
143 }
144})
145
146runner.test('err-invalid-definition: duplicate alias', function () {
147 const optionDefinitions = [
148 { name: 'one', alias: 'a' },
149 { name: 'two', alias: 'a' }
150 ]
151 const argv = [ '--one', 'red' ]
152
153 try {
154 commandLineArgs(optionDefinitions, { argv })
155 a.fail()
156 } catch (err) {
157 a.strictEqual(err.name, 'DUPLICATE_ALIAS')
158 }
159})
160
161runner.test('err-invalid-definition: multiple defaultOption', function () {
162 const optionDefinitions = [
163 { name: 'one', defaultOption: true },
164 { name: 'two', defaultOption: true }
165 ]
166 const argv = [ '--one', 'red' ]
167
168 try {
169 commandLineArgs(optionDefinitions, { argv })
170 a.fail()
171 } catch (err) {
172 a.strictEqual(err.name, 'DUPLICATE_DEFAULT_OPTION')
173 }
174})
175
176runner.test('err-invalid-defaultOption: defaultOption on a Boolean type')