BEGIN { delete $ENV{PERL_TEST_LEANER_USES_TEST_MORE} }
+use Carp ();
+
use Test::Leaner ();
use Test::More ();
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<
Test::More::plan(tests => 9 * @default_exports + 8 + 3);
-check_imports([ ], [ ], $Test::More::VERSION > 0.51 ? undef : 'Test::More::plan exports stuff on Test::More <= 0.51');
+check_imports([ ], [ ], has_test_more_version('0.51') ? undef : 'Test::More::plan exports stuff on Test::More <= 0.51');
+
+local *Carp::carp = sub {
+ local $Carp::CarpLevel = ($Carp::CarpLevel || 0) + 1;
+ Carp::croak(@_);
+} unless has_exporter_version('5.565');
{
local $@;
}
{
+ delete $this_stash->{use_ok} unless has_test_more_version('0.51');
local $@;
eval {
Test::Leaner->import(import => [ 'use_ok' ]);
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' ]);
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' ]);
use strict;
use warnings;
+BEGIN {
+ if ($^V ge v5.8.4 and $^V le v5.8.5) {
+ require Test::More;
+ Test::More::plan(skip_all
+ => 'goto may segfault randomly on perl 5.8.4 and 5.8.5');
+ }
+}
+
BEGIN { $ENV{PERL_TEST_LEANER_USES_TEST_MORE} = 1 }
use Test::Leaner;
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', @_ }
+
my $leaner_stash = \%Test::Leaner::;
my $more_stash = \%Test::More::;
my $this_stash = \%main::;
"$_ was not imported into main");
}
-my @only_in_test_more = qw<
- use_ok
- require_ok
- can_ok
- isa_ok
- new_ok
- subtest
- explain
- todo_skip
->;
-
-for (@only_in_test_more) {
- my $more_variant = get_subroutine($more_stash, $_);
-
- SKIP: {
- Test::More::skip("$_ is not implemented in this version of Test::More" => 2)
- unless defined $more_variant;
-
- Test::More::ok(!exists $leaner_stash->{$_},
- "$_ was not imported into Test::Leaner");
- Test::More::ok(!exists $this_stash->{$_},
- "$_ was not imported into main");
+SKIP:
+{
+ Test::More::skip('Test::More::plan exports stuff on Test::More <= 0.51'
+ => 2 * 8) unless has_test_more_version('0.51');
+
+ my @only_in_test_more = qw<
+ use_ok
+ require_ok
+ can_ok
+ isa_ok
+ new_ok
+ subtest
+ explain
+ todo_skip
+ >;
+
+ for (@only_in_test_more) {
+ my $more_variant = get_subroutine($more_stash, $_);
+
+ SKIP: {
+ Test::More::skip("$_ is not implemented in this version of Test::More" => 2)
+ unless defined $more_variant;
+
+ Test::More::ok(!exists $leaner_stash->{$_},
+ "$_ was not imported into Test::Leaner");
+ Test::More::ok(!exists $this_stash->{$_},
+ "$_ was not imported into main");
+ }
}
}
BEGIN { $ENV{PERL_TEST_LEANER_USES_TEST_MORE} = 1 }
+use Carp ();
+
use Test::Leaner ();
use Test::More ();
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<
delete $this_stash->{$_} for @default_exports, keys %imported, @not_imported;
}
-Test::More::plan(tests => 9 * @default_exports + 8 + 3);
+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([ ], [ ], $Test::More::VERSION > 0.51 ? undef : 'Test::More::plan exports stuff on Test::More <= 0.51');
+local *Carp::carp = sub {
+ local $Carp::CarpLevel = ($Carp::CarpLevel || 0) + 1;
+ Carp::croak(@_);
+} unless has_exporter_version('5.565');
{
local $@;
}
{
+ delete $this_stash->{use_ok} unless has_test_more_version('0.51');
local $@;
eval {
Test::Leaner->import(import => [ 'use_ok' ]);
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' ]);
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' ]);