3 # testsuite for Data::Dumper
8 @INC = '../lib' if -d '../lib';
13 my $Is_ebcdic = defined($Config{'ebcdic'}) && $Config{'ebcdic'} eq 'define';
15 $Data::Dumper::Pad = "#";
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 print( ($t eq $WANT and not $@) ? "ok $TNUM\n"
35 : "not ok $TNUM\n--Expected--\n$WANT\n--Got--\n$@$t\n");
38 if (defined &Data::Dumper::Dumpxs) {
39 print "### XS extension loaded, will run XS tests\n";
43 print "### XS extensions not loaded, will NOT run XS tests\n";
78 TEST q(Data::Dumper->Dump([$a,$b,$c], [qw(a b c)]));
79 TEST q(Data::Dumper->Dumpxs([$a,$b,$c], [qw(a b c)])) if $XS;
102 $Data::Dumper::Purity = 1; # fill in the holes for eval
103 TEST q(Data::Dumper->Dump([$a, $b], [qw(*a b)])); # print as @a
104 TEST q(Data::Dumper->Dumpxs([$a, $b], [qw(*a b)])) if $XS;
122 #$b{'c'} = $b{'a'}[2];
126 TEST q(Data::Dumper->Dump([$b, $a], [qw(*b a)])); # print as %b
127 TEST q(Data::Dumper->Dumpxs([$b, $a], [qw(*b a)])) if $XS;
142 #$a->[1]{'b'} = $a->[1];
148 $Data::Dumper::Indent = 1;
150 $d = Data::Dumper->new([$a,$b], [qw(a b)]);
151 $d->Seen({'*c' => $c});
156 $d = Data::Dumper->new([$a,$b], [qw(a b)]);
157 $d->Seen({'*c' => $c});
185 $d->Purity(0)->Quotekeys(0);
186 TEST q( $d->Reset; $d->Dump );
188 TEST q( $d->Reset; $d->Dumpxs ) if $XS;
204 #$VAR1->[1]{'a'} = $VAR1;
205 #$VAR1->[1]{'b'} = $VAR1->[1];
206 #$VAR1->[2] = $VAR1->[1]{'c'};
210 TEST q(Data::Dumper::DumperX($a)) if $XS;
229 local $Data::Dumper::Purity = 0;
230 local $Data::Dumper::Quotekeys = 0;
231 local $Data::Dumper::Terse = 1;
233 TEST q(Data::Dumper::DumperX($a)) if $XS;
242 # "abc\0'\efg" => "mno\0"
249 # "\201\202\203\340\360'\340\205\206\207" => "\224\225\226\340\360"
254 $foo = { "abc\000\'\efg" => "mno\000" };
256 local $Data::Dumper::Useqq = 1;
257 TEST q(Dumper($foo));
262 # 'abc\0\\'\efg' => 'mno\0'
267 local $Data::Dumper::Useqq = 1;
268 TEST q(Data::Dumper::DumperX($foo)) if $XS; # cheat
281 %foo = (a=>1,b=>\$foo,c=>\@foo);
303 #*::foo{ARRAY}->[1] = $foo;
304 #*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR};
305 #*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY};
306 #*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2];
307 #*::foo = *::foo{ARRAY}->[2];
308 #@bar = @{*::foo{ARRAY}};
309 #%baz = %{*::foo{ARRAY}->[2]};
312 $Data::Dumper::Purity = 1;
313 $Data::Dumper::Indent = 3;
314 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz']));
315 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz'])) if $XS;
332 #*::foo{ARRAY}->[1] = $foo;
333 #*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR};
334 #*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY};
335 #*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2];
336 #*::foo = *::foo{ARRAY}->[2];
337 #$bar = *::foo{ARRAY};
338 #$baz = *::foo{ARRAY}->[2];
341 $Data::Dumper::Indent = 1;
342 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz']));
343 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz'])) if $XS;
361 #*::foo{HASH}->{'b'} = *::foo{SCALAR};
362 #*::foo{HASH}->{'c'} = \@bar;
363 #*::foo{HASH}->{'d'} = *::foo{HASH};
364 #$bar[2] = *::foo{HASH};
365 #%baz = %{*::foo{HASH}};
369 TEST q(Data::Dumper->Dump([\\@foo, \\%foo, \\*foo], ['*bar', '*baz', '*foo']));
370 TEST q(Data::Dumper->Dumpxs([\\@foo, \\%foo, \\*foo], ['*bar', '*baz', '*foo'])) if $XS;
388 #*::foo{HASH}->{'b'} = *::foo{SCALAR};
389 #*::foo{HASH}->{'c'} = $bar;
390 #*::foo{HASH}->{'d'} = *::foo{HASH};
391 #$bar->[2] = *::foo{HASH};
392 #$baz = *::foo{HASH};
396 TEST q(Data::Dumper->Dump([\\@foo, \\%foo, \\*foo], ['bar', 'baz', 'foo']));
397 TEST q(Data::Dumper->Dumpxs([\\@foo, \\%foo, \\*foo], ['bar', 'baz', 'foo'])) if $XS;
416 $Data::Dumper::Purity = 0;
417 $Data::Dumper::Quotekeys = 0;
418 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz']));
419 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz'])) if $XS;
438 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz']));
439 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz'])) if $XS;
447 @dogs = ( 'Fido', 'Wags' );
454 $mutts = $mutts; # avoid warning
465 # ${$kennels{First}},
466 # ${$kennels{Second}},
479 # ${$kennels{First}},
480 # ${$kennels{Second}},
488 $d = Data::Dumper->new([\\%kennel, \\@dogs, $mutts],
489 [qw(*kennels *dogs *mutts)] );
494 $d = Data::Dumper->new([\\%kennel, \\@dogs, $mutts],
495 [qw(*kennels *dogs *mutts)] );
503 #%kennels = %kennels;
509 TEST q($d->Dumpxs) if $XS;
520 # ${$kennels{First}},
521 # ${$kennels{Second}},
534 # ${$kennels{First}},
535 # ${$kennels{Second}},
542 TEST q($d->Reset; $d->Dump);
544 TEST q($d->Reset; $d->Dumpxs);
555 # First => \$dogs[0],
556 # Second => \$dogs[1]
559 #%kennels = %{$dogs[2]};
560 #%mutts = %{$dogs[2]};
569 # Second => \$dogs[1],
573 #%kennels = %{$dogs[2]};
574 #%mutts = %{$dogs[2]};
579 $d = Data::Dumper->new([\\@dogs, \\%kennel, $mutts],
580 [qw(*dogs *kennels *mutts)] );
585 $d = Data::Dumper->new([\\@dogs, \\%kennel, $mutts],
586 [qw(*dogs *kennels *mutts)] );
593 TEST q($d->Reset->Dump);
595 TEST q($d->Reset->Dumpxs);
634 $d = Data::Dumper->new( [\@dogs, \%kennel], [qw(*dogs *kennels)] );
635 $d->Deepcopy(1)->Dump;
638 TEST q($d->Reset->Dumpxs);
645 sub z { print "foo\n" }
657 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'b' => \&z})->Dump;);
658 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'b' => \&z})->Dumpxs;)
670 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'*b' => \&z})->Dump;);
671 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'*b' => \&z})->Dumpxs;)
683 TEST q(Data::Dumper->new([\&z,$c],['*a','*c'])->Seen({'*b' => \&z})->Dump;);
684 TEST q(Data::Dumper->new([\&z,$c],['*a','*c'])->Seen({'*b' => \&z})->Dumpxs;)
703 TEST q(Data::Dumper->new([$a],['*a'])->Purity(1)->Dump;);
704 TEST q(Data::Dumper->new([$a],['*a'])->Purity(1)->Dumpxs;)
719 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dump;);
720 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dumpxs;)
725 $a = [{ a => \$b }, { b => undef }];
726 $b = [{ c => \$b }, { d => \$a }];
746 #${$a->[0]{a}}->[0]->{c} = $a->[0]{a};
747 #${${$a->[0]{a}}->[1]->{d}} = $a;
751 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dump;);
752 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dumpxs;)
757 $a = [[[[\\\\\'foo']]]];
774 #$c = ${${$a->[0][0][0][0]}};
777 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Purity(1)->Dump;);
778 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Purity(1)->Dumpxs;)