3 # testsuite for Data::Dumper
8 @INC = '../lib' if -d '../lib';
13 $Data::Dumper::Pad = "#";
23 print( ($t eq $WANT and not $@) ? "ok $TNUM\n"
24 : "not ok $TNUM\n--Expected--\n$WANT\n--Got--\n$@$t\n");
28 print $@ ? "not ok $TNUM\n# \$@ says: $@\n" : "ok $TNUM\n";
32 print( ($t eq $WANT and not $@) ? "ok $TNUM\n"
33 : "not ok $TNUM\n--Expected--\n$WANT\n--Got--\n$@$t\n");
36 if (defined &Data::Dumper::Dumpxs) {
37 print "### XS extension loaded, will run XS tests\n";
41 print "### XS extensions not loaded, will NOT run XS tests\n";
76 TEST q(Data::Dumper->Dump([$a,$b,$c], [qw(a b c)]));
77 TEST q(Data::Dumper->Dumpxs([$a,$b,$c], [qw(a b c)])) if $XS;
100 $Data::Dumper::Purity = 1; # fill in the holes for eval
101 TEST q(Data::Dumper->Dump([$a, $b], [qw(*a b)])); # print as @a
102 TEST q(Data::Dumper->Dumpxs([$a, $b], [qw(*a b)])) if $XS;
120 #$b{'c'} = $b{'a'}[2];
124 TEST q(Data::Dumper->Dump([$b, $a], [qw(*b a)])); # print as %b
125 TEST q(Data::Dumper->Dumpxs([$b, $a], [qw(*b a)])) if $XS;
140 #$a->[1]{'b'} = $a->[1];
146 $Data::Dumper::Indent = 1;
148 $d = Data::Dumper->new([$a,$b], [qw(a b)]);
149 $d->Seen({'*c' => $c});
154 $d = Data::Dumper->new([$a,$b], [qw(a b)]);
155 $d->Seen({'*c' => $c});
183 $d->Purity(0)->Quotekeys(0);
184 TEST q( $d->Reset; $d->Dump );
186 TEST q( $d->Reset; $d->Dumpxs ) if $XS;
202 #$VAR1->[1]{'a'} = $VAR1;
203 #$VAR1->[1]{'b'} = $VAR1->[1];
204 #$VAR1->[2] = $VAR1->[1]{'c'};
208 TEST q(Data::Dumper::DumperX($a)) if $XS;
227 local $Data::Dumper::Purity = 0;
228 local $Data::Dumper::Quotekeys = 0;
229 local $Data::Dumper::Terse = 1;
231 TEST q(Data::Dumper::DumperX($a)) if $XS;
239 # "abc\0'\efg" => "mno\0"
243 $foo = { "abc\000\'\efg" => "mno\000" };
245 local $Data::Dumper::Useqq = 1;
246 TEST q(Dumper($foo));
251 # 'abc\0\\'\efg' => 'mno\0'
256 local $Data::Dumper::Useqq = 1;
257 TEST q(Data::Dumper::DumperX($foo)) if $XS; # cheat
270 %foo = (a=>1,b=>\$foo,c=>\@foo);
292 #*::foo{ARRAY}->[1] = $foo;
293 #*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR};
294 #*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY};
295 #*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2];
296 #*::foo = *::foo{ARRAY}->[2];
297 #@bar = @{*::foo{ARRAY}};
298 #%baz = %{*::foo{ARRAY}->[2]};
301 $Data::Dumper::Purity = 1;
302 $Data::Dumper::Indent = 3;
303 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz']));
304 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz'])) if $XS;
321 #*::foo{ARRAY}->[1] = $foo;
322 #*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR};
323 #*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY};
324 #*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2];
325 #*::foo = *::foo{ARRAY}->[2];
326 #$bar = *::foo{ARRAY};
327 #$baz = *::foo{ARRAY}->[2];
330 $Data::Dumper::Indent = 1;
331 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz']));
332 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz'])) if $XS;
350 #*::foo{HASH}->{'b'} = *::foo{SCALAR};
351 #*::foo{HASH}->{'c'} = \@bar;
352 #*::foo{HASH}->{'d'} = *::foo{HASH};
353 #$bar[2] = *::foo{HASH};
354 #%baz = %{*::foo{HASH}};
358 TEST q(Data::Dumper->Dump([\\@foo, \\%foo, \\*foo], ['*bar', '*baz', '*foo']));
359 TEST q(Data::Dumper->Dumpxs([\\@foo, \\%foo, \\*foo], ['*bar', '*baz', '*foo'])) if $XS;
377 #*::foo{HASH}->{'b'} = *::foo{SCALAR};
378 #*::foo{HASH}->{'c'} = $bar;
379 #*::foo{HASH}->{'d'} = *::foo{HASH};
380 #$bar->[2] = *::foo{HASH};
381 #$baz = *::foo{HASH};
385 TEST q(Data::Dumper->Dump([\\@foo, \\%foo, \\*foo], ['bar', 'baz', 'foo']));
386 TEST q(Data::Dumper->Dumpxs([\\@foo, \\%foo, \\*foo], ['bar', 'baz', 'foo'])) if $XS;
405 $Data::Dumper::Purity = 0;
406 $Data::Dumper::Quotekeys = 0;
407 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz']));
408 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz'])) if $XS;
427 TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz']));
428 TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz'])) if $XS;
436 @dogs = ( 'Fido', 'Wags' );
443 $mutts = $mutts; # avoid warning
453 # ${$kennels{First}},
454 # ${$kennels{Second}},
461 $d = Data::Dumper->new([\\%kennel, \\@dogs, $mutts],
462 [qw(*kennels *dogs *mutts)] );
467 $d = Data::Dumper->new([\\%kennel, \\@dogs, $mutts],
468 [qw(*kennels *dogs *mutts)] );
476 #%kennels = %kennels;
482 TEST q($d->Dumpxs) if $XS;
492 # ${$kennels{First}},
493 # ${$kennels{Second}},
500 TEST q($d->Reset; $d->Dump);
502 TEST q($d->Reset; $d->Dumpxs);
512 # First => \$dogs[0],
513 # Second => \$dogs[1]
516 #%kennels = %{$dogs[2]};
517 #%mutts = %{$dogs[2]};
521 $d = Data::Dumper->new([\\@dogs, \\%kennel, $mutts],
522 [qw(*dogs *kennels *mutts)] );
527 $d = Data::Dumper->new([\\@dogs, \\%kennel, $mutts],
528 [qw(*dogs *kennels *mutts)] );
535 TEST q($d->Reset->Dump);
537 TEST q($d->Reset->Dumpxs);
558 $d = Data::Dumper->new( [\@dogs, \%kennel], [qw(*dogs *kennels)] );
559 $d->Deepcopy(1)->Dump;
562 TEST q($d->Reset->Dumpxs);
569 sub z { print "foo\n" }
581 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'b' => \&z})->Dump;);
582 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'b' => \&z})->Dumpxs;)
594 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'*b' => \&z})->Dump;);
595 TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'*b' => \&z})->Dumpxs;)
607 TEST q(Data::Dumper->new([\&z,$c],['*a','*c'])->Seen({'*b' => \&z})->Dump;);
608 TEST q(Data::Dumper->new([\&z,$c],['*a','*c'])->Seen({'*b' => \&z})->Dumpxs;)
627 TEST q(Data::Dumper->new([$a],['*a'])->Purity(1)->Dump;);
628 TEST q(Data::Dumper->new([$a],['*a'])->Purity(1)->Dumpxs;)
643 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dump;);
644 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dumpxs;)
649 $a = [{ a => \$b }, { b => undef }];
650 $b = [{ c => \$b }, { d => \$a }];
670 #${$a->[0]{a}}->[0]->{c} = $a->[0]{a};
671 #${${$a->[0]{a}}->[1]->{d}} = $a;
675 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dump;);
676 TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dumpxs;)
681 $a = [[[[\\\\\'foo']]]];
698 #$c = ${${$a->[0][0][0][0]}};
701 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Purity(1)->Dump;);
702 TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Purity(1)->Dumpxs;)