Index: pkg/args/test/args_test.dart |
diff --git a/pkg/args/test/args_test.dart b/pkg/args/test/args_test.dart |
index d807291e04d840e5e3f36f85463462deba04e1b9..cf31cc26210fba5cca1a4e8646db401a6e3129d1 100644 |
--- a/pkg/args/test/args_test.dart |
+++ b/pkg/args/test/args_test.dart |
@@ -32,6 +32,24 @@ main() { |
var parser = new ArgParser(); |
throwsIllegalArg(() => parser.addFlag('flummox', abbr: 'flu')); |
}); |
+ |
+ test('throws ArgumentError if a flag name is invalid', () { |
+ var parser = new ArgParser(); |
+ |
+ for(var name in _INVALID_OPTIONS) { |
+ var reason = '${Error.safeToString(name)} is not valid'; |
+ throwsIllegalArg(() => parser.addFlag(name), reason: reason); |
+ } |
+ }); |
+ |
+ test('accepts valid flag names', () { |
+ var parser = new ArgParser(); |
+ |
+ for(var name in _VALID_OPTIONS) { |
+ var reason = '${Error.safeToString(name)} is valid'; |
+ expect(() => parser.addFlag(name), returnsNormally, reason: reason); |
+ } |
+ }); |
}); |
group('ArgParser.addOption()', () { |
@@ -58,6 +76,46 @@ main() { |
var parser = new ArgParser(); |
throwsIllegalArg(() => parser.addOption('flummox', abbr: 'flu')); |
}); |
+ |
+ test('throws ArgumentError if the abbreviation is empty', () { |
+ var parser = new ArgParser(); |
+ throwsIllegalArg(() => parser.addOption('flummox', abbr: '')); |
+ }); |
+ |
+ test('throws ArgumentError if the abbreviation is an invalid value', () { |
+ var parser = new ArgParser(); |
+ for(var name in _INVALID_OPTIONS.where((v) => v != null)) { |
+ throwsIllegalArg(() => parser.addOption('flummox', abbr: name)); |
+ } |
+ }); |
+ |
+ test('throws ArgumentError if the abbreviation is a dash', () { |
+ var parser = new ArgParser(); |
+ throwsIllegalArg(() => parser.addOption('flummox', abbr: '-')); |
+ }); |
+ |
+ test('allows explict null value for "abbr"', () { |
+ var parser = new ArgParser(); |
+ expect(() => parser.addOption('flummox', abbr: null), returnsNormally); |
+ }); |
+ |
+ test('throws ArgumentError if an option name is invalid', () { |
+ var parser = new ArgParser(); |
+ |
+ for(var name in _INVALID_OPTIONS) { |
+ var reason = '${Error.safeToString(name)} is not valid'; |
+ throwsIllegalArg(() => parser.addOption(name), reason: reason); |
+ } |
+ }); |
+ |
+ test('accepts valid option names', () { |
+ var parser = new ArgParser(); |
+ |
+ for(var name in _VALID_OPTIONS) { |
+ var reason = '${Error.safeToString(name)} is valid'; |
+ expect(() => parser.addOption(name), returnsNormally, reason: reason); |
+ } |
+ }); |
}); |
group('ArgParser.getDefault()', () { |
@@ -155,10 +213,33 @@ main() { |
}); |
} |
-throwsIllegalArg(function) { |
- expect(function, throwsArgumentError); |
+throwsIllegalArg(function, {String reason: null}) { |
+ expect(function, throwsArgumentError, reason: reason); |
} |
throwsFormat(ArgParser parser, List<String> args) { |
expect(() => parser.parse(args), throwsFormatException); |
} |
+ |
+const _INVALID_OPTIONS = const [ |
+ ' ', '', '-', '--', '--foo', |
+ ' with space', |
+ 'with\ttab', |
+ 'with\rcarriage\rreturn', |
+ 'with\nline\nfeed', |
+ "'singlequotes'", |
+ '"doublequotes"', |
+ 'back\\slash', |
+ 'forward/slash' |
+]; |
+ |
+const _VALID_OPTIONS = const [ |
+ 'a' // one char |
+ 'contains-dash', |
+ 'contains_underscore', |
+ 'ends-with-dash-', |
+ 'contains--doubledash--', |
+ '1starts-with-number', |
+ 'contains-a-1number', |
+ 'ends-with-a-number8' |
+]; |