Cron-Sequencer

 view release on metacpan or  search on metacpan

t/cli-parse_argv.t  view on Meta::CPAN

#!perl

use strict;
use warnings;

use Test::More;
use Test::Deep;
use Test::Fatal;
require DateTime;

use Cron::Sequencer::CLI qw(parse_argv calculate_start_end);

my $nowish = time;

{
    no warnings 'redefine';
    *DateTime::_core_time = sub { return $nowish };
}

my @today = calculate_start_end({ show => 'today' });

sub fake_pod2usage {
    die ["Called pod2usage", @_];
}

for (["no arguments", "",
      undef, 'exitval', 255],
     ["unknown arguments", "--bogus",
      qr/\AUnknown option: bogus\n\z/, 'exitval', 255, 'verbose', 1],
     ["--env and --hide-env together", "--hide-env file --env FOO=BAR",
      undef, 'exitval', 255,
      'message', "--env and --hide-env options can't be used together"],
     ["--env and --hide-env together (anywhere)",
      "--hide-env file1 -- file2 --env FOO=BAR",
      undef, 'exitval', 255,
      'message', "--env and --hide-env options can't be used together"],
     ["Output options aren't allowed after --",
      "--from 1 --to 11 -- --hide-env file",
      qr/\AUnknown option: hide-env\n\z/, 'exitval', 255, 'verbose', 1],
     ["--version isn't allowed after --",
      "file -- --version",
      qr/\AUnknown option: version\n\z/, 'exitval', 255, 'verbose', 1],
     ["--json isn't allowed after --",
      "file -- --json",
      qr/\AUnknown option: json\n\z/, 'exitval', 255, 'verbose', 1],
     ["bogus --json option", "--json=bogus",
      undef, 'exitval', 255, 'message', "Unknown --json option 'bogus'"],
     ["--json=split,seq", "--json=split,seq",
      undef, 'exitval', 255, 'message', "Can't use --json=seq with --json=split"],
     ["--json=seq --json=split", "--json=seq --json=split",
      undef, 'exitval', 255, 'message', "Can't use --json=seq with --json=split"],
 ) {
    my ($desc, $flat, $warn, @want) = @$_;
    my @args = split ' ', $flat;
    unshift @want, "Called pod2usage";

    my @warnings;

    cmp_deeply(exception {
        local $SIG{__WARN__} = sub {
            push @warnings, \@_;
        };
        parse_argv(\&fake_pod2usage, @args);
    }, \@want, "pod2usage called for $desc");
    if (defined $warn) {
        cmp_deeply(\@warnings, [[re($warn)]], "got expected warning from $desc");
    } else {
        cmp_deeply(\@warnings, [], "no warnings from $desc");



( run in 2.063 seconds using v1.01-cache-2.11-cpan-54e63673c56 )