2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-05-28 16:00:53 +00:00
qpdf/libtests/qtest/arg_parser.test

131 lines
4.2 KiB
Perl

#!/usr/bin/env perl
require 5.008;
use warnings;
use strict;
chdir("arg_parser") or die "chdir testdir failed: $!\n";
unshift(@INC, '.');
require completion_helpers;
require TestDriver;
my $td = new TestDriver('arg_parser');
my @completion_tests = (
['', 0, 'bad-input-1'],
['', 1, 'bad-input-2'],
['', 2, 'bad-input-3'],
['arg_parser', 2, 'bad-input-4'],
['arg_parser ', undef, 'top'],
['arg_parser -', undef, 'top-arg'],
['arg_parser --po', undef, 'po'],
['arg_parser --potato ', undef, 'potato'],
['arg_parser --quack ', undef, 'quack'],
['arg_parser --quack -', undef, 'quack-'],
['arg_parser --quack x ', undef, 'quack-x'],
['arg_parser --quack x x ', undef, 'quack-x-x'],
['arg_parser --baaa -', undef, 'baaa'],
['arg_parser --baaa -- --', undef, 'second'],
['arg_parser @quack-xyz ', undef, 'quack-x-y-z'],
['arg_parser --quack \'user " password\' ', undef, 'quack-x'],
['arg_parser --quack \'user password\' ', undef, 'quack-x'],
['arg_parser --quack "user password" ', undef, 'quack-x'],
['arg_parser --quack "user pass\'word" ', undef, 'quack-x'],
['arg_parser --quack user\ password ', undef, 'quack-x'],
['arg_parser --sheep --', undef, 'sheep'],
);
foreach my $c (@completion_tests)
{
my ($cmd, $point, $description) = @$c;
my $out = "completion-$description.out";
my $zout = "completion-$description-zsh.out";
if (! -f $zout)
{
$zout = $out;
}
$td->runtest("bash completion: $description",
{$td->COMMAND =>
[@{bash_completion("arg_parser", $cmd, $point)}],
$td->FILTER => "perl filter-completion.pl $out"},
{$td->FILE => "$out", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("zsh completion: $description",
{$td->COMMAND =>
[@{zsh_completion("arg_parser", $cmd, $point)}],
$td->FILTER => "perl filter-completion.pl $zout"},
{$td->FILE => "$zout", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
}
my @arg_tests = (
['--potato', 0], # 0
['--oops', 2], # 1
['--version', 0], # 2
['--version --potato', 2], # 3
['--potato --version', 2], # 4
['--quack', 2], # 5
['--quack --', 0], # 6
['--quack 1 2 3 --', 0], # 7
['--potato --quack 1 2 3 --' . # 8
' --potato --quack a b c --' .
' --baaa --ram --', 0],
['--baaa --potato --', 2], # 9
['--baaa --ewe', 2], # 10
['--oink=baaa', 2], # 11
['--oink=sow', 0], # 12
['-oink=sow', 0], # 13
['@quack-xyz', 2], # 14
['@quack-xyz --', 0], # 15
['--salad', 2], # 16
['--salad=spinach', 0], # 17
['--sheep --ewe --', 0], # 18
);
for (my $i = 0; $i < scalar(@arg_tests); ++$i)
{
my ($args, $status) = @{$arg_tests[$i]};
$td->runtest("arg_tests $i",
{$td->COMMAND => "arg_parser $args"},
{$td->FILE => "args-$i.out", $td->EXIT_STATUS => $status},
$td->NORMALIZE_NEWLINES);
}
$td->runtest("exceptions",
{$td->COMMAND => "arg_parser exceptions"},
{$td->FILE => "exceptions.out", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("args from stdin",
{$td->COMMAND => 'echo --potato | arg_parser @-'},
{$td->FILE => "stdin.out", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
my @help_tests = (
'',
'=all',
'=--ewe',
'=quack',
);
foreach my $i (@help_tests)
{
my $out = $i;
$out =~ s/[=-]//g;
if ($out ne '')
{
$out = "-$out";
}
$td->runtest("--help$i",
{$td->COMMAND => "arg_parser --help$i"},
{$td->FILE => "help$out.out", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
}
$td->runtest("bad help option",
{$td->COMMAND => 'arg_parser --help=--oops'},
{$td->FILE => "help-bad.out", $td->EXIT_STATUS => 2},
$td->NORMALIZE_NEWLINES);
$td->report(3 + (2 * scalar(@completion_tests)) +
scalar(@arg_tests) + scalar(@help_tests));