This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
install useful Regexp::CARP_TRACE from Carp
[perl5.git] / dist / Carp / t / arg_regexp.t
1 use warnings;
2 use strict;
3
4 use Test::More tests => 42;
5
6 use Carp ();
7
8 sub lmm { Carp::longmess("x") }
9 sub lm { lmm() }
10 sub rx { qr/$_[0]/ }
11
12 # On Perl 5.6 we accept some incorrect quoting of Unicode characters,
13 # because upgradedness of regexps isn't preserved by stringification,
14 # so it's impossible to implement the correct behaviour.
15 my $xe9_rx = "$]" < 5.008 ? qr/\\x\{c3\}\\x\{a9\}|\\x\{e9\}/ : qr/\\x\{e9\}/;
16 my $x666_rx = "$]" < 5.008 ? qr/\\x\{d9\}\\x\{a6\}|\\x\{666\}/ : qr/\\x\{666\}/;
17 my $x2603_rx = "$]" < 5.008 ? qr/\\x\{e2\}\\x\{98\}\\x\{83\}|\\x\{2603\}/ : qr/\\x\{2603\}/;
18
19 like lm(qr/3/), qr/main::lm\(qr\(3\)u?\)/;
20 like lm(qr/a.b/), qr/main::lm\(qr\(a\.b\)u?\)/;
21 like lm(qr/a.b/s), qr/main::lm\(qr\(a\.b\)u?s\)/;
22 like lm(qr/a.b$/s), qr/main::lm\(qr\(a\.b\$\)u?s\)/;
23 like lm(qr/a.b$/sm), qr/main::lm\(qr\(a\.b\$\)u?ms\)/;
24 like lm(qr/foo/), qr/main::lm\(qr\(foo\)u?\)/;
25 like lm(qr/a\$b\@c\\d/), qr/main::lm\(qr\(a\\\$b\\\@c\\\\d\)u?\)/;
26 like lm(qr/a\nb/), qr/main::lm\(qr\(a\\nb\)u?\)/;
27 like lm(rx("a\nb")), qr/main::lm\(qr\(a\\x\{a\}b\)u?\)/;
28 like lm(qr/a\x{666}b/), qr/main::lm\(qr\(a\\x\{666\}b\)u?\)/;
29 like lm(rx("a\x{666}b")), qr/main::lm\(qr\(a${x666_rx}b\)u?\)/;
30 like lm(qr/\x{666}b/), qr/main::lm\(qr\(\\x\{666\}b\)u?\)/;
31 like lm(rx("\x{666}b")), qr/main::lm\(qr\(${x666_rx}b\)u?\)/;
32 like lm(qr/a\x{666}/), qr/main::lm\(qr\(a\\x\{666\}\)u?\)/;
33 like lm(rx("a\x{666}")), qr/main::lm\(qr\(a${x666_rx}\)u?\)/;
34 like lm(qr/L\xe9on/), qr/main::lm\(qr\(L\\xe9on\)u?\)/;
35 like lm(rx("L\xe9on")), qr/main::lm\(qr\(L${xe9_rx}on\)u?\)/;
36 like lm(qr/L\xe9on \x{2603} !/), qr/main::lm\(qr\(L\\xe9on \\x\{2603\} !\)u?\)/;
37 like lm(rx("L\xe9on \x{2603} !")), qr/main::lm\(qr\(L${xe9_rx}on ${x2603_rx} !\)u?\)/;
38
39 $Carp::MaxArgLen = 5;
40 foreach my $arg ("foo bar baz", "foo bar ba", "foo bar b", "foo bar ", "foo bar", "foo ba") {
41     like lm(rx($arg)), qr/main::lm\(qr\(fo\)\.\.\.u?\)/;
42 }
43 foreach my $arg ("foo b", "foo ", "foo", "fo", "f", "") {
44     like lm(rx($arg)), qr/main::lm\(qr\(\Q$arg\E\)u?\)/;
45 }
46 like lm(qr/foo.bar$/sm), qr/main::lm\(qr\(fo\)\.\.\.u?ms\)/;
47 like lm(qr/L\xe9on \x{2603} !/), qr/main::lm\(qr\(L\\\)\.\.\.u?\)/;
48 like lm(rx("L\xe9on \x{2603} !")), qr/main::lm\(qr\(L\\\)\.\.\.u?\)/;
49 like lm(qr/L\xe9on\x{2603}/), qr/main::lm\(qr\(L\\\)\.\.\.u?\)/;
50 like lm(rx("L\xe9on\x{2603}")), qr/main::lm\(qr\(L\\\)\.\.\.u?\)/;
51 like lm(qr/foo\x{2603}/), qr/main::lm\(qr\(fo\)\.\.\.u?\)/;
52 like lm(rx("foo\x{2603}")), qr/main::lm\(qr\(fo\)\.\.\.u?\)/;
53
54 $Carp::MaxArgLen = 0;
55 foreach my $arg ("wibble:" x 20, "foo bar baz") {
56     like lm(rx($arg)), qr/main::lm\(qr\(\Q$arg\E\)u?\)/;
57 }
58 like lm(qr/L\xe9on\x{2603}/), qr/main::lm\(qr\(L\\xe9on\\x\{2603\}\)u?\)/;
59 like lm(rx("L\xe9on\x{2603}")), qr/main::lm\(qr\(L${xe9_rx}on${x2603_rx}\)u?\)/;
60
61 1;