X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F104_override_usage.t;h=8fa9299aeb69973eebe07f831ea936baa28c251f;hb=b150707212285aa9a67390a15ececeb9ef204cdd;hp=be681786e7b09b1e53a17776eb67814826cff218;hpb=8d396d8a86e6c43b6722273362cab18b0fa622fc;p=gitmo%2FMooseX-Getopt.git diff --git a/t/104_override_usage.t b/t/104_override_usage.t index be68178..8fa9299 100644 --- a/t/104_override_usage.t +++ b/t/104_override_usage.t @@ -1,7 +1,9 @@ use strict; use warnings; -use Test::More 0.88; + +use Test::More tests => 7; use Test::Trap; +use Test::NoWarnings 1.04 ':early'; { package MyScript; @@ -10,50 +12,74 @@ use Test::Trap; with 'MooseX::Getopt'; has foo => ( isa => 'Int', is => 'ro', documentation => 'A foo' ); - - our $usage = 0; - before _getopt_full_usage => sub { $usage++; }; - our @warnings; - before _getopt_spec_warnings => sub { shift; push(@warnings, @_) }; - our @exception; - before _getopt_spec_exception => sub { shift; push(@exception, @{ shift() }, shift()) }; } + +# FIXME - it looks like we have a spacing issue in Getopt::Long? +my $usage = <new_with_options; - ok $i; - is $i->foo, 1; - is $MyScript::usage, undef; + my $i = trap { MyScript->new_with_options }; + is($i->foo, 1, 'attr is set'); + is($trap->stdout, '', 'nothing printed when option is accepted'); } + { - local $MyScript::usage; local @MyScript::warnings; local @MyScript::exception; local @ARGV = ('--help'); trap { MyScript->new_with_options }; - like($trap->stdout, qr/A foo/); - is $MyScript::usage, 1; + is($trap->stdout, $usage, 'usage is printed on --help'); } + { - local $MyScript::usage; local @MyScript::warnings; local @MyScript::exception; local @ARGV = ('-q'); # Does not exist trap { MyScript->new_with_options }; - like($trap->die, qr/A foo/); - is_deeply \@MyScript::warnings, [ - 'Unknown option: q -' - ]; - # FIXME - it looks like we have a spacing issue in Getopt::Long? - my $exp = [ - 'Unknown option: q -', - qq{usage: 104_override_usage.t [-?h] [long options...] -\t-h -? --usage --help Prints this usage information. -\t--foo A foo + is($trap->die, join("\n", 'Unknown option: q', $usage), 'usage is printed on unknown option'); } - ]; - is_deeply \@MyScript::exception, $exp; +{ + Class::MOP::class_of('MyScript')->add_before_method_modifier( + print_usage_text => sub { + print "--- DOCUMENTATION ---\n"; + }, + ); + + local @ARGV = ('--help'); + trap { MyScript->new_with_options }; + is( + $trap->stdout, + join("\n", '--- DOCUMENTATION ---', $usage), + 'additional text included before normal usage string', + ); +} + +{ + package MyScript2; + use Moose; + + with 'MooseX::Getopt'; + has foo => ( isa => 'Int', is => 'ro', documentation => 'A foo' ); } -done_testing; +{ + # some classes (e.g. ether's darkpan and Catalyst::Runtime) overrode + # _getopt_full_usage, so we need to keep it in the call stack so we don't + # break them. + Class::MOP::class_of('MyScript2')->add_before_method_modifier( + _getopt_full_usage => sub { + print "--- DOCUMENTATION ---\n"; + }, + ); + + local @ARGV = ('--help'); + trap { MyScript2->new_with_options }; + is( + $trap->stdout, + join("\n", '--- DOCUMENTATION ---', $usage), + 'additional text included before normal usage string', + ); +}