This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regcomp.c: Make comment more accurate
[perl5.git] / lib / dumpvar.t
CommitLineData
fafebdf5
A
1#!./perl -- -*- mode: cperl; cperl-indent-level: 4 -*-
2
3BEGIN {
4 chdir 't' if -d 't';
5 @INC = '../lib';
78cd8b71 6 require Config;
98641f60 7 if (($Config::Config{'extensions'} !~ m!\bList/Util\b!) ){
78cd8b71
NC
8 print "1..0 # Skip -- Perl configured without List::Util module\n";
9 exit 0;
10 }
fafebdf5
A
11}
12
13use strict;
14
15$|=1;
96b31d9e
JH
16
17my @prgs;
18{
19 local $/;
20 @prgs = split "########\n", <DATA>;
21 close DATA;
22}
23
24use Test::More;
25
26plan tests => scalar @prgs;
27
fafebdf5
A
28require "dumpvar.pl";
29
f97a9a4b
JH
30sub unctrl { print dumpvar::unctrl($_[0]), "\n" }
31sub uniescape { print dumpvar::uniescape($_[0]), "\n" }
32sub stringify { print dumpvar::stringify($_[0]), "\n" }
9bcb75ad 33sub dumpvalue {
2c227d66 34 # Call main::dumpValue exactly as the perl5db.pl calls it.
9bcb75ad
JM
35 local $\ = '';
36 local $, = '';
37 local $" = ' ';
38 my @params = @_;
2c227d66 39 &main::dumpValue(\@params,-1);
9bcb75ad 40}
f97a9a4b
JH
41
42package Foo;
43
44sub new { my $class = shift; bless [ @_ ], $class }
45
46package Bar;
47
48sub new { my $class = shift; bless [ @_ ], $class }
49
50use overload '""' => sub { "Bar<@{$_[0]}>" };
51
6cee328e
FC
52package Tyre;
53
54sub TIESCALAR{bless[]}
55# other methods intentionally omitted
56
f97a9a4b
JH
57package main;
58
59my $foo = Foo->new(1..5);
60my $bar = Bar->new(1..5);
61
96b31d9e
JH
62for (@prgs) {
63 my($prog, $expected) = split(/\nEXPECT\n?/, $_);
f97a9a4b
JH
64 # TODO: dumpvar::stringify() is controlled by a pile of package
65 # dumpvar variables: $printUndef, $unctrl, $quoteHighBit, $bareStringify,
66 # and so forth. We need to test with various settings of those.
1d8663a3 67 my $out = tie *STDOUT, 'TieOut';
fafebdf5 68 eval $prog;
96b31d9e 69 my $ERR = $@;
1d8663a3 70 untie $out;
96b31d9e
JH
71 if ($ERR) {
72 ok(0, "$prog - $ERR");
73 } else {
f97a9a4b 74 if ($expected =~ m:^/:) {
1d8663a3 75 like($$out, $expected, $prog);
f97a9a4b 76 } else {
1d8663a3 77 is($$out, $expected, $prog);
f97a9a4b 78 }
96b31d9e 79 }
fafebdf5
A
80}
81
1d8663a3
JH
82package TieOut;
83
84sub TIEHANDLE {
85 bless( \(my $self), $_[0] );
86}
87
88sub PRINT {
89 my $self = shift;
90 $$self .= join('', @_);
91}
92
93sub read {
94 my $self = shift;
95 substr( $$self, 0, length($$self), '' );
96}
97
fafebdf5 98__END__
f97a9a4b
JH
99unctrl("A");
100EXPECT
101A
102########
103unctrl("\cA");
104EXPECT
105^A
106########
107uniescape("A");
108EXPECT
109A
110########
111uniescape("\x{100}");
112EXPECT
113\x{0100}
114########
115stringify(undef);
116EXPECT
117undef
118########
119stringify("foo");
120EXPECT
121'foo'
122########
123stringify("\cA");
124EXPECT
125"\cA"
126########
127stringify(*a);
128EXPECT
129*main::a
130########
131stringify(\undef);
132EXPECT
133/^'SCALAR\(0x[0-9a-f]+\)'$/i
134########
135stringify([]);
136EXPECT
137/^'ARRAY\(0x[0-9a-f]+\)'$/i
138########
139stringify({});
140EXPECT
141/^'HASH\(0x[0-9a-f]+\)'$/i
142########
143stringify(sub{});
144EXPECT
145/^'CODE\(0x[0-9a-f]+\)'$/i
146########
147stringify(\*a);
148EXPECT
149/^'GLOB\(0x[0-9a-f]+\)'$/i
150########
151stringify($foo);
152EXPECT
153/^'Foo=ARRAY\(0x[0-9a-f]+\)'$/i
154########
155stringify($bar);
156EXPECT
157/^'Bar=ARRAY\(0x[0-9a-f]+\)'$/i
158########
159dumpValue(undef);
160EXPECT
161undef
162########
fafebdf5
A
163dumpValue(1);
164EXPECT
1651
166########
f97a9a4b
JH
167dumpValue("\cA");
168EXPECT
169"\cA"
170########
171dumpValue("\x{100}");
172EXPECT
173'\x{0100}'
174########
fafebdf5
A
175dumpValue("1\n2\n3");
176EXPECT
177'1
1782
1793'
180########
181dumpValue([1..3],1);
182EXPECT
1830 1
1841 2
1852 3
186########
2c227d66
JH
187dumpValue([1..3]);
188EXPECT
1890 1
1901 2
1912 3
192########
fafebdf5
A
193dumpValue({1..4},1);
194EXPECT
1951 => 2
1963 => 4
197########
2c227d66
JH
198dumpValue({1..4});
199EXPECT
2001 => 2
2013 => 4
202########
f97a9a4b
JH
203dumpValue($foo,1);
204EXPECT
2050 1
2061 2
2072 3
2083 4
2094 5
210########
2c227d66
JH
211dumpValue($foo);
212EXPECT
2130 1
2141 2
2152 3
2163 4
2174 5
218########
f97a9a4b
JH
219dumpValue($bar,1);
220EXPECT
2210 1
2221 2
2232 3
2243 4
2254 5
226########
2c227d66
JH
227dumpValue($bar);
228EXPECT
2290 1
2301 2
2312 3
2323 4
2334 5
234########
9bcb75ad
JM
235dumpvalue("a");
236EXPECT
2370 'a'
238########
239dumpvalue("\cA");
240EXPECT
2410 "\cA"
242########
243dumpvalue("\x{100}");
244EXPECT
2450 '\x{0100}'
246########
247dumpvalue(undef);
248EXPECT
2490 undef
250########
251dumpvalue("foo");
252EXPECT
2530 'foo'
254########
255dumpvalue(\undef);
256EXPECT
257/0 SCALAR\(0x[0-9a-f]+\)\n -> undef\n/i
258########
259dumpvalue(\\undef);
260EXPECT
261/0 REF\(0x[0-9a-f]+\)\n -> SCALAR\(0x[0-9a-f]+\)\n -> undef\n/i
262########
263dumpvalue([]);
264EXPECT
265/0 ARRAY\(0x[0-9a-f]+\)\n empty array/i
266########
267dumpvalue({});
268EXPECT
269/0 HASH\(0x[0-9a-f]+\)\n\s+empty hash/i
270########
271dumpvalue(sub{});
272EXPECT
273/0 CODE\(0x[0-9a-f]+\)\n -> &CODE\(0x[0-9a-f]+\) in /i
274########
275dumpvalue(\*a);
276EXPECT
277/0 GLOB\(0x[0-9a-f]+\)\n -> \*main::a\n/i
278########
279dumpvalue($foo);
280EXPECT
281/0 Foo=ARRAY\(0x[0-9a-f]+\)\n 0 1\n 1 2\n 2 3\n 3 4\n 4 5\n/i
282########
283dumpvalue($bar);
284EXPECT
285/0 Bar=ARRAY\(0x[0-9a-f]+\)\n 0 1\n 1 2\n 2 3\n 3 4\n 4 5\n/i
286########
287dumpvalue("1\n2\n3")
288EXPECT
289/0 '1\n2\n3'\n/i
290########
291dumpvalue([1..4]);
292EXPECT
293/0 ARRAY\(0x[0-9a-f]+\)\n 0 1\n 1 2\n 2 3\n 3 4\n/i
294########
295dumpvalue({1..4});
296EXPECT
297/0 HASH\(0x[0-9a-f]+\)\n 1 => 2\n 3 => 4\n/i
298########
299dumpvalue({1=>2,3=>4});
300EXPECT
301/0 HASH\(0x[0-9a-f]+\)\n 1 => 2\n 3 => 4\n/i
302########
303dumpvalue({a=>1,b=>2});
304EXPECT
305/0 HASH\(0x[0-9a-f]+\)\n 'a' => 1\n 'b' => 2\n/i
306########
307dumpvalue([{a=>[1,2,3],b=>{c=>1,d=>2}},{e=>{f=>1,g=>2},h=>[qw(i j k)]}]);
308EXPECT
309/0 ARRAY\(0x[0-9a-f]+\)\n 0 HASH\(0x[0-9a-f]+\)\n 'a' => ARRAY\(0x[0-9a-f]+\)\n 0 1\n 1 2\n 2 3\n 'b' => HASH\(0x[0-9a-f]+\)\n 'c' => 1\n 'd' => 2\n 1 HASH\(0x[0-9a-f]+\)\n 'e' => HASH\(0x[0-9a-f]+\)\n 'f' => 1\n 'g' => 2\n 'h' => ARRAY\(0x[0-9a-f]+\)\n 0 'i'\n 1 'j'\n 2 'k'/i
310########
311dumpvalue({reverse map {$_=>1} sort qw(the quick brown fox)})
312EXPECT
313/0 HASH\(0x[0-9a-f]+\)\n 1 => 'brown'\n/i
314########
315my @x=qw(a b c); dumpvalue(\@x);
316EXPECT
317/0 ARRAY\(0x[0-9a-f]+\)\n 0 'a'\n 1 'b'\n 2 'c'\n/i
318########
319my %x=(a=>1, b=>2); dumpvalue(\%x);
320EXPECT
321/0 HASH\(0x[0-9a-f]+\)\n 'a' => 1\n 'b' => 2\n/i
d5dd42fa
FC
322########
323dumpvalue(bless[1,2,3,4],"a=b=c");
324EXPECT
325/0 a=b=c=ARRAY\(0x[0-9a-f]+\)\n 0 1\n 1 2\n 2 3\n 3 4\n/i
6cee328e
FC
326########
327local *_; tie $_, 'Tyre'; stringify('');
328EXPECT
329''
330########
331local *_; tie $_, 'Tyre'; unctrl('abc');
332EXPECT
333abc