This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
More updates to Module-CoreList for Perl 5.20.2
[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
0d0268b0
RS
57package Kerb;
58
59sub TIEHASH{bless{}}
60# other methods intentionally omitted
61
f97a9a4b
JH
62package main;
63
64my $foo = Foo->new(1..5);
65my $bar = Bar->new(1..5);
66
96b31d9e
JH
67for (@prgs) {
68 my($prog, $expected) = split(/\nEXPECT\n?/, $_);
f97a9a4b
JH
69 # TODO: dumpvar::stringify() is controlled by a pile of package
70 # dumpvar variables: $printUndef, $unctrl, $quoteHighBit, $bareStringify,
71 # and so forth. We need to test with various settings of those.
1d8663a3 72 my $out = tie *STDOUT, 'TieOut';
fafebdf5 73 eval $prog;
96b31d9e 74 my $ERR = $@;
1d8663a3 75 untie $out;
96b31d9e
JH
76 if ($ERR) {
77 ok(0, "$prog - $ERR");
78 } else {
f97a9a4b 79 if ($expected =~ m:^/:) {
1d8663a3 80 like($$out, $expected, $prog);
f97a9a4b 81 } else {
1d8663a3 82 is($$out, $expected, $prog);
f97a9a4b 83 }
96b31d9e 84 }
fafebdf5
A
85}
86
1d8663a3
JH
87package TieOut;
88
89sub TIEHANDLE {
90 bless( \(my $self), $_[0] );
91}
92
93sub PRINT {
94 my $self = shift;
95 $$self .= join('', @_);
96}
97
98sub read {
99 my $self = shift;
100 substr( $$self, 0, length($$self), '' );
101}
102
fafebdf5 103__END__
f97a9a4b
JH
104unctrl("A");
105EXPECT
106A
107########
108unctrl("\cA");
109EXPECT
110^A
111########
112uniescape("A");
113EXPECT
114A
115########
116uniescape("\x{100}");
117EXPECT
118\x{0100}
119########
120stringify(undef);
121EXPECT
122undef
123########
124stringify("foo");
125EXPECT
126'foo'
127########
128stringify("\cA");
129EXPECT
130"\cA"
131########
132stringify(*a);
133EXPECT
134*main::a
135########
136stringify(\undef);
137EXPECT
138/^'SCALAR\(0x[0-9a-f]+\)'$/i
139########
140stringify([]);
141EXPECT
142/^'ARRAY\(0x[0-9a-f]+\)'$/i
143########
144stringify({});
145EXPECT
146/^'HASH\(0x[0-9a-f]+\)'$/i
147########
148stringify(sub{});
149EXPECT
150/^'CODE\(0x[0-9a-f]+\)'$/i
151########
152stringify(\*a);
153EXPECT
154/^'GLOB\(0x[0-9a-f]+\)'$/i
155########
156stringify($foo);
157EXPECT
158/^'Foo=ARRAY\(0x[0-9a-f]+\)'$/i
159########
160stringify($bar);
161EXPECT
162/^'Bar=ARRAY\(0x[0-9a-f]+\)'$/i
163########
164dumpValue(undef);
165EXPECT
166undef
167########
fafebdf5
A
168dumpValue(1);
169EXPECT
1701
171########
f97a9a4b
JH
172dumpValue("\cA");
173EXPECT
174"\cA"
175########
176dumpValue("\x{100}");
177EXPECT
178'\x{0100}'
179########
fafebdf5
A
180dumpValue("1\n2\n3");
181EXPECT
182'1
1832
1843'
185########
186dumpValue([1..3],1);
187EXPECT
1880 1
1891 2
1902 3
191########
2c227d66
JH
192dumpValue([1..3]);
193EXPECT
1940 1
1951 2
1962 3
197########
fafebdf5
A
198dumpValue({1..4},1);
199EXPECT
2001 => 2
2013 => 4
202########
2c227d66
JH
203dumpValue({1..4});
204EXPECT
2051 => 2
2063 => 4
207########
f97a9a4b
JH
208dumpValue($foo,1);
209EXPECT
2100 1
2111 2
2122 3
2133 4
2144 5
215########
2c227d66
JH
216dumpValue($foo);
217EXPECT
2180 1
2191 2
2202 3
2213 4
2224 5
223########
f97a9a4b
JH
224dumpValue($bar,1);
225EXPECT
2260 1
2271 2
2282 3
2293 4
2304 5
231########
2c227d66
JH
232dumpValue($bar);
233EXPECT
2340 1
2351 2
2362 3
2373 4
2384 5
239########
9bcb75ad
JM
240dumpvalue("a");
241EXPECT
2420 'a'
243########
244dumpvalue("\cA");
245EXPECT
2460 "\cA"
247########
248dumpvalue("\x{100}");
249EXPECT
2500 '\x{0100}'
251########
252dumpvalue(undef);
253EXPECT
2540 undef
255########
256dumpvalue("foo");
257EXPECT
2580 'foo'
259########
260dumpvalue(\undef);
261EXPECT
262/0 SCALAR\(0x[0-9a-f]+\)\n -> undef\n/i
263########
264dumpvalue(\\undef);
265EXPECT
266/0 REF\(0x[0-9a-f]+\)\n -> SCALAR\(0x[0-9a-f]+\)\n -> undef\n/i
267########
268dumpvalue([]);
269EXPECT
270/0 ARRAY\(0x[0-9a-f]+\)\n empty array/i
271########
272dumpvalue({});
273EXPECT
274/0 HASH\(0x[0-9a-f]+\)\n\s+empty hash/i
275########
276dumpvalue(sub{});
277EXPECT
278/0 CODE\(0x[0-9a-f]+\)\n -> &CODE\(0x[0-9a-f]+\) in /i
279########
280dumpvalue(\*a);
281EXPECT
282/0 GLOB\(0x[0-9a-f]+\)\n -> \*main::a\n/i
283########
284dumpvalue($foo);
285EXPECT
286/0 Foo=ARRAY\(0x[0-9a-f]+\)\n 0 1\n 1 2\n 2 3\n 3 4\n 4 5\n/i
287########
288dumpvalue($bar);
289EXPECT
290/0 Bar=ARRAY\(0x[0-9a-f]+\)\n 0 1\n 1 2\n 2 3\n 3 4\n 4 5\n/i
291########
292dumpvalue("1\n2\n3")
293EXPECT
294/0 '1\n2\n3'\n/i
295########
296dumpvalue([1..4]);
297EXPECT
298/0 ARRAY\(0x[0-9a-f]+\)\n 0 1\n 1 2\n 2 3\n 3 4\n/i
299########
300dumpvalue({1..4});
301EXPECT
302/0 HASH\(0x[0-9a-f]+\)\n 1 => 2\n 3 => 4\n/i
303########
304dumpvalue({1=>2,3=>4});
305EXPECT
306/0 HASH\(0x[0-9a-f]+\)\n 1 => 2\n 3 => 4\n/i
307########
308dumpvalue({a=>1,b=>2});
309EXPECT
310/0 HASH\(0x[0-9a-f]+\)\n 'a' => 1\n 'b' => 2\n/i
311########
312dumpvalue([{a=>[1,2,3],b=>{c=>1,d=>2}},{e=>{f=>1,g=>2},h=>[qw(i j k)]}]);
313EXPECT
314/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
315########
316dumpvalue({reverse map {$_=>1} sort qw(the quick brown fox)})
317EXPECT
318/0 HASH\(0x[0-9a-f]+\)\n 1 => 'brown'\n/i
319########
320my @x=qw(a b c); dumpvalue(\@x);
321EXPECT
322/0 ARRAY\(0x[0-9a-f]+\)\n 0 'a'\n 1 'b'\n 2 'c'\n/i
323########
324my %x=(a=>1, b=>2); dumpvalue(\%x);
325EXPECT
326/0 HASH\(0x[0-9a-f]+\)\n 'a' => 1\n 'b' => 2\n/i
d5dd42fa
FC
327########
328dumpvalue(bless[1,2,3,4],"a=b=c");
329EXPECT
330/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
331########
332local *_; tie $_, 'Tyre'; stringify('');
333EXPECT
334''
335########
336local *_; tie $_, 'Tyre'; unctrl('abc');
337EXPECT
338abc
0d0268b0
RS
339########
340tie my %h, 'Kerb'; my $v = { a => 1, b => \%h, c => 2 }; dumpvalue($v);
341EXPECT
342/'a' => 1\n.+Can't locate object method.+'c' => 2/s