X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fop%2Fsub_lval.t;h=c161b4b93658d0853065be2ba9a91311c06e0eb4;hb=a344b90b357d924923454d03e54e01e740f5212a;hp=350cb65e1aaf857011d964707322009aabc2a7d0;hpb=4c8a4e58b37238aa7f23df050ac909444f7e45a6;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/op/sub_lval.t b/t/op/sub_lval.t index 350cb65..c161b4b 100755 --- a/t/op/sub_lval.t +++ b/t/op/sub_lval.t @@ -1,4 +1,4 @@ -print "1..64\n"; +print "1..68\n"; BEGIN { chdir 't' if -d 't'; @@ -43,92 +43,92 @@ $blah = 3; get_st = 7; -print "# `$blah' ne 7\nnot " unless $blah eq 7; +print "# `$blah' ne 7\nnot " unless $blah == 7; print "ok 4\n"; get_lex = 7; -print "# `$in' ne 7\nnot " unless $in eq 7; +print "# `$in' ne 7\nnot " unless $in == 7; print "ok 5\n"; ++get_st; -print "# `$blah' ne 8\nnot " unless $blah eq 8; +print "# `$blah' ne 8\nnot " unless $blah == 8; print "ok 6\n"; ++get_lex; -print "# `$in' ne 8\nnot " unless $in eq 8; +print "# `$in' ne 8\nnot " unless $in == 8; print "ok 7\n"; id(get_st) = 10; -print "# `$blah' ne 10\nnot " unless $blah eq 10; +print "# `$blah' ne 10\nnot " unless $blah == 10; print "ok 8\n"; id(get_lex) = 10; -print "# `$in' ne 10\nnot " unless $in eq 10; +print "# `$in' ne 10\nnot " unless $in == 10; print "ok 9\n"; ++id(get_st); -print "# `$blah' ne 11\nnot " unless $blah eq 11; +print "# `$blah' ne 11\nnot " unless $blah == 11; print "ok 10\n"; ++id(get_lex); -print "# `$in' ne 11\nnot " unless $in eq 11; +print "# `$in' ne 11\nnot " unless $in == 11; print "ok 11\n"; id1(get_st) = 20; -print "# `$blah' ne 20\nnot " unless $blah eq 20; +print "# `$blah' ne 20\nnot " unless $blah == 20; print "ok 12\n"; id1(get_lex) = 20; -print "# `$in' ne 20\nnot " unless $in eq 20; +print "# `$in' ne 20\nnot " unless $in == 20; print "ok 13\n"; ++id1(get_st); -print "# `$blah' ne 21\nnot " unless $blah eq 21; +print "# `$blah' ne 21\nnot " unless $blah == 21; print "ok 14\n"; ++id1(get_lex); -print "# `$in' ne 21\nnot " unless $in eq 21; +print "# `$in' ne 21\nnot " unless $in == 21; print "ok 15\n"; inc(get_st); -print "# `$blah' ne 22\nnot " unless $blah eq 22; +print "# `$blah' ne 22\nnot " unless $blah == 22; print "ok 16\n"; inc(get_lex); -print "# `$in' ne 22\nnot " unless $in eq 22; +print "# `$in' ne 22\nnot " unless $in == 22; print "ok 17\n"; inc(id(get_st)); -print "# `$blah' ne 23\nnot " unless $blah eq 23; +print "# `$blah' ne 23\nnot " unless $blah == 23; print "ok 18\n"; inc(id(get_lex)); -print "# `$in' ne 23\nnot " unless $in eq 23; +print "# `$in' ne 23\nnot " unless $in == 23; print "ok 19\n"; ++inc(id1(id(get_st))); -print "# `$blah' ne 25\nnot " unless $blah eq 25; +print "# `$blah' ne 25\nnot " unless $blah == 25; print "ok 20\n"; ++inc(id1(id(get_lex))); -print "# `$in' ne 25\nnot " unless $in eq 25; +print "# `$in' ne 25\nnot " unless $in == 25; print "ok 21\n"; @a = (1) x 3; @@ -166,7 +166,7 @@ sub a::var : lvalue { $var } "a"->var = 45; -print "# `$var' ne 45\nnot " unless $var eq 45; +print "# `$var' ne 45\nnot " unless $var == 45; print "ok 23\n"; my $oo; @@ -174,14 +174,14 @@ $o = bless \$oo, "a"; $o->var = 47; -print "# `$var' ne 47\nnot " unless $var eq 47; +print "# `$var' ne 47\nnot " unless $var == 47; print "ok 24\n"; sub o : lvalue { $o } o->var = 49; -print "# `$var' ne 49\nnot " unless $var eq 49; +print "# `$var' ne 49\nnot " unless $var == 49; print "ok 25\n"; sub nolv () { $x0, $x1 } # Not lvalue @@ -251,7 +251,7 @@ eval <<'EOE' or $_ = $@; EOE print "# '$_'.\nnot " - unless /Can\'t return a readonly value from lvalue subroutine/; + unless /Can't return undef from lvalue subroutine/; print "ok 31\n"; sub lv10 : lvalue {} @@ -274,7 +274,7 @@ eval <<'EOE' or $_ = $@; EOE print "# '$_'.\nnot " - unless /Can\'t return a readonly value from lvalue subroutine/; + unless /Can't return undef from lvalue subroutine/; print "ok 33\n"; $_ = undef; @@ -423,10 +423,7 @@ $a->() = 8; print "# '$nnewvar'.\nnot " unless $nnewvar eq '8'; print "ok 46\n"; -# This must happen at run time -eval { - sub AUTOLOAD : lvalue { $newvar }; -}; +eval 'sub AUTOLOAD : lvalue { $newvar }'; foobar() = 12; print "# '$newvar'.\nnot " unless $newvar eq "12"; print "ok 47\n"; @@ -532,3 +529,46 @@ sub lval2 : lvalue { $ary[1]; } (lval1(), lval2()) = split ' ', "1 2 3 4"; print "not " unless join(':', @ary) eq "1:2:6"; print "ok 64\n"; + +require './test.pl'; +curr_test(65); + +TODO: { + local $TODO = 'test explicit return of lval expr'; + + # subs are corrupted copies from tests 1-~4 + sub bad_get_lex : lvalue { return $in }; + sub bad_get_st : lvalue { return $blah } + + sub bad_id : lvalue { return ${\shift} } + sub bad_id1 : lvalue { return $_[0] } + sub bad_inc : lvalue { return ${\++$_[0]} } + + $in = 5; + $blah = 3; + + bad_get_st = 7; + + is( $blah, 7 ); + + bad_get_lex = 7; + + is($in, 7, "yada"); + + ++bad_get_st; + + is($blah, 8, "yada"); +} + +TODO: { + local $TODO = "bug #23790"; + my @arr = qw /one two three/; + my $line = "zero"; + sub lval_array () : lvalue {@arr} + + for (lval_array) { + $line .= $_; + } + + is($line, "zeroonetwothree"); +}