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;