1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
use Test::More;
use Test::Exception;
use lib 'lib';
use lib '../lib';
use Getopt::ArgParse;
$common_parser = Getopt::ArgParse->new_parser();
$common_parser->add_argument(
'--dry-run',
type => 'Bool',
);
$parser = Getopt::ArgParse->new_parser();
$parser->add_arguments(
[ '--foo' ],
);
$parser->add_subparsers();
$sp = $parser->add_parser('list');
$sp->copy_args($common_parser);
$sp = $parser->add_parser('copy');
$sp->copy_args($common_parser);
$n = $parser->parse_args('list', '--dry-run');
ok($n->dry_run, 'dry-run');
$n = $parser->parse_args('copy', '');
ok($n->no_dry_run, 'no dry-run');
throws_ok(
sub { $parser->parse_args('--dry-run'); },
qr/Unknown option: dry-run/,
'unknown option',
);
# copy parsers
$parser1 = Getopt::ArgParse->new_parser(
prog => 'parser1',
);
$parser1->copy_parsers($parser);
throws_ok(
sub { $parser1->parse_args('--foo 123'); },
qr/Unknown option: foo/,
'unknown option: foo',
);
$n = $parser1->parse_args('list', '--dry-run');
ok($n->dry_run, 'parse1: dry-run');
$n = $parser1->parse_args('copy', '');
ok($n->no_dry_run, 'parse1: no dry-run');
# copy parsers
$parser2 = Getopt::ArgParse->new_parser(
prog => 'parser2',
parents => [ $parser ],
);
$n = $parser2->parse_args('list', '--dry-run');
ok($n->dry_run, 'parse2: dry-run');
$n = $parser2->parse_args('copy', '');
ok($n->no_dry_run, 'parse2: no dry-run');
done_testing;
|