1 var Hash = require('hashish');
2 var optimist = require('../index');
3 var test = require('tap').test;
5 test('usageFail', function (t) {
6 var r = checkUsage(function () {
7 return optimist('-x 10 -z 20'.split(' '))
8 .usage('Usage: $0 -x NUM -y NUM')
14 { x : 10, z : 20, _ : [], $0 : './usage' }
18 r.errors.join('\n').split(/\n+/),
20 'Usage: ./usage -x NUM -y NUM',
24 'Missing required arguments: y',
33 test('usagePass', function (t) {
34 var r = checkUsage(function () {
35 return optimist('-x 10 -y 20'.split(' '))
36 .usage('Usage: $0 -x NUM -y NUM')
41 result : { x : 10, y : 20, _ : [], $0 : './usage' },
49 test('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';
60 result : { x : 10, y : 20, _ : [], $0 : './usage' },
68 test('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';
81 { x : 10, z : 20, _ : [], $0 : './usage' }
85 r.errors.join('\n').split(/\n+/),
87 'Usage: ./usage -x NUM -y NUM',
97 test('checkCondPass', function (t) {
98 function checker (argv) {
99 return 'x' in argv && 'y' in argv;
102 var r = checkUsage(function () {
103 return optimist('-x 10 -y 20'.split(' '))
104 .usage('Usage: $0 -x NUM -y NUM')
109 result : { x : 10, y : 20, _ : [], $0 : './usage' },
117 test('checkCondFail', function (t) {
118 function checker (argv) {
119 return 'x' in argv && 'y' in argv;
122 var r = checkUsage(function () {
123 return optimist('-x 10 -z 20'.split(' '))
124 .usage('Usage: $0 -x NUM -y NUM')
131 { x : 10, z : 20, _ : [], $0 : './usage' }
135 r.errors.join('\n').split(/\n+/).join('\n'),
136 'Usage: ./usage -x NUM -y NUM\n'
137 + 'Argument check failed: ' + checker.toString()
145 test('countPass', function (t) {
146 var r = checkUsage(function () {
147 return optimist('1 2 3 --moo'.split(' '))
148 .usage('Usage: $0 [x] [y] [z] {OPTIONS}')
153 result : { _ : [ '1', '2', '3' ], moo : true, $0 : './usage' },
161 test('countFail', function (t) {
162 var r = checkUsage(function () {
163 return optimist('1 2 --moo'.split(' '))
164 .usage('Usage: $0 [x] [y] [z] {OPTIONS}')
170 { _ : [ '1', '2' ], moo : true, $0 : './usage' }
174 r.errors.join('\n').split(/\n+/),
176 'Usage: ./usage [x] [y] [z] {OPTIONS}',
177 'Not enough non-option arguments: got 2, need at least 3',
186 test('defaultSingles', function (t) {
187 var r = checkUsage(function () {
188 return optimist('--foo 50 --baz 70 --powsy'.split(' '))
206 test('defaultAliases', function (t) {
207 var r = checkUsage(function () {
223 test('defaultHash', function (t) {
224 var r = checkUsage(function () {
225 return optimist('--foo 50 --baz 70'.split(' '))
226 .default({ foo : 10, bar : 20, quux : 30 })
241 test('rebase', function (t) {
243 optimist.rebase('/home/substack', '/home/substack/foo/bar/baz'),
247 optimist.rebase('/home/substack/foo/bar/baz', '/home/substack'),
251 optimist.rebase('/home/substack/foo', '/home/substack/pow/zoom.txt'),
257 function checkUsage (f) {
261 process._exit = process.exit;
262 process._env = process.env;
263 process._argv = process.argv;
265 process.exit = function (t) { exit = true };
266 process.env = Hash.merge(process.env, { _ : 'node' });
267 process.argv = [ './usage' ];
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) };
279 process.exit = process._exit;
280 process.env = process._env;
281 process.argv = process._argv;
283 console.error = console._error;
284 console.log = console._log;