X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=t%2F04-fallback-import-arg.t;h=ed9ad43c83f681521e8c023055733721f35f3ad1;hb=c5ef09dc0767113f5a35beeb4d4ce86bc84d774b;hp=ee2bbd5ee9e14d8a83b621cfd63dc37131238fe3;hpb=7b03c18e358942c3388e3ba4d93319333a25b9cf;p=perl%2Fmodules%2FTest-Leaner.git diff --git a/t/04-fallback-import-arg.t b/t/04-fallback-import-arg.t index ee2bbd5..ed9ad43 100644 --- a/t/04-fallback-import-arg.t +++ b/t/04-fallback-import-arg.t @@ -5,6 +5,8 @@ use warnings; BEGIN { $ENV{PERL_TEST_LEANER_USES_TEST_MORE} = 1 } +use Carp (); + use Test::Leaner (); use Test::More (); @@ -17,6 +19,20 @@ sub get_subroutine { return *$glob{CODE}; } +sub has_module_version { + my ($module, $version) = @_; + + local $@; + eval qq{ + require $module; + "$module"->VERSION(\$version); + 1; + } +} + +sub has_test_more_version { has_module_version 'Test::More', @_ } +sub has_exporter_version { has_module_version 'Exporter', @_ } + my $this_stash = \%main::; my @default_exports = qw< @@ -40,19 +56,37 @@ my @default_exports = qw< sub check_imports { my %imported = map { $_ => 1 } @{ $_[0] || [] }; my @not_imported = @{ $_[1] || [] }; - for (@not_imported, grep !$imported{$_}, @default_exports) { - Test::More::ok(!exists $this_stash->{$_}, "$_ was not imported"); - } - for (grep $imported{$_}, @default_exports) { - my $code = get_subroutine($this_stash, $_); - Test::More::ok($code, "$_ was imported"); + +SKIP: + { + local $Test::Builder::Level = ($Test::Builder::Level || 0) + 1; + Test::More::skip($_[2] => @not_imported + @default_exports) if defined $_[2]; + + for (@not_imported, grep !$imported{$_}, @default_exports) { + Test::More::ok(!exists $this_stash->{$_}, "$_ was not imported"); + } + for (grep $imported{$_}, @default_exports) { + my $code = get_subroutine($this_stash, $_); + Test::More::ok($code, "$_ was imported"); + } } + delete $this_stash->{$_} for @default_exports, keys %imported, @not_imported; } -Test::More::plan(tests => 8 * @default_exports + 7 + 2); +if ($^V ge v5.8.4 and $^V le v5.8.5) { + Test::More::plan(skip_all + => 'goto may segfault randomly on perl 5.8.4 and 5.8.5'); +} else { + Test::More::plan(tests => 9 * @default_exports + 8 + 3); +} + +check_imports([ ], [ ], has_test_more_version('0.51') ? undef : 'Test::More::plan exports stuff on Test::More <= 0.51'); -check_imports(); +local *Carp::carp = sub { + local $Carp::CarpLevel = ($Carp::CarpLevel || 0) + 1; + Carp::croak(@_); +} unless has_exporter_version('5.565'); { local $@; @@ -72,6 +106,16 @@ check_imports(); check_imports([ ], [ 'nonexistent' ]); } +{ + delete $this_stash->{use_ok} unless has_test_more_version('0.51'); + local $@; + eval { + Test::Leaner->import(import => [ 'use_ok' ]); + }; + Test::More::like($@, qr/^"use_ok" is not exported by the Test::Leaner module/, 'import "use_ok" croaks'); + check_imports([ ], [ 'use_ok' ]); +} + { local $@; eval { @@ -102,7 +146,10 @@ check_imports(); check_imports([ grep $_ ne 'fail', @default_exports ], [ 'fail' ]); } +SKIP: { + Test::More::skip('Exporter 5.58 required to test negative imports' + => 1 + @default_exports) unless has_exporter_version('5.58'); local $@; eval { Test::Leaner->import(import => [ 'pass' ], import => [ '!fail' ]); @@ -111,7 +158,10 @@ check_imports(); check_imports([ 'pass' ], [ ]); } +SKIP: { + Test::More::skip('Exporter 5.58 required to test negative imports' + => 1 + @default_exports) unless has_exporter_version('5.58'); local $@; eval { Test::Leaner->import(import => [ 'fail' ], import => [ '!fail' ]);