react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / handlebars / node_modules / uglify-js / node_modules / optimist / test / usage.js
80742 viewsvar Hash = require('hashish');1var optimist = require('../index');2var test = require('tap').test;34test('usageFail', function (t) {5var r = checkUsage(function () {6return optimist('-x 10 -z 20'.split(' '))7.usage('Usage: $0 -x NUM -y NUM')8.demand(['x','y'])9.argv;10});11t.same(12r.result,13{ x : 10, z : 20, _ : [], $0 : './usage' }14);1516t.same(17r.errors.join('\n').split(/\n+/),18[19'Usage: ./usage -x NUM -y NUM',20'Options:',21' -x [required]',22' -y [required]',23'Missing required arguments: y',24]25);26t.same(r.logs, []);27t.ok(r.exit);28t.end();29});303132test('usagePass', function (t) {33var r = checkUsage(function () {34return optimist('-x 10 -y 20'.split(' '))35.usage('Usage: $0 -x NUM -y NUM')36.demand(['x','y'])37.argv;38});39t.same(r, {40result : { x : 10, y : 20, _ : [], $0 : './usage' },41errors : [],42logs : [],43exit : false,44});45t.end();46});4748test('checkPass', function (t) {49var r = checkUsage(function () {50return optimist('-x 10 -y 20'.split(' '))51.usage('Usage: $0 -x NUM -y NUM')52.check(function (argv) {53if (!('x' in argv)) throw 'You forgot about -x';54if (!('y' in argv)) throw 'You forgot about -y';55})56.argv;57});58t.same(r, {59result : { x : 10, y : 20, _ : [], $0 : './usage' },60errors : [],61logs : [],62exit : false,63});64t.end();65});6667test('checkFail', function (t) {68var r = checkUsage(function () {69return optimist('-x 10 -z 20'.split(' '))70.usage('Usage: $0 -x NUM -y NUM')71.check(function (argv) {72if (!('x' in argv)) throw 'You forgot about -x';73if (!('y' in argv)) throw 'You forgot about -y';74})75.argv;76});7778t.same(79r.result,80{ x : 10, z : 20, _ : [], $0 : './usage' }81);8283t.same(84r.errors.join('\n').split(/\n+/),85[86'Usage: ./usage -x NUM -y NUM',87'You forgot about -y'88]89);9091t.same(r.logs, []);92t.ok(r.exit);93t.end();94});9596test('checkCondPass', function (t) {97function checker (argv) {98return 'x' in argv && 'y' in argv;99}100101var r = checkUsage(function () {102return optimist('-x 10 -y 20'.split(' '))103.usage('Usage: $0 -x NUM -y NUM')104.check(checker)105.argv;106});107t.same(r, {108result : { x : 10, y : 20, _ : [], $0 : './usage' },109errors : [],110logs : [],111exit : false,112});113t.end();114});115116test('checkCondFail', function (t) {117function checker (argv) {118return 'x' in argv && 'y' in argv;119}120121var r = checkUsage(function () {122return optimist('-x 10 -z 20'.split(' '))123.usage('Usage: $0 -x NUM -y NUM')124.check(checker)125.argv;126});127128t.same(129r.result,130{ x : 10, z : 20, _ : [], $0 : './usage' }131);132133t.same(134r.errors.join('\n').split(/\n+/).join('\n'),135'Usage: ./usage -x NUM -y NUM\n'136+ 'Argument check failed: ' + checker.toString()137);138139t.same(r.logs, []);140t.ok(r.exit);141t.end();142});143144test('countPass', function (t) {145var r = checkUsage(function () {146return optimist('1 2 3 --moo'.split(' '))147.usage('Usage: $0 [x] [y] [z] {OPTIONS}')148.demand(3)149.argv;150});151t.same(r, {152result : { _ : [ '1', '2', '3' ], moo : true, $0 : './usage' },153errors : [],154logs : [],155exit : false,156});157t.end();158});159160test('countFail', function (t) {161var r = checkUsage(function () {162return optimist('1 2 --moo'.split(' '))163.usage('Usage: $0 [x] [y] [z] {OPTIONS}')164.demand(3)165.argv;166});167t.same(168r.result,169{ _ : [ '1', '2' ], moo : true, $0 : './usage' }170);171172t.same(173r.errors.join('\n').split(/\n+/),174[175'Usage: ./usage [x] [y] [z] {OPTIONS}',176'Not enough non-option arguments: got 2, need at least 3',177]178);179180t.same(r.logs, []);181t.ok(r.exit);182t.end();183});184185test('defaultSingles', function (t) {186var r = checkUsage(function () {187return optimist('--foo 50 --baz 70 --powsy'.split(' '))188.default('foo', 5)189.default('bar', 6)190.default('baz', 7)191.argv192;193});194t.same(r.result, {195foo : '50',196bar : 6,197baz : '70',198powsy : true,199_ : [],200$0 : './usage',201});202t.end();203});204205test('defaultAliases', function (t) {206var r = checkUsage(function () {207return optimist('')208.alias('f', 'foo')209.default('f', 5)210.argv211;212});213t.same(r.result, {214f : '5',215foo : '5',216_ : [],217$0 : './usage',218});219t.end();220});221222test('defaultHash', function (t) {223var r = checkUsage(function () {224return optimist('--foo 50 --baz 70'.split(' '))225.default({ foo : 10, bar : 20, quux : 30 })226.argv227;228});229t.same(r.result, {230_ : [],231$0 : './usage',232foo : 50,233baz : 70,234bar : 20,235quux : 30,236});237t.end();238});239240test('rebase', function (t) {241t.equal(242optimist.rebase('/home/substack', '/home/substack/foo/bar/baz'),243'./foo/bar/baz'244);245t.equal(246optimist.rebase('/home/substack/foo/bar/baz', '/home/substack'),247'../../..'248);249t.equal(250optimist.rebase('/home/substack/foo', '/home/substack/pow/zoom.txt'),251'../pow/zoom.txt'252);253t.end();254});255256function checkUsage (f) {257258var exit = false;259260process._exit = process.exit;261process._env = process.env;262process._argv = process.argv;263264process.exit = function (t) { exit = true };265process.env = Hash.merge(process.env, { _ : 'node' });266process.argv = [ './usage' ];267268var errors = [];269var logs = [];270271console._error = console.error;272console.error = function (msg) { errors.push(msg) };273console._log = console.log;274console.log = function (msg) { logs.push(msg) };275276var result = f();277278process.exit = process._exit;279process.env = process._env;280process.argv = process._argv;281282console.error = console._error;283console.log = console._log;284285return {286errors : errors,287logs : logs,288exit : exit,289result : result,290};291};292293294