| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library parse_test; | 5 library parse_test; |
| 6 | 6 |
| 7 import 'package:unittest/unittest.dart'; | 7 import 'package:unittest/unittest.dart'; |
| 8 import 'package:args/args.dart'; | 8 import 'package:args/args.dart'; |
| 9 import 'utils.dart'; | 9 import 'utils.dart'; |
| 10 | 10 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 var args = parser.parse([]); | 46 var args = parser.parse([]); |
| 47 expect(args['verbose'], isFalse); | 47 expect(args['verbose'], isFalse); |
| 48 }); | 48 }); |
| 49 | 49 |
| 50 test('throws if given a value', () { | 50 test('throws if given a value', () { |
| 51 var parser = new ArgParser(); | 51 var parser = new ArgParser(); |
| 52 parser.addFlag('verbose'); | 52 parser.addFlag('verbose'); |
| 53 | 53 |
| 54 throwsFormat(parser, ['--verbose=true']); | 54 throwsFormat(parser, ['--verbose=true']); |
| 55 }); | 55 }); |
| 56 |
| 57 test('are case-sensitive', () { |
| 58 var parser = new ArgParser(); |
| 59 parser.addFlag('verbose'); |
| 60 parser.addFlag('Verbose'); |
| 61 var results = parser.parse(['--verbose']); |
| 62 expect(results['verbose'], isTrue); |
| 63 expect(results['Verbose'], isFalse); |
| 64 }); |
| 56 }); | 65 }); |
| 57 | 66 |
| 58 group('flags negated with "no-"', () { | 67 group('flags negated with "no-"', () { |
| 59 test('set the flag to false', () { | 68 test('set the flag to false', () { |
| 60 var parser = new ArgParser(); | 69 var parser = new ArgParser(); |
| 61 parser.addFlag('verbose'); | 70 parser.addFlag('verbose'); |
| 62 | 71 |
| 63 var args = parser.parse(['--no-verbose']); | 72 var args = parser.parse(['--no-verbose']); |
| 64 expect(args['verbose'], isFalse); | 73 expect(args['verbose'], isFalse); |
| 65 }); | 74 }); |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 }); | 297 }); |
| 289 | 298 |
| 290 test('throw if it has a value but the option is a flag', () { | 299 test('throw if it has a value but the option is a flag', () { |
| 291 var parser = new ArgParser(); | 300 var parser = new ArgParser(); |
| 292 parser.addFlag('apple', abbr: 'a'); | 301 parser.addFlag('apple', abbr: 'a'); |
| 293 parser.addFlag('banana', abbr: 'b'); | 302 parser.addFlag('banana', abbr: 'b'); |
| 294 | 303 |
| 295 // The '?!' means this can only be understood as '--apple b?!c'. | 304 // The '?!' means this can only be understood as '--apple b?!c'. |
| 296 throwsFormat(parser, ['-ab?!c']); | 305 throwsFormat(parser, ['-ab?!c']); |
| 297 }); | 306 }); |
| 307 |
| 308 test('are case-sensitive', () { |
| 309 var parser = new ArgParser(); |
| 310 parser.addFlag('file', abbr: 'f'); |
| 311 parser.addFlag('force', abbr: 'F'); |
| 312 var results = parser.parse(['-f']); |
| 313 expect(results['file'], isTrue); |
| 314 expect(results['force'], isFalse); |
| 315 }); |
| 298 }); | 316 }); |
| 299 | 317 |
| 300 group('options', () { | 318 group('options', () { |
| 301 test('are parsed if present', () { | 319 test('are parsed if present', () { |
| 302 var parser = new ArgParser(); | 320 var parser = new ArgParser(); |
| 303 parser.addOption('mode'); | 321 parser.addOption('mode'); |
| 304 var args = parser.parse(['--mode=release']); | 322 var args = parser.parse(['--mode=release']); |
| 305 expect(args['mode'], equals('release')); | 323 expect(args['mode'], equals('release')); |
| 306 }); | 324 }); |
| 307 | 325 |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 377 expect(args['define'], equals(['1','2'])); | 395 expect(args['define'], equals(['1','2'])); |
| 378 }); | 396 }); |
| 379 | 397 |
| 380 test('returns the default value for multi-valued arguments ' | 398 test('returns the default value for multi-valued arguments ' |
| 381 'if not explicitly set', () { | 399 'if not explicitly set', () { |
| 382 var parser = new ArgParser(); | 400 var parser = new ArgParser(); |
| 383 parser.addOption('define', defaultsTo: '0', allowMultiple: true); | 401 parser.addOption('define', defaultsTo: '0', allowMultiple: true); |
| 384 var args = parser.parse(['']); | 402 var args = parser.parse(['']); |
| 385 expect(args['define'], equals(['0'])); | 403 expect(args['define'], equals(['0'])); |
| 386 }); | 404 }); |
| 405 |
| 406 test('are case-sensitive', () { |
| 407 var parser = new ArgParser(); |
| 408 parser.addOption('verbose', defaultsTo: 'no'); |
| 409 parser.addOption('Verbose', defaultsTo: 'no'); |
| 410 var results = parser.parse(['--verbose', 'chatty']); |
| 411 expect(results['verbose'], equals('chatty')); |
| 412 expect(results['Verbose'], equals('no')); |
| 413 }); |
| 387 }); | 414 }); |
| 388 | 415 |
| 389 group('remaining args', () { | 416 group('remaining args', () { |
| 390 test('stops parsing args when a non-option-like arg is encountered', () { | 417 test('stops parsing args when a non-option-like arg is encountered', () { |
| 391 var parser = new ArgParser(); | 418 var parser = new ArgParser(); |
| 392 parser.addFlag('woof'); | 419 parser.addFlag('woof'); |
| 393 parser.addOption('meow'); | 420 parser.addOption('meow'); |
| 394 parser.addOption('tweet', defaultsTo: 'bird'); | 421 parser.addOption('tweet', defaultsTo: 'bird'); |
| 395 | 422 |
| 396 var results = parser.parse(['--woof', '--meow', 'v', 'not', 'option']); | 423 var results = parser.parse(['--woof', '--meow', 'v', 'not', 'option']); |
| 397 expect(results['woof'], isTrue); | 424 expect(results['woof'], isTrue); |
| 398 expect(results['meow'], equals('v')); | 425 expect(results['meow'], equals('v')); |
| 399 expect(results['tweet'], equals('bird')); | 426 expect(results['tweet'], equals('bird')); |
| 400 expect(results.rest, orderedEquals(['not', 'option'])); | 427 expect(results.rest, equals(['not', 'option'])); |
| 401 }); | 428 }); |
| 402 | 429 |
| 403 test('stops parsing at "--"', () { | 430 test('consumes "--" and stops', () { |
| 404 var parser = new ArgParser(); | 431 var parser = new ArgParser(); |
| 405 parser.addFlag('woof', defaultsTo: false); | 432 parser.addFlag('woof', defaultsTo: false); |
| 406 parser.addOption('meow', defaultsTo: 'kitty'); | 433 parser.addOption('meow', defaultsTo: 'kitty'); |
| 407 | 434 |
| 408 var results = parser.parse(['--woof', '--', '--meow']); | 435 var results = parser.parse(['--woof', '--', '--meow']); |
| 409 expect(results['woof'], isTrue); | 436 expect(results['woof'], isTrue); |
| 410 expect(results['meow'], equals('kitty')); | 437 expect(results['meow'], equals('kitty')); |
| 411 expect(results.rest, orderedEquals(['--meow'])); | 438 expect(results.rest, equals(['--meow'])); |
| 412 }); | 439 }); |
| 413 | 440 |
| 414 test('handles options with case-sensitivity', () { | 441 test('leaves "--" if not the first non-option', () { |
| 415 var parser = new ArgParser(); | 442 var parser = new ArgParser(); |
| 416 parser.addFlag('recurse', defaultsTo: false, abbr:'R'); | 443 parser.addFlag('woof'); |
| 417 var results = parser.parse(['-R']); | 444 |
| 418 expect(results['recurse'], isTrue); | 445 var results = parser.parse(['--woof', 'stop', '--', 'arg']); |
| 419 expect(results.rest, [ ]); | 446 expect(results['woof'], isTrue); |
| 420 throwsFormat(parser, ['-r']); | 447 expect(results.rest, equals(['stop', '--', 'arg'])); |
| 421 }); | 448 }); |
| 422 }); | 449 }); |
| 423 }); | 450 }); |
| 424 } | 451 } |
| OLD | NEW |