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

Unified Diff: pkg/args/test/trailing_options_test.dart

Issue 260963007: Move allowTrailingOptions into ArgParser. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Revise and bump package versions. Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: pkg/args/test/trailing_options_test.dart
diff --git a/pkg/args/test/trailing_options_test.dart b/pkg/args/test/trailing_options_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..2ee860ca2f56b589d579a388139c8c236db55d38
--- /dev/null
+++ b/pkg/args/test/trailing_options_test.dart
@@ -0,0 +1,100 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library trailing_options_test;
+
+import 'package:unittest/unittest.dart';
+import 'package:args/args.dart';
+
+void main() {
+ test('allowTrailingOptions defaults to false', () {
+ var parser = new ArgParser();
+ expect(parser.allowTrailingOptions, isFalse);
+ });
+
+ group('when trailing options are allowed', () {
+ var parser;
+ setUp(() {
+ parser = new ArgParser(allowTrailingOptions: true);
+ });
+
+ void expectThrows(List<String> args) =>
+ expect(() => parser.parse(args), throwsFormatException,
+ reason: "with allowTrailingOptions: true");
+
+ test('collects non-options in rest', () {
+ parser.addFlag('flag');
+ parser.addOption('opt', abbr: 'o');
+ var results = parser.parse(['a', '--flag', 'b', '-o', 'value', 'c']);
+ expect(results['flag'], isTrue);
+ expect(results['opt'], equals('value'));
+ expect(results.rest, equals(['a', 'b', 'c']));
+ });
+
+ test('stops parsing options at "--"', () {
+ parser.addFlag('flag');
+ parser.addOption('opt', abbr: 'o');
+ var results = parser.parse(['a', '--flag', '--', '-ovalue', 'c']);
+ expect(results['flag'], isTrue);
+ expect(results.rest, equals(['a', '-ovalue', 'c']));
+ });
+
+ test('only consumes first "--"', () {
+ parser.addFlag('flag', abbr: 'f');
+ parser.addOption('opt', abbr: 'o');
+ var results = parser.parse(['a', '--', 'b', '--', 'c']);
+ expect(results.rest, equals(['a', 'b', '--', 'c']));
+ });
+
+ test('parses a trailing flag', () {
+ parser.addFlag('flag');
+ var results = parser.parse(['arg', '--flag']);
+
+ expect(results['flag'], isTrue);
+ expect(results.rest, equals(['arg']));
+ });
+
+ test('throws on a trailing option missing its value', () {
+ parser.addOption('opt');
+ expectThrows(['arg', '--opt']);
+ });
+
+ test('parses a trailing option', () {
+ parser.addOption('opt');
+ var results = parser.parse(['arg', '--opt', 'v']);
+ expect(results['opt'], equals('v'));
+ expect(results.rest, equals(['arg']));
+ });
+
+ test('throws on a trailing unknown flag', () {
+ expectThrows(['arg', '--xflag']);
+ });
+
+ test('throws on a trailing unknown option and value', () {
+ expectThrows(['arg', '--xopt', 'v']);
+ });
+
+ test('throws on a command', () {
+ parser.addCommand('com');
+ expectThrows(['arg', 'com']);
+ });
+ });
+
+ test("uses the innermost command's trailing options behavior", () {
+ var parser = new ArgParser(allowTrailingOptions: true);
+ parser.addFlag('flag', abbr: 'f');
+ var command = parser.addCommand('cmd',
+ new ArgParser(allowTrailingOptions: false));
+ command.addFlag('verbose', abbr: 'v');
+
+ var results = parser.parse(['a', '-f', 'b']);
+ expect(results['flag'], isTrue);
+ expect(results.rest, equals(['a', 'b']));
+
+ results = parser.parse(['cmd', '-f', 'a', '-v', '--unknown']);
+ expect(results['flag'], isTrue); // Not trailing.
+ expect(results.command['verbose'], isFalse);
+ expect(results.command.rest, equals(['a', '-v', '--unknown']));
+ });
+}

Powered by Google App Engine
This is Rietveld 408576698