X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Fre-engine-Plugin.git;a=blobdiff_plain;f=t%2F50-num_buff%2FSTORE.t;h=578011705f616c5c3ffcefc575a29c62a8d9827c;hp=3d693a0d8be1c813fe4293a8f29c69ff28bd125b;hb=849fd3192758cbc0432927ce1fd63cadfebd8392;hpb=75c4d57d3969015684ffccb54e5d6c715509b149 diff --git a/t/50-num_buff/STORE.t b/t/50-num_buff/STORE.t index 3d693a0..5780117 100644 --- a/t/50-num_buff/STORE.t +++ b/t/50-num_buff/STORE.t @@ -1,18 +1,47 @@ use strict; use Test::More tests => 14; +my %rx_idx; +BEGIN { + %rx_idx = ( + q[$`] => -2, + q[$'] => -1, + q[$&] => 0, + ); + if ("$]" >= 5.019_004) { + # This should be the case since 5.17.4 but there's a bug in perl that + # was fixed in 5.19.4 which caused the FETCH callback to get the old + # indices. + $rx_idx{q[${^PREMATCH}]} = -5; + $rx_idx{q[${^POSTMATCH}]} = -4; + $rx_idx{q[${^MATCH}]} = -3; + } else { + $rx_idx{q[${^PREMATCH}]} = $rx_idx{q[$`]}; + $rx_idx{q[${^POSTMATCH}]} = $rx_idx{q[$']}; + $rx_idx{q[${^MATCH}]} = $rx_idx{q[$&]}; + } +} + use re::engine::Plugin ( exec => sub { my $re = shift; + if ("$]" >= 5.017_004) { + my %full_name_map = ( + -2 => -5, + -1 => -4, + 0 => -3, + ); + } + $re->stash( [ - [ -2, "a" ], - [ -2, "a" ], - [ -1, "o" ], - [ -1, "o" ], - [ 0, "e" ], - [ 0, "e" ], - [ 1, "u" ], + [ q[$`], "a" ], + [ q[${^PREMATCH}], "a" ], + [ q[$'], "o" ], + [ q[${^POSTMATCH}], "o" ], + [ q[$&], "e" ], + [ q[${^MATCH}], "e" ], + [ \1, "u" ], ]); $re->num_captures( @@ -20,8 +49,18 @@ use re::engine::Plugin ( my ($re, $paren, $sv) = @_; my $test = shift @{ $re->stash }; - is($paren, $test->[0]); - is($sv, $test->[1]); + my $desc; + my $idx = $test->[0]; + if (ref $idx) { + $idx = $$idx; + $desc = "STORE \$$idx"; + } else { + $desc = "STORE $idx"; + $idx = $rx_idx{$idx}; + } + + is($paren, $idx, "$desc (index)"); + is($sv, $test->[1], "$desc (value)"); }, );