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 |