Getopt-Alt

 view release on metacpan or  search on metacpan

t/get_options.t  view on Meta::CPAN

#!/usr/bin/perl -w

use strict;
use warnings;
use List::Util qw/sum/;
use Test::More;
use Test::Warnings qw/warning/;
use Getopt::Alt qw/get_options/;

our $VERSION = 0.123;
my @data = data();

for my $data (@data) {
    for my $test ( @{ $data->{tests} } ) {
        local @ARGV = @{ $test->{argv} };

        if ( $test->{error} ) {
            my $error;
            my $warning = warning { eval { get_options( @{ $data->{args} } ) }; $error = $@; };
            $warning = '' if ref $warning eq 'ARRAY' && @$warning == 0;

            # error in windows where something is getting a permissions denied error
            $error = $error->[0] if ref $error eq 'ARRAY' && $error->[1] =~ /Permission denied/;

            like "$error", $test->{error}, "'$test->{name}': Fails as expected"
                or diag explain {
                    args => $data->{args},
                    ARGV => $test->{argv},
                    error => $error,
                    ERROR => "$error",
                    test => $test->{error}
                } and exit;
            like $warning, $test->{warning}, "'$test->{name}': Warns as expected"
                or diag explain {
                    args => $data->{args},
                    ARGV => $test->{argv},
                    warning => $warning,
                    WARNING => "$warning",
                    test => $test->{error}
                } and exit;
        }
        else {
            my $files = eval { get_options( @{ $data->{args} } ) };
            my $error = $@;
            ok !$error, "'$test->{name}': No errors" or diag "'$test->{name}' failed with: $error";
            is_deeply \@ARGV, $test->{results}, "'$test->{name}': Files returned correctly"
                or diag explain $files;
        }
    }
}

done_testing;

sub data {
    return (
        {
            args => [
                'test|t!',
            ],
            tests => [
                {
                    name    => 'Empty',
                    argv    => [],
                    results => [],
                },
                {
                    name    => 'with test',
                    argv    => [qw/-t -t/],
                    results => [],
                },
                {
                    name    => 'with file',
                    argv    => [qw/file/],
                    results => [qw/file/],
                },



( run in 3.129 seconds using v1.01-cache-2.11-cpan-81fc1098f69 )