#!./perl -w # t/dumpperl.t - test all branches of, and modes of triggering, Dumpperl() BEGIN { if ($ENV{PERL_CORE}){ require Config; import Config; no warnings 'once'; if ($Config{'extensions'} !~ /\bData\/Dumper\b/) { print "1..0 # Skip: Data::Dumper was not built\n"; exit 0; } } } use strict; use Carp; use Data::Dumper; use Test::More tests => 31; use lib qw( ./t/lib ); use Testing qw( _dumptostr ); $Data::Dumper::Indent=1; { local $Data::Dumper::Useperl=1; local $Data::Dumper::Useqq=0; local $Data::Dumper::Deparse=0; note('$Data::Dumper::Useperl => 1'); run_tests_for_pure_perl_implementations(); } { local $Data::Dumper::Useperl=0; local $Data::Dumper::Useqq=1; local $Data::Dumper::Deparse=0; note('$Data::Dumper::Useqq => 1'); run_tests_for_pure_perl_implementations(); } { local $Data::Dumper::Useperl=0; local $Data::Dumper::Useqq=0; local $Data::Dumper::Deparse=1; note('$Data::Dumper::Deparse => 1'); run_tests_for_pure_perl_implementations(); } sub run_tests_for_pure_perl_implementations { my ($a, $b, $obj); my (@names); my (@newnames, $objagain, %newnames); my $dumpstr; $a = 'alpha'; $b = 'beta'; my @c = ( qw| eta theta | ); my %d = ( iota => 'kappa' ); note('names not provided'); $obj = Data::Dumper->new([$a, $b]); $dumpstr = _dumptostr($obj); like($dumpstr, qr/\$VAR1.+alpha.+\$VAR2.+beta/s, "Dump: two strings" ); $obj = Data::Dumper->new([$a, \@c]); $dumpstr = _dumptostr($obj); like($dumpstr, qr/\$VAR1.+alpha.+\$VAR2.+\[.+eta.+theta.+\]/s, "Dump: one string, one array ref" ); $obj = Data::Dumper->new([$a, \%d]); $dumpstr = _dumptostr($obj); like($dumpstr, qr/\$VAR1.+alpha.+\$VAR2.+\{.+iota.+kappa.+\}/s, "Dump: one string, one hash ref" ); $obj = Data::Dumper->new([$a, undef]); $dumpstr = _dumptostr($obj); like($dumpstr, qr/\$VAR1.+alpha.+\$VAR2.+undef/s, "Dump: one string, one undef" ); note('names provided'); $obj = Data::Dumper->new([$a, $b], [ qw( a b ) ]); $dumpstr = _dumptostr($obj); like($dumpstr, qr/\$a.+alpha.+\$b.+beta/s, "Dump: names: two strings" ); $obj = Data::Dumper->new([$a, \@c], [ qw( a *c ) ]); $dumpstr = _dumptostr($obj); like($dumpstr, qr/\$a.+alpha.+\@c.+eta.+theta/s, "Dump: names: one string, one array ref" ); $obj = Data::Dumper->new([$a, \%d], [ qw( a *d ) ]); $dumpstr = _dumptostr($obj); like($dumpstr, qr/\$a.+alpha.+\%d.+iota.+kappa/s, "Dump: names: one string, one hash ref" ); $obj = Data::Dumper->new([$a,undef], [qw(a *c)]); $dumpstr = _dumptostr($obj); like($dumpstr, qr/\$a.+alpha.+\$c.+undef/s, "Dump: names: one string, one undef" ); $obj = Data::Dumper->new([$a, $b], [ 'a', '']); $dumpstr = _dumptostr($obj); like($dumpstr, qr/\$a.+alpha.+\$.+beta/s, "Dump: names: two strings: one name empty" ); $obj = Data::Dumper->new([$a, $b], [ 'a', '$foo']); $dumpstr = _dumptostr($obj); no warnings 'uninitialized'; like($dumpstr, qr/\$a.+alpha.+\$foo.+beta/s, "Dump: names: two strings: one name start with '\$'" ); use warnings; } { my ($obj, $dumpstr, $realtype); $obj = Data::Dumper->new([ {IO => *{$::{STDERR}}{IO}} ]); $obj->Useperl(1); eval { $dumpstr = _dumptostr($obj); }; $realtype = 'IO'; like($@, qr/Can't handle '$realtype' type/, "Got expected error: pure-perl: Data-Dumper does not handle $realtype"); }