CLI-Simple

 view release on metacpan or  search on metacpan

t/04-cli-simple-help.t  view on Meta::CPAN

#!/usr/bin/env perl

# Test::Exit must be compiled before other code that calls exit
use English qw(-no_match_vars);
use Test::Exit;
use Test::More;

use lib 't/lib';

use CLISimpleHelpBoth;
use CLISimpleHelpSynopsis;
use CLISimpleHelpUsage;

BEGIN {
  use_ok( qw(CLI::Simple), qw($AUTO_HELP $PAGER) );
}

$PAGER = 0;

########################################################################
sub capture_usage {
########################################################################
  my ( $cli, $module ) = @_;

  my $output = q{};

  open my $stdout, '>', \$output
    or die "Could not open scalar filehandle: $OS_ERROR";

  $cli->set__program( $INC{$module} );

  {
    local *STDOUT = $stdout;

    exits_ok {
      $cli->usage();
    }
    'usage exits';
  }

  close $stdout
    or die "Could not close scalar filehandle: $OS_ERROR";

  return $output;
}

########################################################################
subtest 'USAGE is used for default help' => sub {
########################################################################
  local @ARGV;

  my $cli = CLISimpleHelpUsage->new(
    commands     => { foo => \&CLISimpleHelpUsage::cmd_foo },
    option_specs => [],
  );

  my $output = capture_usage( $cli, 'CLISimpleHelpUsage.pm' );

  like( $output, qr/LEGACY USAGE TEXT/sm, 'USAGE content displayed', );

  return;
};

########################################################################
subtest 'SYNOPSIS is used for default help' => sub {
########################################################################
  local @ARGV;

  my $cli = CLISimpleHelpSynopsis->new(
    commands     => { foo => \&CLISimpleHelpSynopsis::cmd_foo },
    option_specs => [],
  );

  my $output = capture_usage( $cli, 'CLISimpleHelpSynopsis.pm' );

  like( $output, qr/SYNOPSIS TEXT/sm, 'SYNOPSIS content displayed', );

  return;
};
########################################################################
subtest 'USAGE takes precedence over SYNOPSIS' => sub {
########################################################################
  local @ARGV;

  my $cli = CLISimpleHelpBoth->new(
    commands     => { foo => \&CLISimpleHelpBoth::cmd_foo },
    option_specs => [],
  );

  my $output = capture_usage( $cli, 'CLISimpleHelpBoth.pm' );

  like( $output, qr/LEGACY USAGE TEXT/sm, 'USAGE content displayed', );

  unlike( $output, qr/SYNOPSIS TEXT/sm, 'SYNOPSIS content suppressed', );

  return;
};

########################################################################
subtest 'explicit help_sections are honored' => sub {
########################################################################
  local @ARGV;

  my $cli = CLISimpleHelpBoth->new(
    commands     => { foo => \&CLISimpleHelpBoth::cmd_foo },
    option_specs => [],
  );

  $cli->set_help_sections( [qw(SYNOPSIS USAGE)] );

  my $output = capture_usage( $cli, 'CLISimpleHelpBoth.pm' );

  like( $output, qr/SYNOPSIS TEXT/sm, 'SYNOPSIS content displayed', );

  like( $output, qr/LEGACY USAGE TEXT/sm, 'explicit USAGE content displayed', );

  return;
};

done_testing;

1;



( run in 1.305 second using v1.01-cache-2.11-cpan-194103478d8 )