Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | |
| 2 // for details. All rights reserved. Use of this source code is governed by a | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 library command_test; | |
| 6 | |
| 7 import 'package:unittest/unittest.dart'; | |
| 8 import 'package:args/args.dart'; | |
| 9 | |
| 10 main() { | |
| 11 group('ArgParser.addCommand()', () { | |
| 12 test('returns an ArgParser for the command', () { | |
|
nweiz
2013/01/11 00:06:06
This seems kind of pedantic. I don't think it's wo
Bob Nystrom
2013/01/11 17:59:49
Removed. I'm never sure whether or not "nominality
| |
| 13 var parser = new ArgParser(); | |
| 14 var command = parser.addCommand('install'); | |
| 15 expect(command, new isInstanceOf<ArgParser>()); | |
| 16 }); | |
| 17 | |
| 18 test('throws on a duplicate command name', () { | |
| 19 var parser = new ArgParser(); | |
| 20 parser.addCommand('install'); | |
| 21 throwsIllegalArg(() => parser.addCommand('install')); | |
| 22 }); | |
| 23 }); | |
| 24 | |
| 25 group('ArgParser.parse()', () { | |
| 26 test('parses a command', () { | |
| 27 var parser = new ArgParser(); | |
| 28 var command = parser.addCommand('install'); | |
| 29 | |
| 30 var args = parser.parse(['install']); | |
| 31 | |
| 32 expect(args.command, isNotNull); | |
|
nweiz
2013/01/11 00:06:06
This seems redundant with the expect below.
Bob Nystrom
2013/01/11 17:59:49
Removed. Made since at the time since this was the
| |
| 33 expect(args.command.name, equals('install')); | |
| 34 expect(args.rest, isEmpty); | |
| 35 }); | |
| 36 | |
| 37 test('parses a command option', () { | |
| 38 var parser = new ArgParser(); | |
| 39 var command = parser.addCommand('install'); | |
| 40 command.addOption('path'); | |
| 41 | |
| 42 var args = parser.parse(['install', '--path', 'some/path']); | |
| 43 expect(args.command['path'], equals('some/path')); | |
| 44 }); | |
| 45 | |
| 46 test('parses a parent solo option before the command', () { | |
| 47 var parser = new ArgParser(); | |
| 48 parser.addOption('mode', abbr: 'm'); | |
| 49 var command = parser.addCommand('install'); | |
| 50 | |
| 51 var args = parser.parse(['-m', 'debug', 'install']); | |
| 52 expect(args['mode'], equals('debug')); | |
| 53 expect(args.command.name, equals('install')); | |
| 54 }); | |
| 55 | |
| 56 test('parses a parent solo option after the command', () { | |
| 57 var parser = new ArgParser(); | |
| 58 parser.addOption('mode', abbr: 'm'); | |
| 59 var command = parser.addCommand('install'); | |
| 60 | |
| 61 var args = parser.parse(['install', '-m', 'debug']); | |
| 62 expect(args['mode'], equals('debug')); | |
| 63 expect(args.command.name, equals('install')); | |
| 64 }); | |
| 65 | |
| 66 test('parses a parent option before the command', () { | |
| 67 var parser = new ArgParser(); | |
| 68 parser.addFlag('verbose'); | |
| 69 var command = parser.addCommand('install'); | |
| 70 | |
| 71 var args = parser.parse(['--verbose', 'install']); | |
| 72 expect(args['verbose'], isTrue); | |
| 73 expect(args.command.name, equals('install')); | |
| 74 }); | |
| 75 | |
| 76 test('parses a parent option after the command', () { | |
| 77 var parser = new ArgParser(); | |
| 78 parser.addFlag('verbose'); | |
| 79 var command = parser.addCommand('install'); | |
| 80 | |
| 81 var args = parser.parse(['install', '--verbose']); | |
| 82 expect(args['verbose'], isTrue); | |
| 83 expect(args.command.name, equals('install')); | |
| 84 }); | |
| 85 | |
| 86 test('parses a parent negated option before the command', () { | |
| 87 var parser = new ArgParser(); | |
| 88 parser.addFlag('verbose', defaultsTo: true); | |
| 89 var command = parser.addCommand('install'); | |
| 90 | |
| 91 var args = parser.parse(['--no-verbose', 'install']); | |
| 92 expect(args['verbose'], isFalse); | |
| 93 expect(args.command.name, equals('install')); | |
| 94 }); | |
| 95 | |
| 96 test('parses a parent negated option after the command', () { | |
| 97 var parser = new ArgParser(); | |
| 98 parser.addFlag('verbose', defaultsTo: true); | |
| 99 var command = parser.addCommand('install'); | |
| 100 | |
| 101 var args = parser.parse(['install', '--no-verbose']); | |
| 102 expect(args['verbose'], isFalse); | |
| 103 expect(args.command.name, equals('install')); | |
| 104 }); | |
| 105 | |
| 106 test('parses a parent abbreviation before the command', () { | |
| 107 var parser = new ArgParser(); | |
| 108 parser.addFlag('debug', abbr: 'd'); | |
| 109 parser.addFlag('verbose', abbr: 'v'); | |
| 110 var command = parser.addCommand('install'); | |
| 111 | |
| 112 var args = parser.parse(['-dv', 'install']); | |
| 113 expect(args['debug'], isTrue); | |
| 114 expect(args['verbose'], isTrue); | |
| 115 expect(args.command.name, equals('install')); | |
| 116 }); | |
| 117 | |
| 118 test('parses a parent abbreviation after the command', () { | |
| 119 var parser = new ArgParser(); | |
| 120 parser.addFlag('debug', abbr: 'd'); | |
| 121 parser.addFlag('verbose', abbr: 'v'); | |
| 122 var command = parser.addCommand('install'); | |
| 123 | |
| 124 var args = parser.parse(['install', '-dv']); | |
| 125 expect(args['debug'], isTrue); | |
| 126 expect(args['verbose'], isTrue); | |
| 127 expect(args.command.name, equals('install')); | |
| 128 }); | |
| 129 | |
| 130 test('does not parse a solo command before the command', () { | |
|
nweiz
2013/01/11 00:06:06
"solo command" -> "solo command option"
Bob Nystrom
2013/01/11 17:59:49
Done.
| |
| 131 var parser = new ArgParser(); | |
| 132 var command = parser.addCommand('install'); | |
| 133 command.addOption('path', abbr: 'p'); | |
| 134 | |
| 135 throwsFormat(parser, ['-p', 'foo', 'install']); | |
| 136 }); | |
| 137 | |
| 138 test('does not parse a command option before the command', () { | |
| 139 var parser = new ArgParser(); | |
| 140 var command = parser.addCommand('install'); | |
| 141 command.addOption('path'); | |
| 142 | |
| 143 throwsFormat(parser, ['--path', 'foo', 'install']); | |
| 144 }); | |
| 145 | |
| 146 test('does not parse a command abbreviation before the command', () { | |
| 147 var parser = new ArgParser(); | |
| 148 var command = parser.addCommand('install'); | |
| 149 command.addFlag('debug', abbr: 'd'); | |
| 150 command.addFlag('verbose', abbr: 'v'); | |
| 151 | |
| 152 throwsFormat(parser, ['-dv', 'install']); | |
| 153 }); | |
| 154 | |
| 155 test('assigns collapsed options to the proper command', () { | |
| 156 var parser = new ArgParser(); | |
| 157 parser.addFlag('apple', abbr: 'a'); | |
| 158 var command = parser.addCommand('cmd'); | |
| 159 command.addFlag('banana', abbr: 'b'); | |
| 160 var subcommand = command.addCommand('subcmd'); | |
| 161 subcommand.addFlag('cherry', abbr: 'c'); | |
| 162 | |
| 163 var args = parser.parse(['cmd', 'subcmd', '-abc']); | |
| 164 expect(args['apple'], isTrue); | |
| 165 expect(args.command.name, equals('cmd')); | |
| 166 expect(args.command['banana'], isTrue); | |
| 167 expect(args.command.command.name, equals('subcmd')); | |
| 168 expect(args.command.command['cherry'], isTrue); | |
| 169 }); | |
| 170 | |
| 171 test('option is given to innermost command that can take it', () { | |
| 172 var parser = new ArgParser(); | |
| 173 parser.addFlag('verbose'); | |
| 174 var command = parser.addCommand('cmd'); | |
| 175 command.addFlag('verbose'); | |
| 176 var subcommand = command.addCommand('subcmd'); | |
| 177 | |
| 178 var args = parser.parse(['cmd', 'subcmd', '--verbose']); | |
| 179 expect(args['verbose'], isFalse); | |
| 180 expect(args.command.name, equals('cmd')); | |
| 181 expect(args.command['verbose'], isTrue); | |
| 182 expect(args.command.command.name, equals('subcmd')); | |
| 183 }); | |
| 184 }); | |
| 185 } | |
| 186 | |
| 187 throwsIllegalArg(function) { | |
| 188 expect(function, throwsArgumentError); | |
| 189 } | |
| 190 | |
| 191 throwsFormat(ArgParser parser, List<String> args) { | |
| 192 expect(() => parser.parse(args), throwsFormatException); | |
| 193 } | |
| OLD | NEW |