UNPKG

6.79 kBJavaScriptView Raw
1var Hash = require('hashish');
2var optimist = require('../index');
3var test = require('tap').test;
4
5test('usageFail', function (t) {
6 var r = checkUsage(function () {
7 return optimist('-x 10 -z 20'.split(' '))
8 .usage('Usage: $0 -x NUM -y NUM')
9 .demand(['x','y'])
10 .argv;
11 });
12 t.same(
13 r.result,
14 { x : 10, z : 20, _ : [], $0 : './usage' }
15 );
16
17 t.same(
18 r.errors.join('\n').split(/\n+/),
19 [
20 'Usage: ./usage -x NUM -y NUM',
21 'Options:',
22 ' -x [required]',
23 ' -y [required]',
24 'Missing required arguments: y',
25 ]
26 );
27 t.same(r.logs, []);
28 t.ok(r.exit);
29 t.end();
30});
31
32
33test('usagePass', function (t) {
34 var r = checkUsage(function () {
35 return optimist('-x 10 -y 20'.split(' '))
36 .usage('Usage: $0 -x NUM -y NUM')
37 .demand(['x','y'])
38 .argv;
39 });
40 t.same(r, {
41 result : { x : 10, y : 20, _ : [], $0 : './usage' },
42 errors : [],
43 logs : [],
44 exit : false,
45 });
46 t.end();
47});
48
49test('checkPass', function (t) {
50 var r = checkUsage(function () {
51 return optimist('-x 10 -y 20'.split(' '))
52 .usage('Usage: $0 -x NUM -y NUM')
53 .check(function (argv) {
54 if (!('x' in argv)) throw 'You forgot about -x';
55 if (!('y' in argv)) throw 'You forgot about -y';
56 })
57 .argv;
58 });
59 t.same(r, {
60 result : { x : 10, y : 20, _ : [], $0 : './usage' },
61 errors : [],
62 logs : [],
63 exit : false,
64 });
65 t.end();
66});
67
68test('checkFail', function (t) {
69 var r = checkUsage(function () {
70 return optimist('-x 10 -z 20'.split(' '))
71 .usage('Usage: $0 -x NUM -y NUM')
72 .check(function (argv) {
73 if (!('x' in argv)) throw 'You forgot about -x';
74 if (!('y' in argv)) throw 'You forgot about -y';
75 })
76 .argv;
77 });
78
79 t.same(
80 r.result,
81 { x : 10, z : 20, _ : [], $0 : './usage' }
82 );
83
84 t.same(
85 r.errors.join('\n').split(/\n+/),
86 [
87 'Usage: ./usage -x NUM -y NUM',
88 'You forgot about -y'
89 ]
90 );
91
92 t.same(r.logs, []);
93 t.ok(r.exit);
94 t.end();
95});
96
97test('checkCondPass', function (t) {
98 function checker (argv) {
99 return 'x' in argv && 'y' in argv;
100 }
101
102 var r = checkUsage(function () {
103 return optimist('-x 10 -y 20'.split(' '))
104 .usage('Usage: $0 -x NUM -y NUM')
105 .check(checker)
106 .argv;
107 });
108 t.same(r, {
109 result : { x : 10, y : 20, _ : [], $0 : './usage' },
110 errors : [],
111 logs : [],
112 exit : false,
113 });
114 t.end();
115});
116
117test('checkCondFail', function (t) {
118 function checker (argv) {
119 return 'x' in argv && 'y' in argv;
120 }
121
122 var r = checkUsage(function () {
123 return optimist('-x 10 -z 20'.split(' '))
124 .usage('Usage: $0 -x NUM -y NUM')
125 .check(checker)
126 .argv;
127 });
128
129 t.same(
130 r.result,
131 { x : 10, z : 20, _ : [], $0 : './usage' }
132 );
133
134 t.same(
135 r.errors.join('\n').split(/\n+/).join('\n'),
136 'Usage: ./usage -x NUM -y NUM\n'
137 + 'Argument check failed: ' + checker.toString()
138 );
139
140 t.same(r.logs, []);
141 t.ok(r.exit);
142 t.end();
143});
144
145test('countPass', function (t) {
146 var r = checkUsage(function () {
147 return optimist('1 2 3 --moo'.split(' '))
148 .usage('Usage: $0 [x] [y] [z] {OPTIONS}')
149 .demand(3)
150 .argv;
151 });
152 t.same(r, {
153 result : { _ : [ '1', '2', '3' ], moo : true, $0 : './usage' },
154 errors : [],
155 logs : [],
156 exit : false,
157 });
158 t.end();
159});
160
161test('countFail', function (t) {
162 var r = checkUsage(function () {
163 return optimist('1 2 --moo'.split(' '))
164 .usage('Usage: $0 [x] [y] [z] {OPTIONS}')
165 .demand(3)
166 .argv;
167 });
168 t.same(
169 r.result,
170 { _ : [ '1', '2' ], moo : true, $0 : './usage' }
171 );
172
173 t.same(
174 r.errors.join('\n').split(/\n+/),
175 [
176 'Usage: ./usage [x] [y] [z] {OPTIONS}',
177 'Not enough non-option arguments: got 2, need at least 3',
178 ]
179 );
180
181 t.same(r.logs, []);
182 t.ok(r.exit);
183 t.end();
184});
185
186test('defaultSingles', function (t) {
187 var r = checkUsage(function () {
188 return optimist('--foo 50 --baz 70 --powsy'.split(' '))
189 .default('foo', 5)
190 .default('bar', 6)
191 .default('baz', 7)
192 .argv
193 ;
194 });
195 t.same(r.result, {
196 foo : '50',
197 bar : 6,
198 baz : '70',
199 powsy : true,
200 _ : [],
201 $0 : './usage',
202 });
203 t.end();
204});
205
206test('defaultAliases', function (t) {
207 var r = checkUsage(function () {
208 return optimist('')
209 .alias('f', 'foo')
210 .default('f', 5)
211 .argv
212 ;
213 });
214 t.same(r.result, {
215 f : '5',
216 foo : '5',
217 _ : [],
218 $0 : './usage',
219 });
220 t.end();
221});
222
223test('defaultHash', function (t) {
224 var r = checkUsage(function () {
225 return optimist('--foo 50 --baz 70'.split(' '))
226 .default({ foo : 10, bar : 20, quux : 30 })
227 .argv
228 ;
229 });
230 t.same(r.result, {
231 _ : [],
232 $0 : './usage',
233 foo : 50,
234 baz : 70,
235 bar : 20,
236 quux : 30,
237 });
238 t.end();
239});
240
241test('rebase', function (t) {
242 t.equal(
243 optimist.rebase('/home/substack', '/home/substack/foo/bar/baz'),
244 './foo/bar/baz'
245 );
246 t.equal(
247 optimist.rebase('/home/substack/foo/bar/baz', '/home/substack'),
248 '../../..'
249 );
250 t.equal(
251 optimist.rebase('/home/substack/foo', '/home/substack/pow/zoom.txt'),
252 '../pow/zoom.txt'
253 );
254 t.end();
255});
256
257function checkUsage (f) {
258
259 var exit = false;
260
261 process._exit = process.exit;
262 process._env = process.env;
263 process._argv = process.argv;
264
265 process.exit = function (t) { exit = true };
266 process.env = Hash.merge(process.env, { _ : 'node' });
267 process.argv = [ './usage' ];
268
269 var errors = [];
270 var logs = [];
271
272 console._error = console.error;
273 console.error = function (msg) { errors.push(msg) };
274 console._log = console.log;
275 console.log = function (msg) { logs.push(msg) };
276
277 var result = f();
278
279 process.exit = process._exit;
280 process.env = process._env;
281 process.argv = process._argv;
282
283 console.error = console._error;
284 console.log = console._log;
285
286 return {
287 errors : errors,
288 logs : logs,
289 exit : exit,
290 result : result,
291 };
292};