arnaucube
arnaucube/socketioMEANseedPublic Self-hosted repository
socketioMEANseed/www/node_modules/optimist/test/usage.js
www/node_modules/optimist/test/usage.jsRaw
  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};