3 # testsuite for Data::Dumper
8 unshift @INC, '../lib' if -d '../lib';
13 my $Is_ebcdic = defined($Config{'ebcdic'}) && $Config{'ebcdic'} eq 'define';
15 $Data::Dumper::Pad = "#";
25 $t =~ s/([A-Z]+)\(0x[0-9a-f]+\)/$1(0xdeadbeef)/g
26 if ($WANT =~ /deadbeef/);
27 print( ($t eq $WANT and not $@) ? "ok $TNUM\n"
28 : "not ok $TNUM\n--Expected--\n$WANT\n--Got--\n$@$t\n");
32 print $@ ? "not ok $TNUM\n# \$@ says: $@\n" : "ok $TNUM\n";
36 $t =~ s/([A-Z]+)\(0x[0-9a-f]+\)/$1(0xdeadbeef)/g
37 if ($WANT =~ /deadbeef/);
38 print( ($t eq $WANT and not $@) ? "ok $TNUM\n"
39 : "not ok $TNUM\n--Expected--\n$WANT\n--Got--\n$@$t\n");
42 if (defined &Data::Dumper::Dumpxs) {
43 print "### XS extension loaded, will run XS tests\n";
47 print "### XS extensions not loaded, will NOT run XS tests\n";
82 TEST q(Data::Dumper->Dump([$a,$b,$c], [qw(a b c)]));
83 TEST q(Data::Dumper->Dumpxs([$a,$b,$c], [qw(a b c)])) if $XS;
106 $Data::Dumper::Purity = 1; # fill in the holes for eval
107 TEST q(Data::Dumper->Dump([$a, $b], [qw(*a b)])); # print as @a
108 TEST q(Data::Dumper->Dumpxs([$a, $b], [qw(*a b)])) if $XS;
126 #$b{'c'} = $b{'a'}[2];
130 TEST q(Data::Dumper->Dump([$b, $a], [qw(*b a)])); # print as %b
131 TEST q(Data::Dumper->Dumpxs([$b, $a], [qw(*b a)])) if $XS;
146 #$a->[1]{'b'} = $a->[1];
152 $Data::Dumper::Indent = 1;
154 $d = Data::Dumper->new([$a,$b], [qw(a b)]);
155 $d->Seen({'*c' => $c});
160 $d = Data::Dumper->new([$a,$b], [qw(a b)]);
161 $d->Seen({'*c' => $c});
189 $d->Purity(0)->Quotekeys(0);
190 TEST q( $d->Reset; $d->Dump );
192 TEST q( $d->Reset; $d->Dumpxs ) if $XS;
208 #$VAR1->[1]{'a'} = $VAR1;
209 #$VAR1->[1]{'b'} = $VAR1->[1];
210 #$VAR1->[2] = $VAR1->[1]{'c'};
214 TEST q(Data::Dumper::DumperX($a)) if $XS;
233 local $Data::Dumper::Purity = 0;
234 local $Data::Dumper::Quotekeys = 0;
235 local $Data::Dumper::Terse = 1;
237 TEST q(Data::Dumper::DumperX($a)) if $XS;
246 # "abc\0'\efg" => "mno\0"
253 # "\\201\\202\\203\\340\\360'\e\\206\\207" => "\\224\\225\\226\\340\\360"
258 $foo = { "abc\000\'\efg" => "mno\000" };
260 local $Data::Dumper::Useqq = 1;
261 TEST q(Dumper($foo));
266 # 'abc\0\\'\efg' => 'mno\0'
271 local $Data::Dumper::Useqq = 1;
272 TEST q(Data::Dumper::DumperX($foo)) if $XS; # cheat
285 %foo = (a=>1,b=>\$foo,c=>\@foo);
308 #*::foo{ARRAY}->[1] = $foo;
309 #*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR};
310 #*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY};
311 #*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2];
312 #*::foo = *::foo{ARRAY}->[2];
313 #@bar = @{*::foo{ARRAY}};
314 #%baz = %{*::foo{ARRAY}->[2]};
334 #*::foo{ARRAY}->[1] = $foo;
335 #*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2];
336 #*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR};
337 #*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY};
338 #*::foo = *::foo{ARRAY}->[2];
339 #@bar = @{*::foo{ARRAY}};
340 #%baz = %{*::foo{ARRAY}->[2]};
344 $Data::Dumper::Purity = 1;
345 $Data::Dumper::Indent = 3;
346 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz']));
347 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz'])) if $XS;
365 #*::foo{ARRAY}->[1] = $foo;
366 #*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR};
367 #*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY};
368 #*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2];
369 #*::foo = *::foo{ARRAY}->[2];
370 #$bar = *::foo{ARRAY};
371 #$baz = *::foo{ARRAY}->[2];
388 #*::foo{ARRAY}->[1] = $foo;
389 #*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2];
390 #*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR};
391 #*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY};
392 #*::foo = *::foo{ARRAY}->[2];
393 #$bar = *::foo{ARRAY};
394 #$baz = *::foo{ARRAY}->[2];
398 $Data::Dumper::Indent = 1;
399 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz']));
400 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz'])) if $XS;
419 #*::foo{HASH}->{'b'} = *::foo{SCALAR};
420 #*::foo{HASH}->{'c'} = \@bar;
421 #*::foo{HASH}->{'d'} = *::foo{HASH};
422 #$bar[2] = *::foo{HASH};
423 #%baz = %{*::foo{HASH}};
442 #*::foo{HASH}->{'d'} = *::foo{HASH};
443 #*::foo{HASH}->{'b'} = *::foo{SCALAR};
444 #*::foo{HASH}->{'c'} = \@bar;
445 #$bar[2] = *::foo{HASH};
446 #%baz = %{*::foo{HASH}};
451 TEST q(Data::Dumper->Dump([\\@foo, \\%foo, \\*foo], ['*bar', '*baz', '*foo']));
452 TEST q(Data::Dumper->Dumpxs([\\@foo, \\%foo, \\*foo], ['*bar', '*baz', '*foo'])) if $XS;
471 #*::foo{HASH}->{'b'} = *::foo{SCALAR};
472 #*::foo{HASH}->{'c'} = $bar;
473 #*::foo{HASH}->{'d'} = *::foo{HASH};
474 #$bar->[2] = *::foo{HASH};
475 #$baz = *::foo{HASH};
494 #*::foo{HASH}->{'d'} = *::foo{HASH};
495 #*::foo{HASH}->{'b'} = *::foo{SCALAR};
496 #*::foo{HASH}->{'c'} = $bar;
497 #$bar->[2] = *::foo{HASH};
498 #$baz = *::foo{HASH};
503 TEST q(Data::Dumper->Dump([\\@foo, \\%foo, \\*foo], ['bar', 'baz', 'foo']));
504 TEST q(Data::Dumper->Dumpxs([\\@foo, \\%foo, \\*foo], ['bar', 'baz', 'foo'])) if $XS;
541 $Data::Dumper::Purity = 0;
542 $Data::Dumper::Quotekeys = 0;
543 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz']));
544 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz'])) if $XS;
581 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz']));
582 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz'])) if $XS;
590 @dogs = ( 'Fido', 'Wags' );
597 $mutts = $mutts; # avoid warning
608 # ${$kennels{First}},
609 # ${$kennels{Second}},
622 # ${$kennels{First}},
623 # ${$kennels{Second}},
631 $d = Data::Dumper->new([\\%kennel, \\@dogs, $mutts],
632 [qw(*kennels *dogs *mutts)] );
637 $d = Data::Dumper->new([\\%kennel, \\@dogs, $mutts],
638 [qw(*kennels *dogs *mutts)] );
646 #%kennels = %kennels;
652 TEST q($d->Dumpxs) if $XS;
663 # ${$kennels{First}},
664 # ${$kennels{Second}},
677 # ${$kennels{First}},
678 # ${$kennels{Second}},
686 TEST q($d->Reset; $d->Dump);
688 TEST q($d->Reset; $d->Dumpxs);
699 # First => \$dogs[0],
700 # Second => \$dogs[1]
703 #%kennels = %{$dogs[2]};
704 #%mutts = %{$dogs[2]};
713 # Second => \$dogs[1],
717 #%kennels = %{$dogs[2]};
718 #%mutts = %{$dogs[2]};
723 $d = Data::Dumper->new([\\@dogs, \\%kennel, $mutts],
724 [qw(*dogs *kennels *mutts)] );
729 $d = Data::Dumper->new([\\@dogs, \\%kennel, $mutts],
730 [qw(*dogs *kennels *mutts)] );
737 TEST q($d->Reset->Dump);
739 TEST q($d->Reset->Dumpxs);
778 $d = Data::Dumper->new( [\@dogs, \%kennel], [qw(*dogs *kennels)] );
779 $d->Deepcopy(1)->Dump;
782 TEST q($d->Reset->Dumpxs);
789 sub z { print "foo\n" }
801 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'b' => \&z})->Dump;);
802 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'b' => \&z})->Dumpxs;)
814 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'*b' => \&z})->Dump;);
815 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'*b' => \&z})->Dumpxs;)
827 TEST q(Data::Dumper->new([\&z,$c],['*a','*c'])->Seen({'*b' => \&z})->Dump;);
828 TEST q(Data::Dumper->new([\&z,$c],['*a','*c'])->Seen({'*b' => \&z})->Dumpxs;)
847 TEST q(Data::Dumper->new([$a],['*a'])->Purity(1)->Dump;);
848 TEST q(Data::Dumper->new([$a],['*a'])->Purity(1)->Dumpxs;)
863 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dump;);
864 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dumpxs;)
869 $a = [{ a => \$b }, { b => undef }];
870 $b = [{ c => \$b }, { d => \$a }];
890 #${$a->[0]{a}}->[0]->{c} = $a->[0]{a};
891 #${${$a->[0]{a}}->[1]->{d}} = $a;
895 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dump;);
896 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dumpxs;)
901 $a = [[[[\\\\\'foo']]]];
918 #$c = ${${$a->[0][0][0][0]}};
921 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Purity(1)->Dump;);
922 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Purity(1)->Dumpxs;)
941 # e => 'ARRAY(0xdeadbeef)'
950 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(4)->Dump;);
951 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(4)->Dumpxs;)
958 # b => 'HASH(0xdeadbeef)'
966 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(1)->Dump;);
967 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(1)->Dumpxs;)