xref: /openbsd/gnu/usr.bin/perl/dist/Carp/t/arg_string.t (revision 771fbea0)
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