/test/option_parser.coffee
CoffeeScript | 94 lines | 75 code | 16 blank | 3 comment | 1 complexity | d62616d99cb1fcf48c69a30b67aaeb46 MD5 | raw file
- # Option Parser
- # -------------
- # Ensure that the OptionParser handles arguments correctly.
- return unless require?
- {OptionParser} = require './../lib/coffeescript/optparse'
- flags = [
- ['-r', '--required [DIR]', 'desc required']
- ['-o', '--optional', 'desc optional']
- ['-l', '--list [FILES*]', 'desc list']
- ]
- banner = '''
- banner text
- '''
- opt = new OptionParser flags, banner
- test "basic arguments", ->
- args = ['one', 'two', 'three', '-r', 'dir']
- result = opt.parse args
- arrayEq args, result.arguments
- eq undefined, result.required
- test "boolean and parameterised options", ->
- result = opt.parse ['--optional', '-r', 'folder', 'one', 'two']
- ok result.optional
- eq 'folder', result.required
- arrayEq ['one', 'two'], result.arguments
- test "list options", ->
- result = opt.parse ['-l', 'one.txt', '-l', 'two.txt', 'three']
- arrayEq ['one.txt', 'two.txt'], result.list
- arrayEq ['three'], result.arguments
- test "-- and interesting combinations", ->
- result = opt.parse ['-o','-r','a','-r','b','-o','--','-a','b','--c','d']
- arrayEq ['-a', 'b', '--c', 'd'], result.arguments
- ok result.optional
- eq 'b', result.required
- args = ['--','-o','a','-r','c','-o','--','-a','arg0','-b','arg1']
- result = opt.parse args
- eq undefined, result.optional
- eq undefined, result.required
- arrayEq args[1..], result.arguments
- test "throw if multiple flags try to use the same short or long name", ->
- throws -> new OptionParser [
- ['-r', '--required [DIR]', 'required']
- ['-r', '--long', 'switch']
- ]
- throws -> new OptionParser [
- ['-a', '--append [STR]', 'append']
- ['-b', '--append', 'append with -b short opt']
- ]
- throws -> new OptionParser [
- ['--just-long', 'desc']
- ['--just-long', 'another desc']
- ]
- throws -> new OptionParser [
- ['-j', '--just-long', 'desc']
- ['--just-long', 'another desc']
- ]
- throws -> new OptionParser [
- ['--just-long', 'desc']
- ['-j', '--just-long', 'another desc']
- ]
- test "outputs expected help text", ->
- expectedBanner = '''
- banner text
- -r, --required desc required
- -o, --optional desc optional
- -l, --list desc list
- '''
- ok opt.help() is expectedBanner
- expected = [
- ''
- ' -r, --required desc required'
- ' -o, --optional desc optional'
- ' -l, --list desc list'
- ''
- ].join('\n')
- ok new OptionParser(flags).help() is expected