]> git.vpit.fr Git - perl/modules/Scope-Upper.git/commitdiff
Make the expected() utility more closely match context_info() rt139823
authorJames E Keenan <jkeenan@cpan.org>
Tue, 2 Nov 2021 23:13:39 +0000 (23:13 +0000)
committerVincent Pit <vpit@cpan.org>
Mon, 20 Dec 2021 18:14:14 +0000 (19:14 +0100)
context_info() returns $warnings::Bits{all} when the warnings for
a context is pWARN_ALL, while caller() returns WARN_ALLstring.

The test tried to avoid loading any modules that registered
warning categories to avoid this making a difference, but
DynaLoader is needed to load Scope::Upper, and DynaLoader uses
vars.pm which registers a warnings category.

This wasn't a problem when the default warning mask wasn't used up to a
byte boundary, but adding the experimental category in Perl 5 commit
3b54923c did align the warning mask on a byte boundary, leading to this
test failing.

Specifically, handle case where warnings mask contains only "\x55"
bytes.  Return $warnings::Bits{all} in that case.  As suggested by Tony
Cook in: https://rt.cpan.org/Ticket/Display.html?id=139823

BBC ticket: https://github.com/Perl/perl5/issues/19212

Most of commit message suggested by Tony Cook in:
https://github.com/jkeenan/p5-Scope-Upper/pull/1#issuecomment-968375955

t/07-context_info.t

index 5dbfa45bdfb01f72b3280f81592217b8106cab48..657285f7d7f7ac5d717b0e6124635a4acbaf09f3 100644 (file)
@@ -51,6 +51,9 @@ sub expected {
   $warnings  = sub { use warnings; (caller 0)[9] }->() if  "$]" < 5.007
                                                        and not $^W;
  }
+ if (defined $warnings and $warnings =~ m/^\x55*$/) {
+     $warnings = $warnings::Bits{all};
+ }
 
  my @exp = (
   $pkg,
@@ -156,6 +159,9 @@ sub call {
   my @got = context_info(CALLER $depth);
   my @exp = caller $depth;
   defined and not $_ and $_ = '' for $exp[5];
+  if (defined $exp[9] and $exp[9] =~ m/^\x55*$/) {
+     $exp[9] = $warnings::Bits{all};
+  }
   is_deeply \@got, \@exp, "context_info vs caller $depth";
  }
 }