capitano
Version:
Powerful, non opitionated command line parser for serious applications
120 lines (92 loc) • 3.34 kB
text/coffeescript
_ = require('lodash')
chai = require('chai')
expect = chai.expect
state = require('../lib/state')
Command = require('../lib/command')
Signature = require('../lib/signature')
settings = require('../lib/settings')
describe 'State:', ->
it 'should have a commands array', ->
expect(state.commands).to.be.an.instanceof(Array)
it 'should have a globalOptions array', ->
expect(state.globalOptions).to.be.an.instanceof(Array)
it 'should have a permissions object', ->
expect(_.isObject(state.permissions)).to.be.true
expect(_.isArray(state.permissions)).to.be.false
describe '#getMatchCommand()', ->
beforeEach ->
= new Command
signature: new Signature('foo <bar>')
action: _.noop
state.commands = []
state.commands.push()
it 'should return the command', (done) ->
state.getMatchCommand 'foo hello', (error, result) =>
expect(error).to.not.exist
expect(result).to.deep.equal()
done()
it 'should return undefined if no match', (done) ->
state.getMatchCommand 'bar baz foo', (error, result) ->
expect(error).to.not.exist
expect(result).to.be.undefined
done()
it 'should match variadic arguments', (done) ->
state.commands = []
command = new Command
signature: new Signature('help [command...]')
action: _.noop
state.commands.push(command)
state.getMatchCommand 'help foo bar', (error, result) ->
expect(error).to.not.exist
expect(result).to.deep.equal(command)
done()
it 'should match required stdin arguments', (done) ->
state.commands = []
command = new Command
signature: new Signature('foo <|bar>')
action: _.noop
state.commands.push(command)
state.getMatchCommand 'foo', (error, result) ->
expect(error).to.not.exist
expect(result).to.deep.equal(command)
done()
it 'should match optional stdin arguments', (done) ->
state.commands = []
command = new Command
signature: new Signature('foo [|bar]')
action: _.noop
state.commands.push(command)
state.getMatchCommand 'foo', (error, result) ->
expect(error).to.not.exist
expect(result).to.deep.equal(command)
done()
describe 'if wildcard command is defined', ->
beforeEach ->
= new Command
signature: new Signature(settings.signatures.wildcard)
action: _.noop
state.commands.push()
it 'should return that command if no match', (done) ->
state.getMatchCommand 'not defined command', (error, result) =>
expect(error).to.not.exist
expect(result).to.deep.equal()
done()
describe '#findCommandBySignature()', ->
beforeEach ->
state.commands = []
state.commands.push new Command
signature: new Signature('foo <bar>')
action: _.noop
state.commands.push new Command
signature: new Signature('bar <baz>')
action: _.noop
state.commands.push new Command
signature: new Signature('version')
action: _.noop
it 'should be able to find a command', ->
command = state.findCommandBySignature('version')
expect(command).to.be.an.instanceof(Command)
expect(command.signature.toString()).to.equal('version')
it 'should return undefined if not found', ->
command = state.findCommandBySignature('not defined command')
expect(command).to.be.undefined