1use warnings; 2use strict; 3 4# confirm that string-typed stack args are displayed correctly by longmess() 5 6use Test::More tests => 33; 7 8use Carp (); 9 10sub lmm { Carp::longmess("x") } 11sub lm { lmm() } 12 13# Use full generality on sufficiently recent versions. On early Perl 14# releases, U+E9 is 0x51 on all EBCDIC code pages supported then. 15my $e9 = sprintf "%02x", (($] ge 5.007_003) 16 ? utf8::unicode_to_native(0xe9) 17 : ((ord("A") == 193) 18 ? 0x51 19 : 0xE9)); 20my $xe9 = "\\x$e9"; 21my $chr_e9 = eval "\"$xe9\""; 22my $nl_as_hex = sprintf "%x", ord("\n"); 23 24like lm(3), qr/main::lm\(3\)/; 25like lm(substr("3\x{2603}", 0, 1)), qr/main::lm\(3\)/; 26like lm(-3), qr/main::lm\(-3\)/; 27like lm(-3.5), qr/main::lm\(-3\.5\)/; 28like lm(-3.5e30), 29 qr/main::lm\( 30 ( 31 -3500000000000000000000000000000 32 | -3\.5[eE]\+?0?30 33 ) 34 \) /x; 35like lm(""), qr/main::lm\(""\)/; 36like lm("foo"), qr/main::lm\("foo"\)/; 37like lm("a&b"), qr/main::lm\("a&b"\)/; 38like lm("a\$b\@c\\d\"e"), qr/main::lm\("a\\\$b\\\@c\\\\d\\\"e"\)/; 39like lm("a\nb"), qr/main::lm\("a\\x\{$nl_as_hex\}b"\)/; 40like lm("a\x{666}b"), qr/main::lm\("a\\x\{666\}b"\)/; 41like lm("\x{666}b"), qr/main::lm\("\\x\{666\}b"\)/; 42like lm("a\x{666}"), qr/main::lm\("a\\x\{666\}"\)/; 43like lm("L${chr_e9}on"), qr/main::lm\("L\\x\{$e9\}on"\)/; 44like lm("L${chr_e9}on \x{2603} !"), qr/main::lm\("L\\x\{$e9\}on \\x\{2603\} !"\)/; 45 46$Carp::MaxArgLen = 5; 47foreach my $arg ("foo bar baz", "foo bar ba", "foo bar b", "foo bar ", "foo bar", "foo ba") { 48 like lm($arg), qr/main::lm\("fo"\.\.\.\)/; 49} 50foreach my $arg ("foo b", "foo ", "foo", "fo", "f", "") { 51 like lm($arg), qr/main::lm\("\Q$arg\E"\)/; 52} 53like lm("L${chr_e9}on \x{2603} !"), qr/main::lm\("L\\x\{$e9\}"\.\.\.\)/; 54like lm("L${chr_e9}on\x{2603}"), qr/main::lm\("L\\x\{$e9\}on\\x\{2603\}"\)/; 55like lm("foo\x{2603}"), qr/main::lm\("foo\\x\{2603\}"\)/; 56 57$Carp::MaxArgLen = 0; 58foreach my $arg ("wibble." x 20, "foo bar baz") { 59 like lm($arg), qr/main::lm\("\Q$arg\E"\)/; 60} 61like lm("L${chr_e9}on\x{2603}"), qr/main::lm\("L\\x\{$e9\}on\\x\{2603\}"\)/; 62 631; 64