Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(828)

Side by Side Diff: packages/args/test/command_parse_test.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « packages/args/test/args_test.dart ('k') | packages/args/test/command_runner_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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_parse_test;
6
7 import 'package:test/test.dart';
8 import 'package:args/args.dart';
9 import 'utils.dart';
10
11 void main() {
12 group('ArgParser.addCommand()', () {
13 test('creates a new ArgParser if none is given', () {
14 var parser = new ArgParser();
15 var command = parser.addCommand('install');
16 expect(parser.commands['install'], equals(command));
17 expect(command is ArgParser, isTrue);
18 });
19
20 test('uses the command parser if given one', () {
21 var parser = new ArgParser();
22 var command = new ArgParser();
23 var result = parser.addCommand('install', command);
24 expect(parser.commands['install'], equals(command));
25 expect(result, equals(command));
26 });
27
28 test('throws on a duplicate command name', () {
29 var parser = new ArgParser();
30 parser.addCommand('install');
31 throwsIllegalArg(() => parser.addCommand('install'));
32 });
33 });
34
35 group('ArgParser.parse()', () {
36 test('parses a command', () {
37 var parser = new ArgParser()..addCommand('install');
38
39 var args = parser.parse(['install']);
40
41 expect(args.command.name, equals('install'));
42 expect(args.rest, isEmpty);
43 });
44
45 test('parses a command option', () {
46 var parser = new ArgParser();
47 var command = parser.addCommand('install');
48 command.addOption('path');
49
50 var args = parser.parse(['install', '--path', 'some/path']);
51 expect(args.command['path'], equals('some/path'));
52 });
53
54 test('parses a parent solo option before the command', () {
55 var parser = new ArgParser()
56 ..addOption('mode', abbr: 'm')
57 ..addCommand('install');
58
59 var args = parser.parse(['-m', 'debug', 'install']);
60 expect(args['mode'], equals('debug'));
61 expect(args.command.name, equals('install'));
62 });
63
64 test('parses a parent solo option after the command', () {
65 var parser = new ArgParser()
66 ..addOption('mode', abbr: 'm')
67 ..addCommand('install');
68
69 var args = parser.parse(['install', '-m', 'debug']);
70 expect(args['mode'], equals('debug'));
71 expect(args.command.name, equals('install'));
72 });
73
74 test('parses a parent option before the command', () {
75 var parser = new ArgParser()
76 ..addFlag('verbose')
77 ..addCommand('install');
78
79 var args = parser.parse(['--verbose', 'install']);
80 expect(args['verbose'], isTrue);
81 expect(args.command.name, equals('install'));
82 });
83
84 test('parses a parent option after the command', () {
85 var parser = new ArgParser()
86 ..addFlag('verbose')
87 ..addCommand('install');
88
89 var args = parser.parse(['install', '--verbose']);
90 expect(args['verbose'], isTrue);
91 expect(args.command.name, equals('install'));
92 });
93
94 test('parses a parent negated option before the command', () {
95 var parser = new ArgParser()
96 ..addFlag('verbose', defaultsTo: true)
97 ..addCommand('install');
98
99 var args = parser.parse(['--no-verbose', 'install']);
100 expect(args['verbose'], isFalse);
101 expect(args.command.name, equals('install'));
102 });
103
104 test('parses a parent negated option after the command', () {
105 var parser = new ArgParser()
106 ..addFlag('verbose', defaultsTo: true)
107 ..addCommand('install');
108
109 var args = parser.parse(['install', '--no-verbose']);
110 expect(args['verbose'], isFalse);
111 expect(args.command.name, equals('install'));
112 });
113
114 test('parses a parent abbreviation before the command', () {
115 var parser = new ArgParser()
116 ..addFlag('debug', abbr: 'd')
117 ..addFlag('verbose', abbr: 'v')
118 ..addCommand('install');
119
120 var args = parser.parse(['-dv', 'install']);
121 expect(args['debug'], isTrue);
122 expect(args['verbose'], isTrue);
123 expect(args.command.name, equals('install'));
124 });
125
126 test('parses a parent abbreviation after the command', () {
127 var parser = new ArgParser()
128 ..addFlag('debug', abbr: 'd')
129 ..addFlag('verbose', abbr: 'v')
130 ..addCommand('install');
131
132 var args = parser.parse(['install', '-dv']);
133 expect(args['debug'], isTrue);
134 expect(args['verbose'], isTrue);
135 expect(args.command.name, equals('install'));
136 });
137
138 test('does not parse a solo command option before the command', () {
139 var parser = new ArgParser();
140 var command = parser.addCommand('install');
141 command.addOption('path', abbr: 'p');
142
143 throwsFormat(parser, ['-p', 'foo', 'install']);
144 });
145
146 test('does not parse a command option before the command', () {
147 var parser = new ArgParser();
148 var command = parser.addCommand('install');
149 command.addOption('path');
150
151 throwsFormat(parser, ['--path', 'foo', 'install']);
152 });
153
154 test('does not parse a command abbreviation before the command', () {
155 var parser = new ArgParser();
156 var command = parser.addCommand('install');
157 command.addFlag('debug', abbr: 'd');
158 command.addFlag('verbose', abbr: 'v');
159
160 throwsFormat(parser, ['-dv', 'install']);
161 });
162
163 test('assigns collapsed options to the proper command', () {
164 var parser = new ArgParser();
165 parser.addFlag('apple', abbr: 'a');
166 var command = parser.addCommand('cmd');
167 command.addFlag('banana', abbr: 'b');
168 var subcommand = command.addCommand('subcmd');
169 subcommand.addFlag('cherry', abbr: 'c');
170
171 var args = parser.parse(['cmd', 'subcmd', '-abc']);
172 expect(args['apple'], isTrue);
173 expect(args.command.name, equals('cmd'));
174 expect(args.command['banana'], isTrue);
175 expect(args.command.command.name, equals('subcmd'));
176 expect(args.command.command['cherry'], isTrue);
177 });
178
179 test('option is given to innermost command that can take it', () {
180 var parser = new ArgParser();
181 parser.addFlag('verbose');
182 parser.addCommand('cmd')
183 ..addFlag('verbose')
184 ..addCommand('subcmd');
185
186 var args = parser.parse(['cmd', 'subcmd', '--verbose']);
187 expect(args['verbose'], isFalse);
188 expect(args.command.name, equals('cmd'));
189 expect(args.command['verbose'], isTrue);
190 expect(args.command.command.name, equals('subcmd'));
191 });
192
193 test('remaining arguments are given to the innermost command', () {
194 var parser = new ArgParser();
195 parser.addCommand('cmd')..addCommand('subcmd');
196
197 var args = parser.parse(['cmd', 'subcmd', 'other', 'stuff']);
198 expect(args.command.name, equals('cmd'));
199 expect(args.rest, isEmpty);
200 expect(args.command.command.name, equals('subcmd'));
201 expect(args.command.rest, isEmpty);
202 expect(args.command.command.rest, equals(['other', 'stuff']));
203 });
204 });
205 }
OLDNEW
« no previous file with comments | « packages/args/test/args_test.dart ('k') | packages/args/test/command_runner_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698