X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fop%2Fassignwarn.t;h=0841bd4e2073484b130dad57e20d6ca425d7e630;hb=1db36481d13cc744ff50a6e79d19885d5071f098;hp=b95cec51a1fcb9a0aa05bb78715fd2637f126065;hpb=ee8c7f5465f003860e2347a2946abacac39bd9b9;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/op/assignwarn.t b/t/op/assignwarn.t index b95cec5..0841bd4 100755 --- a/t/op/assignwarn.t +++ b/t/op/assignwarn.t @@ -8,7 +8,8 @@ BEGIN { chdir 't' if -d 't'; - unshift @INC, '../lib'; + @INC = '../lib'; + require './test.pl'; } use strict; @@ -17,45 +18,76 @@ use warnings; my $warn = ""; $SIG{q(__WARN__)} = sub { print $warn; $warn .= join("",@_) }; -sub ok { print $_[1] ? "ok " : "not ok ", $_[0], "\n"; } - sub uninitialized { $warn =~ s/Use of uninitialized value[^\n]+\n//s; } - -print "1..23\n"; +sub tiex { tie $_[0], 'main' } +sub TIESCALAR { my $x; bless \$x } +sub FETCH { ${$_[0]} } +sub STORE { ${$_[0]} = $_[1] } +our $TODO; + +print "1..63\n"; + +# go through all tests once normally and once with tied $x +for my $tie ("", ", tied") { + +{ my $x; tiex $x if $tie; $x ++; ok ! uninitialized, "postinc$tie"; } +{ my $x; tiex $x if $tie; $x --; ok ! uninitialized, "postdec$tie"; } +{ my $x; tiex $x if $tie; ++ $x; ok ! uninitialized, "preinc$tie"; } +{ my $x; tiex $x if $tie; -- $x; ok ! uninitialized, "predec$tie"; } + +{ my $x; tiex $x if $tie; $x **= 1; ok uninitialized, "**=$tie"; } + +{ local $TODO = $tie && '[perl #17809] pp_add & pp_subtract'; + { my $x; tiex $x if $tie; $x += 1; ok ! uninitialized, "+=$tie"; } + { my $x; tiex $x if $tie; $x -= 1; ok ! uninitialized, "-=$tie"; } +} -{ my $x; $x ++; ok 1, ! uninitialized; } -{ my $x; $x --; ok 2, ! uninitialized; } -{ my $x; ++ $x; ok 3, ! uninitialized; } -{ my $x; -- $x; ok 4, ! uninitialized; } +{ my $x; tiex $x if $tie; $x .= 1; ok ! uninitialized, ".=$tie"; } -{ my $x; $x **= 1; ok 5, uninitialized; } +{ my $x; tiex $x if $tie; $x *= 1; ok uninitialized, "*=$tie"; } +{ my $x; tiex $x if $tie; $x /= 1; ok uninitialized, "/=$tie"; } +{ my $x; tiex $x if $tie; $x %= 1; ok uninitialized, "\%=$tie"; } -{ my $x; $x += 1; ok 6, ! uninitialized; } -{ my $x; $x -= 1; ok 7, ! uninitialized; } +{ my $x; tiex $x if $tie; $x x= 1; ok uninitialized, "x=$tie"; } -{ my $x; $x .= 1; ok 8, ! uninitialized; } +{ my $x; tiex $x if $tie; $x &= 1; ok uninitialized, "&=$tie"; } -{ my $x; $x *= 1; ok 9, uninitialized; } -{ my $x; $x /= 1; ok 10, uninitialized; } -{ my $x; $x %= 1; ok 11, uninitialized; } +{ local $TODO = $tie && '[perl #17809] pp_bit_or & pp_bit_xor'; + { my $x; tiex $x if $tie; $x |= 1; ok ! uninitialized, "|=$tie"; } + { my $x; tiex $x if $tie; $x ^= 1; ok ! uninitialized, "^=$tie"; } +} + +{ my $x; tiex $x if $tie; $x &&= 1; ok ! uninitialized, "&&=$tie"; } +{ my $x; tiex $x if $tie; $x ||= 1; ok ! uninitialized, "||=$tie"; } -{ my $x; $x x= 1; ok 12, uninitialized; } +{ my $x; tiex $x if $tie; $x <<= 1; ok uninitialized, "<<=$tie"; } +{ my $x; tiex $x if $tie; $x >>= 1; ok uninitialized, ">>=$tie"; } -{ my $x; $x &= 1; ok 13, uninitialized; } -{ my $x; $x |= 1; ok 14, ! uninitialized; } -{ my $x; $x ^= 1; ok 15, ! uninitialized; } +{ my $x; tiex $x if $tie; $x &= "x"; ok uninitialized, "&=$tie, string"; } + +{ local $TODO = $tie && '[perl #17809] pp_bit_or & pp_bit_xor'; + { my $x; tiex $x if $tie; $x |= "x"; ok ! uninitialized, "|=$tie, string"; } + { my $x; tiex $x if $tie; $x ^= "x"; ok ! uninitialized, "^=$tie, string"; } +} + +{ use integer; + +{ local $TODO = $tie && '[perl #17809] pp_i_add & pp_i_subtract'; + { my $x; tiex $x if $tie; $x += 1; ok ! uninitialized, "+=$tie, int"; } + { my $x; tiex $x if $tie; $x -= 1; ok ! uninitialized, "-=$tie, int"; } +} -{ my $x; $x &&= 1; ok 16, ! uninitialized; } -{ my $x; $x ||= 1; ok 17, ! uninitialized; } +{ my $x; tiex $x if $tie; $x *= 1; ok uninitialized, "*=$tie, int"; } +{ my $x; tiex $x if $tie; $x /= 1; ok uninitialized, "/=$tie, int"; } +{ my $x; tiex $x if $tie; $x %= 1; ok uninitialized, "\%=$tie, int"; } -{ my $x; $x <<= 1; ok 18, uninitialized; } -{ my $x; $x >>= 1; ok 19, uninitialized; } +{ my $x; tiex $x if $tie; $x ++; ok ! uninitialized, "postinc$tie, int"; } +{ my $x; tiex $x if $tie; $x --; ok ! uninitialized, "postdec$tie, int"; } +{ my $x; tiex $x if $tie; ++ $x; ok ! uninitialized, "preinc$tie, int"; } +{ my $x; tiex $x if $tie; -- $x; ok ! uninitialized, "predec$tie, int"; } -{ my $x; $x &= "x"; ok 20, uninitialized; } -{ my $x; $x |= "x"; ok 21, ! uninitialized; } -{ my $x; $x ^= "x"; ok 22, ! uninitialized; } +} # end of use integer; -ok 23, $warn eq ''; +} # end of for $tie -# If we got any errors that we were not expecting, then print them -print map "#$_\n", split /\n/, $warn if length $warn; +is $warn, '', "no spurious warnings";