1 #!./perl -- -*- mode: cperl; cperl-indent-level: 4 -*-
7 if (($Config::Config{'extensions'} !~ m!\bList/Util\b!) ){
8 print "1..0 # Skip -- Perl configured without List::Util module\n";
20 @prgs = split "########\n", <DATA>;
28 sub unctrl { print dumpvar::unctrl($_[0]), "\n" }
29 sub uniescape { print dumpvar::uniescape($_[0]), "\n" }
30 sub stringify { print dumpvar::stringify($_[0]), "\n" }
32 # Call main::dumpValue exactly as the perl5db.pl calls it.
37 &main::dumpValue(\@params,-1);
42 sub new { my $class = shift; bless [ @_ ], $class }
46 sub new { my $class = shift; bless [ @_ ], $class }
48 use overload '""' => sub { "Bar<@{$_[0]}>" };
52 sub TIESCALAR{bless[]}
53 # other methods intentionally omitted
58 # other methods intentionally omitted
62 my $foo = Foo->new(1..5);
63 my $bar = Bar->new(1..5);
66 my($prog, $expected) = split(/\nEXPECT\n?/, $_);
67 # TODO: dumpvar::stringify() is controlled by a pile of package
68 # dumpvar variables: $printUndef, $unctrl, $quoteHighBit, $bareStringify,
69 # and so forth. We need to test with various settings of those.
70 my $out = tie *STDOUT, 'TieOut';
75 ok(0, "$prog - $ERR");
77 if ($expected =~ m:^/:) {
78 like($$out, $expected, $prog);
80 is($$out, $expected, $prog);
90 bless( \(my $self), $_[0] );
95 $$self .= join('', @_);
100 substr( $$self, 0, length($$self), '' );
116 uniescape("\x{100}");
138 /^'SCALAR\(0x[0-9a-f]+\)'$/i
142 /^'ARRAY\(0x[0-9a-f]+\)'$/i
146 /^'HASH\(0x[0-9a-f]+\)'$/i
150 /^'CODE\(0x[0-9a-f]+\)'$/i
154 /^'GLOB\(0x[0-9a-f]+\)'$/i
158 /^'Foo=ARRAY\(0x[0-9a-f]+\)'$/i
162 /^'Bar=ARRAY\(0x[0-9a-f]+\)'$/i
176 dumpValue("\x{100}");
180 dumpValue("1\n2\n3");
248 dumpvalue("\x{100}");
262 /0 SCALAR\(0x[0-9a-f]+\)\n -> undef\n/i
266 /0 REF\(0x[0-9a-f]+\)\n -> SCALAR\(0x[0-9a-f]+\)\n -> undef\n/i
270 /0 ARRAY\(0x[0-9a-f]+\)\n empty array/i
274 /0 HASH\(0x[0-9a-f]+\)\n\s+empty hash/i
278 /0 CODE\(0x[0-9a-f]+\)\n -> &CODE\(0x[0-9a-f]+\) in /i
282 /0 GLOB\(0x[0-9a-f]+\)\n -> \*main::a\n/i
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
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
298 /0 ARRAY\(0x[0-9a-f]+\)\n 0 1\n 1 2\n 2 3\n 3 4\n/i
302 /0 HASH\(0x[0-9a-f]+\)\n 1 => 2\n 3 => 4\n/i
304 dumpvalue({1=>2,3=>4});
306 /0 HASH\(0x[0-9a-f]+\)\n 1 => 2\n 3 => 4\n/i
308 dumpvalue({a=>1,b=>2});
310 /0 HASH\(0x[0-9a-f]+\)\n 'a' => 1\n 'b' => 2\n/i
312 dumpvalue([{a=>[1,2,3],b=>{c=>1,d=>2}},{e=>{f=>1,g=>2},h=>[qw(i j k)]}]);
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
316 dumpvalue({reverse map {$_=>1} sort qw(the quick brown fox)})
318 /0 HASH\(0x[0-9a-f]+\)\n 1 => 'brown'\n/i
320 my @x=qw(a b c); dumpvalue(\@x);
322 /0 ARRAY\(0x[0-9a-f]+\)\n 0 'a'\n 1 'b'\n 2 'c'\n/i
324 my %x=(a=>1, b=>2); dumpvalue(\%x);
326 /0 HASH\(0x[0-9a-f]+\)\n 'a' => 1\n 'b' => 2\n/i
328 dumpvalue(bless[1,2,3,4],"a=b=c");
330 /0 a=b=c=ARRAY\(0x[0-9a-f]+\)\n 0 1\n 1 2\n 2 3\n 3 4\n/i
332 local *_; tie $_, 'Tyre'; stringify('');
336 local *_; tie $_, 'Tyre'; unctrl('abc');
340 tie my %h, 'Kerb'; my $v = { a => 1, b => \%h, c => 2 }; dumpvalue($v);
342 /'a' => 1\n.+Can't locate object method.+'c' => 2/s