make all warnings fatal in tests
[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
11 use strict;
12 use warnings FATAL => 'all';
13
14 use Test::Requires { 'MooseX::SimpleConfig' => 0.07 };  # skip all if not installed
15 use Test::More tests => 2;
16 use Test::Warn 0.21;
17 use Test::Fatal 0.003;
18
19 use Test::NoWarnings 1.04 ':early';
20
21 my $fail_on_exit = 1;
22 {
23     package Class;
24     use strict; use warnings FATAL => 'all';
25
26     use Moose;
27     with
28         'MooseX::SimpleConfig',
29         'MooseX::Getopt';
30
31     # this is a hacky way of being able to check that we made it past the
32     # $opt_parser->getoptions() call in new_with_options, because it is
33     # still going to bail out later on, on seeing the --help flag
34     has configfile => (
35         is => 'ro', isa => 'Str',
36         default => sub {
37             $fail_on_exit = 0;
38             'this_value_unimportant',
39         },
40     );
41
42     no Moose;
43     1;
44 }
45
46 END {
47     ok(!$fail_on_exit, 'getoptions() lives');
48
49     # cancel the non-zero exit status from print_usage_text()
50     exit 0;
51 }
52
53
54 @ARGV = ('--help');
55
56 warning_like {
57     like exception { Class->new_with_options },
58            #usage: 107_no_auto_help.t [-?] [long options...]
59         qr/^usage: [\d\w]+\Q.t [-?] [long options...]\E.\s+\Q-? --usage --help  Prints this usage information.\E.\s+--configfile/ms,
60         'usage information looks good';
61     }
62     qr/^Specified configfile \'this_value_unimportant\' does not exist, is empty, or is not readable$/,
63     'Our dummy config file doesn\'t exist';
64