@@ -37,7+37,7 @@ Its functions behave the same as their L<Test::More> counterparts, except for th
=item *
Stringification isn't forced on the test operands.
=item *
Stringification isn't forced on the test operands.
-However, L</ok> honors C<'bool'> overloading, L</is> and L</is_deeply> honor C<'eq'> overloading (and just that one) and L</cmp_ok> honors whichever overloading category corresponds to the specified operator.
+However, L</ok> honors C<'bool'> overloading, L</is> and L</is_deeply> honor C<'eq'> overloading (and just that one), L</isnt> honors C<'ne'> overloading, and L</cmp_ok> honors whichever overloading category corresponds to the specified operator.
+C<isn't> (the sub C<t> in package C<isn>) is not aliased to L</isnt>.
+
+=item *
+
L</like> and L</unlike> don't special case regular expressions that are passed as C<'/.../'> strings.
A string regexp argument is always treated as the source of the regexp, making C<like $text, $rx> and C<like $text, qr[$rx]> equivalent to each other and to C<cmp_ok $text, '=~', $rx> (and likewise for C<unlike>).
L</like> and L</unlike> don't special case regular expressions that are passed as C<'/.../'> strings.
A string regexp argument is always treated as the source of the regexp, making C<like $text, $rx> and C<like $text, qr[$rx]> equivalent to each other and to C<cmp_ok $text, '=~', $rx> (and likewise for C<unlike>).
If this environment variable is set, L<Test::Leaner> will replace its functions by those from L<Test::More>.
=head2 C<PERL_TEST_LEANER_USES_TEST_MORE>
If this environment variable is set, L<Test::Leaner> will replace its functions by those from L<Test::More>.
-Moreover, the symbols that are imported you C<use Test::Leaner> will be those from L<Test::More>, but you can still only import the symbols originally defined in L<Test::Leaner> (hence the functions from L<Test::More> that are not implemented in L<Test::Leaner> will not be imported).
+Moreover, the symbols that are imported when you C<use Test::Leaner> will be those from L<Test::More>, but you can still only import the symbols originally defined in L<Test::Leaner> (hence the functions from L<Test::More> that are not implemented in L<Test::Leaner> will not be imported).
If your version of L<Test::More> is too old and doesn't have some symbols (like L</note> or L</done_testing>), they will be replaced in L<Test::Leaner> by croaking stubs.
This may be useful if your L<Test::Leaner>-based test script fails and you want extra diagnostics.
If your version of L<Test::More> is too old and doesn't have some symbols (like L</note> or L</done_testing>), they will be replaced in L<Test::Leaner> by croaking stubs.
This may be useful if your L<Test::Leaner>-based test script fails and you want extra diagnostics.
@@ -161,14+165,13 @@ if ($ENV{PERL_TEST_LEANER_USES_TEST_MORE}) {
my $leaner_stash = \%Test::Leaner::;
my $more_stash = \%Test::More::;
my $leaner_stash = \%Test::Leaner::;
my $more_stash = \%Test::More::;
- my %valid_imports;
+ my %stubbed;
for (@EXPORT) {
my $replacement = exists $more_stash->{$_} ? *{$more_stash->{$_}}{CODE}
: undef;
for (@EXPORT) {
my $replacement = exists $more_stash->{$_} ? *{$more_stash->{$_}}{CODE}
: undef;
- if (defined $replacement) {
- $valid_imports{$_} = 1;
- } else {
+ unless (defined $replacement) {
+ $stubbed{$_}++;
$replacement = sub {
@_ = ("$_ is not implemented in this version of Test::More");
goto &croak;
$replacement = sub {
@_ = ("$_ is not implemented in this version of Test::More");
goto &croak;
@@ -179,20+182,33 @@ if ($ENV{PERL_TEST_LEANER_USES_TEST_MORE}) {
}
my $import = sub {
}
my $import = sub {
- shift;
+ my $class = shift;
+
my @imports = &_handle_import_args;
my @imports = &_handle_import_args;
- @imports = @EXPORT unless @imports;
+ if (@imports == grep /^!/, @imports) {
+ # All imports are negated, or @imports is empty
+ my %negated;
+ /^!(.*)/ and ++$negated{$1} for @imports;
+ push @imports, grep !$negated{$_}, @EXPORT;
+ }
+
my @test_more_imports;
for (@imports) {
my @test_more_imports;
for (@imports) {
- if ($valid_imports{$_}) {
- push @test_more_imports, $_;
- } else {
+ if ($stubbed{$_}) {
my $pkg = caller;
no strict 'refs';
*{$pkg."::$_"} = $leaner_stash->{$_};
my $pkg = caller;
no strict 'refs';
*{$pkg."::$_"} = $leaner_stash->{$_};
+ } elsif (/^!/ or !exists $more_stash->{$_} or exists $leaner_stash->{$_}) {
+ push @test_more_imports, $_;
+ } else {
+ # Croak for symbols in Test::More but not in Test::Leaner
+ Exporter::import($class, $_);
}
}
}
}
+
my $test_more_import = 'Test::More'->can('import');
my $test_more_import = 'Test::More'->can('import');
+ return unless $test_more_import;
+
@_ = (
'Test::More',
@_,
@_ = (
'Test::More',
@_,
@@ -202,6+218,7 @@ if ($ENV{PERL_TEST_LEANER_USES_TEST_MORE}) {