| 'use strict'; | |
| 
 | |
| var parse = require('../'); | |
| var test = require('tape'); | |
| 
 | |
| test('parse args', function (t) { | |
| 	t.deepEqual( | |
| 		parse(['--no-moo']), | |
| 		{ moo: false, _: [] }, | |
| 		'no' | |
| 	); | |
| 	t.deepEqual( | |
| 		parse(['-v', 'a', '-v', 'b', '-v', 'c']), | |
| 		{ v: ['a', 'b', 'c'], _: [] }, | |
| 		'multi' | |
| 	); | |
| 	t.end(); | |
| }); | |
| 
 | |
| test('comprehensive', function (t) { | |
| 	t.deepEqual( | |
| 		parse([ | |
| 			'--name=meowmers', 'bare', '-cats', 'woo', | |
| 			'-h', 'awesome', '--multi=quux', | |
| 			'--key', 'value', | |
| 			'-b', '--bool', '--no-meep', '--multi=baz', | |
| 			'--', '--not-a-flag', 'eek', | |
| 		]), | |
| 		{ | |
| 			c: true, | |
| 			a: true, | |
| 			t: true, | |
| 			s: 'woo', | |
| 			h: 'awesome', | |
| 			b: true, | |
| 			bool: true, | |
| 			key: 'value', | |
| 			multi: ['quux', 'baz'], | |
| 			meep: false, | |
| 			name: 'meowmers', | |
| 			_: ['bare', '--not-a-flag', 'eek'], | |
| 		} | |
| 	); | |
| 	t.end(); | |
| }); | |
| 
 | |
| test('flag boolean', function (t) { | |
| 	var argv = parse(['-t', 'moo'], { boolean: 't' }); | |
| 	t.deepEqual(argv, { t: true, _: ['moo'] }); | |
| 	t.deepEqual(typeof argv.t, 'boolean'); | |
| 	t.end(); | |
| }); | |
| 
 | |
| test('flag boolean value', function (t) { | |
| 	var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { | |
| 		boolean: ['t', 'verbose'], | |
| 		default: { verbose: true }, | |
| 	}); | |
| 
 | |
| 	t.deepEqual(argv, { | |
| 		verbose: false, | |
| 		t: true, | |
| 		_: ['moo'], | |
| 	}); | |
| 
 | |
| 	t.deepEqual(typeof argv.verbose, 'boolean'); | |
| 	t.deepEqual(typeof argv.t, 'boolean'); | |
| 	t.end(); | |
| }); | |
| 
 | |
| test('newlines in params', function (t) { | |
| 	var args = parse(['-s', 'X\nX']); | |
| 	t.deepEqual(args, { _: [], s: 'X\nX' }); | |
| 
 | |
| 	// reproduce in bash: | |
| 	// VALUE="new | |
| 	// line" | |
| 	// node program.js --s="$VALUE" | |
| 	args = parse(['--s=X\nX']); | |
| 	t.deepEqual(args, { _: [], s: 'X\nX' }); | |
| 	t.end(); | |
| }); | |
| 
 | |
| test('strings', function (t) { | |
| 	var s = parse(['-s', '0001234'], { string: 's' }).s; | |
| 	t.equal(s, '0001234'); | |
| 	t.equal(typeof s, 'string'); | |
| 
 | |
| 	var x = parse(['-x', '56'], { string: 'x' }).x; | |
| 	t.equal(x, '56'); | |
| 	t.equal(typeof x, 'string'); | |
| 	t.end(); | |
| }); | |
| 
 | |
| test('stringArgs', function (t) { | |
| 	var s = parse(['  ', '  '], { string: '_' })._; | |
| 	t.same(s.length, 2); | |
| 	t.same(typeof s[0], 'string'); | |
| 	t.same(s[0], '  '); | |
| 	t.same(typeof s[1], 'string'); | |
| 	t.same(s[1], '  '); | |
| 	t.end(); | |
| }); | |
| 
 | |
| test('empty strings', function (t) { | |
| 	var s = parse(['-s'], { string: 's' }).s; | |
| 	t.equal(s, ''); | |
| 	t.equal(typeof s, 'string'); | |
| 
 | |
| 	var str = parse(['--str'], { string: 'str' }).str; | |
| 	t.equal(str, ''); | |
| 	t.equal(typeof str, 'string'); | |
| 
 | |
| 	var letters = parse(['-art'], { | |
| 		string: ['a', 't'], | |
| 	}); | |
| 
 | |
| 	t.equal(letters.a, ''); | |
| 	t.equal(letters.r, true); | |
| 	t.equal(letters.t, ''); | |
| 
 | |
| 	t.end(); | |
| }); | |
| 
 | |
| test('string and alias', function (t) { | |
| 	var x = parse(['--str', '000123'], { | |
| 		string: 's', | |
| 		alias: { s: 'str' }, | |
| 	}); | |
| 
 | |
| 	t.equal(x.str, '000123'); | |
| 	t.equal(typeof x.str, 'string'); | |
| 	t.equal(x.s, '000123'); | |
| 	t.equal(typeof x.s, 'string'); | |
| 
 | |
| 	var y = parse(['-s', '000123'], { | |
| 		string: 'str', | |
| 		alias: { str: 's' }, | |
| 	}); | |
| 
 | |
| 	t.equal(y.str, '000123'); | |
| 	t.equal(typeof y.str, 'string'); | |
| 	t.equal(y.s, '000123'); | |
| 	t.equal(typeof y.s, 'string'); | |
| 
 | |
| 	var z = parse(['-s123'], { | |
| 		alias: { str: ['s', 'S'] }, | |
| 		string: ['str'], | |
| 	}); | |
| 
 | |
| 	t.deepEqual( | |
| 		z, | |
| 		{ _: [], s: '123', S: '123', str: '123' }, | |
| 		'opt.string works with multiple aliases' | |
| 	); | |
| 	t.end(); | |
| }); | |
| 
 | |
| test('slashBreak', function (t) { | |
| 	t.same( | |
| 		parse(['-I/foo/bar/baz']), | |
| 		{ I: '/foo/bar/baz', _: [] } | |
| 	); | |
| 	t.same( | |
| 		parse(['-xyz/foo/bar/baz']), | |
| 		{ x: true, y: true, z: '/foo/bar/baz', _: [] } | |
| 	); | |
| 	t.end(); | |
| }); | |
| 
 | |
| test('alias', function (t) { | |
| 	var argv = parse(['-f', '11', '--zoom', '55'], { | |
| 		alias: { z: 'zoom' }, | |
| 	}); | |
| 	t.equal(argv.zoom, 55); | |
| 	t.equal(argv.z, argv.zoom); | |
| 	t.equal(argv.f, 11); | |
| 	t.end(); | |
| }); | |
| 
 | |
| test('multiAlias', function (t) { | |
| 	var argv = parse(['-f', '11', '--zoom', '55'], { | |
| 		alias: { z: ['zm', 'zoom'] }, | |
| 	}); | |
| 	t.equal(argv.zoom, 55); | |
| 	t.equal(argv.z, argv.zoom); | |
| 	t.equal(argv.z, argv.zm); | |
| 	t.equal(argv.f, 11); | |
| 	t.end(); | |
| }); | |
| 
 | |
| test('nested dotted objects', function (t) { | |
| 	var argv = parse([ | |
| 		'--foo.bar', '3', '--foo.baz', '4', | |
| 		'--foo.quux.quibble', '5', '--foo.quux.o_O', | |
| 		'--beep.boop', | |
| 	]); | |
| 
 | |
| 	t.same(argv.foo, { | |
| 		bar: 3, | |
| 		baz: 4, | |
| 		quux: { | |
| 			quibble: 5, | |
| 			o_O: true, | |
| 		}, | |
| 	}); | |
| 	t.same(argv.beep, { boop: true }); | |
| 	t.end(); | |
| });
 |