make sure no tests are run if MX::SC 0.07 is not found
[gitmo/MooseX-Getopt.git] / t / 107_no_auto_help.t
1 # Related information:
2 # https://rt.cpan.org/Public/Bug/Display.html?id=47865
3 # https://rt.cpan.org/Public/Bug/Display.html?id=52474
4 # https://rt.cpan.org/Public/Bug/Display.html?id=57683
5 # http://www.nntp.perl.org/group/perl.moose/2010/06/msg1767.html
6
7 # Summary: If we disable the "auto_help" option in Getopt::Long, then
8 # getoptions() will not call into pod2usage() (causing program termination)
9 # when --help is passed (and MooseX::ConfigFromFile is in use).
10 use strict;
11 use warnings;
12
13 use Test::More;
14
15 BEGIN {
16 plan skip_all => 'This test needs MooseX::SimpleConfig 0.07'
17     unless eval { require MooseX::SimpleConfig && MooseX::SimpleConfig->VERSION(0.07); };
18 }
19
20 my $fail_on_exit = 1;
21 {
22     package Class;
23     use strict; use warnings;
24
25     use Moose;
26     with
27         'MooseX::SimpleConfig',
28         'MooseX::Getopt';
29
30     # this is a hacky way of being able to check that we made it past the
31     # $opt_parser->getoptions() call in new_with_options, because it is
32     # still going to bail out later on, on seeing the --help flag
33     has configfile => (
34         is => 'ro', isa => 'Str',
35         default => sub {
36             $fail_on_exit = 0;
37             'this_value_unimportant',
38         },
39     );
40
41     no Moose;
42     1;
43 }
44
45 use Test::Warn;
46 use Test::Exception;
47
48 END {
49     ok(!$fail_on_exit, 'getoptions() lives');
50
51     done_testing;
52
53     # cancel the non-zero exit status from _getopt_full_usage()
54     exit 0;
55 }
56
57
58 @ARGV = ('--help');
59
60 warning_like {
61     throws_ok { Class->new_with_options }
62            #usage: 107_no_auto_help.t [-?] [long options...]
63         qr/^usage: [\d\w]+\Q.t [-?] [long options...]\E.\s+\Q-? --usage --help  Prints this usage information.\E.\s+--configfile/ms,
64         'usage information looks good';
65     }
66     qr/^Specified configfile \'this_value_unimportant\' does not exist, is empty, or is not readable$/,
67     'Our dummy config file doesn\'t exist';
68