3 # testsuite for Data::Dumper
8 unshift @INC, '../lib' if -d '../lib';
13 $Data::Dumper::Pad = "#";
23 $t =~ s/([A-Z]+)\(0x[0-9a-f]+\)/$1(0xdeadbeef)/g
24 if ($WANT =~ /deadbeef/);
25 print( ($t eq $WANT and not $@) ? "ok $TNUM\n"
26 : "not ok $TNUM\n--Expected--\n$WANT\n--Got--\n$@$t\n");
30 print $@ ? "not ok $TNUM\n# \$@ says: $@\n" : "ok $TNUM\n";
34 $t =~ s/([A-Z]+)\(0x[0-9a-f]+\)/$1(0xdeadbeef)/g
35 if ($WANT =~ /deadbeef/);
36 print( ($t eq $WANT and not $@) ? "ok $TNUM\n"
37 : "not ok $TNUM\n--Expected--\n$WANT\n--Got--\n$@$t\n");
40 if (defined &Data::Dumper::Dumpxs) {
41 print "### XS extension loaded, will run XS tests\n";
45 print "### XS extensions not loaded, will NOT run XS tests\n";
80 TEST q(Data::Dumper->Dump([$a,$b,$c], [qw(a b c)]));
81 TEST q(Data::Dumper->Dumpxs([$a,$b,$c], [qw(a b c)])) if $XS;
104 $Data::Dumper::Purity = 1; # fill in the holes for eval
105 TEST q(Data::Dumper->Dump([$a, $b], [qw(*a b)])); # print as @a
106 TEST q(Data::Dumper->Dumpxs([$a, $b], [qw(*a b)])) if $XS;
124 #$b{'c'} = $b{'a'}[2];
128 TEST q(Data::Dumper->Dump([$b, $a], [qw(*b a)])); # print as %b
129 TEST q(Data::Dumper->Dumpxs([$b, $a], [qw(*b a)])) if $XS;
144 #$a->[1]{'b'} = $a->[1];
150 $Data::Dumper::Indent = 1;
152 $d = Data::Dumper->new([$a,$b], [qw(a b)]);
153 $d->Seen({'*c' => $c});
158 $d = Data::Dumper->new([$a,$b], [qw(a b)]);
159 $d->Seen({'*c' => $c});
187 $d->Purity(0)->Quotekeys(0);
188 TEST q( $d->Reset; $d->Dump );
190 TEST q( $d->Reset; $d->Dumpxs ) if $XS;
206 #$VAR1->[1]{'a'} = $VAR1;
207 #$VAR1->[1]{'b'} = $VAR1->[1];
208 #$VAR1->[2] = $VAR1->[1]{'c'};
212 TEST q(Data::Dumper::DumperX($a)) if $XS;
231 local $Data::Dumper::Purity = 0;
232 local $Data::Dumper::Quotekeys = 0;
233 local $Data::Dumper::Terse = 1;
235 TEST q(Data::Dumper::DumperX($a)) if $XS;
243 # "abc\0'\efg" => "mno\0"
247 $foo = { "abc\000\'\efg" => "mno\000" };
249 local $Data::Dumper::Useqq = 1;
250 TEST q(Dumper($foo));
255 # 'abc\0\\'\efg' => 'mno\0'
260 local $Data::Dumper::Useqq = 1;
261 TEST q(Data::Dumper::DumperX($foo)) if $XS; # cheat
274 %foo = (a=>1,b=>\$foo,c=>\@foo);
296 #*::foo{ARRAY}->[1] = $foo;
297 #*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR};
298 #*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY};
299 #*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2];
300 #*::foo = *::foo{ARRAY}->[2];
301 #@bar = @{*::foo{ARRAY}};
302 #%baz = %{*::foo{ARRAY}->[2]};
305 $Data::Dumper::Purity = 1;
306 $Data::Dumper::Indent = 3;
307 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz']));
308 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz'])) if $XS;
325 #*::foo{ARRAY}->[1] = $foo;
326 #*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR};
327 #*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY};
328 #*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2];
329 #*::foo = *::foo{ARRAY}->[2];
330 #$bar = *::foo{ARRAY};
331 #$baz = *::foo{ARRAY}->[2];
334 $Data::Dumper::Indent = 1;
335 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz']));
336 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz'])) if $XS;
354 #*::foo{HASH}->{'b'} = *::foo{SCALAR};
355 #*::foo{HASH}->{'c'} = \@bar;
356 #*::foo{HASH}->{'d'} = *::foo{HASH};
357 #$bar[2] = *::foo{HASH};
358 #%baz = %{*::foo{HASH}};
362 TEST q(Data::Dumper->Dump([\\@foo, \\%foo, \\*foo], ['*bar', '*baz', '*foo']));
363 TEST q(Data::Dumper->Dumpxs([\\@foo, \\%foo, \\*foo], ['*bar', '*baz', '*foo'])) if $XS;
381 #*::foo{HASH}->{'b'} = *::foo{SCALAR};
382 #*::foo{HASH}->{'c'} = $bar;
383 #*::foo{HASH}->{'d'} = *::foo{HASH};
384 #$bar->[2] = *::foo{HASH};
385 #$baz = *::foo{HASH};
389 TEST q(Data::Dumper->Dump([\\@foo, \\%foo, \\*foo], ['bar', 'baz', 'foo']));
390 TEST q(Data::Dumper->Dumpxs([\\@foo, \\%foo, \\*foo], ['bar', 'baz', 'foo'])) if $XS;
409 $Data::Dumper::Purity = 0;
410 $Data::Dumper::Quotekeys = 0;
411 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz']));
412 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz'])) if $XS;
431 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz']));
432 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz'])) if $XS;
440 @dogs = ( 'Fido', 'Wags' );
447 $mutts = $mutts; # avoid warning
457 # ${$kennels{First}},
458 # ${$kennels{Second}},
465 $d = Data::Dumper->new([\\%kennel, \\@dogs, $mutts],
466 [qw(*kennels *dogs *mutts)] );
471 $d = Data::Dumper->new([\\%kennel, \\@dogs, $mutts],
472 [qw(*kennels *dogs *mutts)] );
480 #%kennels = %kennels;
486 TEST q($d->Dumpxs) if $XS;
496 # ${$kennels{First}},
497 # ${$kennels{Second}},
504 TEST q($d->Reset; $d->Dump);
506 TEST q($d->Reset; $d->Dumpxs);
516 # First => \$dogs[0],
517 # Second => \$dogs[1]
520 #%kennels = %{$dogs[2]};
521 #%mutts = %{$dogs[2]};
525 $d = Data::Dumper->new([\\@dogs, \\%kennel, $mutts],
526 [qw(*dogs *kennels *mutts)] );
531 $d = Data::Dumper->new([\\@dogs, \\%kennel, $mutts],
532 [qw(*dogs *kennels *mutts)] );
539 TEST q($d->Reset->Dump);
541 TEST q($d->Reset->Dumpxs);
562 $d = Data::Dumper->new( [\@dogs, \%kennel], [qw(*dogs *kennels)] );
563 $d->Deepcopy(1)->Dump;
566 TEST q($d->Reset->Dumpxs);
573 sub z { print "foo\n" }
585 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'b' => \&z})->Dump;);
586 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'b' => \&z})->Dumpxs;)
598 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'*b' => \&z})->Dump;);
599 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'*b' => \&z})->Dumpxs;)
611 TEST q(Data::Dumper->new([\&z,$c],['*a','*c'])->Seen({'*b' => \&z})->Dump;);
612 TEST q(Data::Dumper->new([\&z,$c],['*a','*c'])->Seen({'*b' => \&z})->Dumpxs;)
631 TEST q(Data::Dumper->new([$a],['*a'])->Purity(1)->Dump;);
632 TEST q(Data::Dumper->new([$a],['*a'])->Purity(1)->Dumpxs;)
647 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dump;);
648 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dumpxs;)
653 $a = [{ a => \$b }, { b => undef }];
654 $b = [{ c => \$b }, { d => \$a }];
674 #${$a->[0]{a}}->[0]->{c} = $a->[0]{a};
675 #${${$a->[0]{a}}->[1]->{d}} = $a;
679 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dump;);
680 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dumpxs;)
685 $a = [[[[\\\\\'foo']]]];
702 #$c = ${${$a->[0][0][0][0]}};
705 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Purity(1)->Dump;);
706 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Purity(1)->Dumpxs;)
725 # e => 'ARRAY(0xdeadbeef)'
734 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(4)->Dump;);
735 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(4)->Dumpxs;)
742 # b => 'HASH(0xdeadbeef)'
750 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(1)->Dump;);
751 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(1)->Dumpxs;)