1#!./perl -w 2# t/misc.t - Test various functionality 3 4BEGIN { 5 if ($ENV{PERL_CORE}){ 6 require Config; import Config; 7 no warnings 'once'; 8 if ($Config{'extensions'} !~ /\bData\/Dumper\b/) { 9 print "1..0 # Skip: Data::Dumper was not built\n"; 10 exit 0; 11 } 12 } 13} 14 15use strict; 16 17use Data::Dumper; 18use Test::More tests => 20; 19use lib qw( ./t/lib ); 20use Testing qw( _dumptostr ); 21 22my ($a, $b, @c, %d); 23$a = 'alpha'; 24$b = 'beta'; 25@c = ( qw| gamma delta epsilon | ); 26%d = ( zeta => 'eta', theta => 'iota' ); 27 28note("Argument validation for new()"); 29{ 30 local $@ = ''; 31 eval { my $obj = Data::Dumper->new(undef); }; 32 like($@, 33 qr/^Usage:\s+PACKAGE->new\(ARRAYREF,\s*\[ARRAYREF\]\)/, 34 "Got error message: new() needs defined argument" 35 ); 36} 37 38{ 39 local $@ = ''; 40 eval { my $obj = Data::Dumper->new( { $a => $b } ); }; 41 like($@, 42 qr/^Usage:\s+PACKAGE->new\(ARRAYREF,\s*\[ARRAYREF\]\)/, 43 "Got error message: new() needs array reference" 44 ); 45} 46 47{ 48 note("\$Data::Dumper::Useperl, Useqq, Deparse"); 49 my ($obj, %dumpstr); 50 51 local $Data::Dumper::Useperl = 1; 52 $obj = Data::Dumper->new( [ \@c, \%d ] ); 53 $dumpstr{useperl} = [ $obj->Values ]; 54 local $Data::Dumper::Useperl = 0; 55 56 local $Data::Dumper::Useqq = 1; 57 $obj = Data::Dumper->new( [ \@c, \%d ] ); 58 $dumpstr{useqq} = [ $obj->Values ]; 59 local $Data::Dumper::Useqq = 0; 60 61 is_deeply($dumpstr{useperl}, $dumpstr{useqq}, 62 "Useperl and Useqq return same"); 63 64 local $Data::Dumper::Deparse = 1; 65 $obj = Data::Dumper->new( [ \@c, \%d ] ); 66 $dumpstr{deparse} = [ $obj->Values ]; 67 local $Data::Dumper::Deparse = 0; 68 69 is_deeply($dumpstr{useperl}, $dumpstr{deparse}, 70 "Useperl and Deparse return same"); 71} 72 73{ 74 note("\$Data::Dumper::Pad and \$obj->Pad"); 75 my ($obj, %dumps, $pad); 76 $obj = Data::Dumper->new([$a,$b]); 77 $dumps{'noprev'} = _dumptostr($obj); 78 79 $obj = Data::Dumper->new([$a,$b]); 80 $obj->Pad(undef); 81 $dumps{'undef'} = _dumptostr($obj); 82 83 $obj = Data::Dumper->new([$a,$b]); 84 $obj->Pad(''); 85 $dumps{'emptystring'} = _dumptostr($obj); 86 87 is($dumps{'noprev'}, $dumps{'undef'}, 88 "No setting for \$Data::Dumper::Pad and Pad(undef) give same result"); 89 90 is($dumps{'noprev'}, $dumps{'emptystring'}, 91 "No setting for \$Data::Dumper::Pad and Pad('') give same result"); 92 93 $pad = 'XXX: '; 94 local $Data::Dumper::Pad = $pad; 95 $obj = Data::Dumper->new([$a,$b]); 96 $dumps{'ddp'} = _dumptostr($obj); 97 local $Data::Dumper::Pad = ''; 98 99 $obj = Data::Dumper->new([$a,$b]); 100 $obj->Pad($pad); 101 $dumps{'obj'} = _dumptostr($obj); 102 103 is($dumps{'ddp'}, $dumps{'obj'}, 104 "\$Data::Dumper::Pad and \$obj->Pad() give same result"); 105 106 is( (grep {! /^$pad/} (split(/\n/, $dumps{'ddp'}))), 0, 107 "Each line of dumped output padded as expected"); 108} 109 110{ 111 note("\$Data::Dumper::Varname and \$obj->Varname"); 112 my ($obj, %dumps, $varname); 113 $obj = Data::Dumper->new([$a,$b]); 114 $dumps{'noprev'} = _dumptostr($obj); 115 116 $obj = Data::Dumper->new([$a,$b]); 117 $obj->Varname(undef); 118 $dumps{'undef'} = _dumptostr($obj); 119 120 $obj = Data::Dumper->new([$a,$b]); 121 $obj->Varname(''); 122 $dumps{'emptystring'} = _dumptostr($obj); 123 124 is($dumps{'noprev'}, $dumps{'undef'}, 125 "No setting for \$Data::Dumper::Varname and Varname(undef) give same result"); 126 127 # Because Varname defaults to '$VAR', providing an empty argument to 128 # Varname produces a non-default result. 129 isnt($dumps{'noprev'}, $dumps{'emptystring'}, 130 "No setting for \$Data::Dumper::Varname and Varname('') give different results"); 131 132 $varname = 'MIMI'; 133 local $Data::Dumper::Varname = $varname; 134 $obj = Data::Dumper->new([$a,$b]); 135 $dumps{'ddv'} = _dumptostr($obj); 136 local $Data::Dumper::Varname = undef; 137 138 $obj = Data::Dumper->new([$a,$b]); 139 $obj->Varname($varname); 140 $dumps{'varname'} = _dumptostr($obj); 141 142 is($dumps{'ddv'}, $dumps{'varname'}, 143 "Setting for \$Data::Dumper::Varname and Varname() give same result"); 144 145 is( (grep { /^\$$varname/ } (split(/\n/, $dumps{'ddv'}))), 2, 146 "All lines of dumped output use provided varname"); 147 148 is( (grep { /^\$VAR/ } (split(/\n/, $dumps{'ddv'}))), 0, 149 "No lines of dumped output use default \$VAR"); 150} 151 152{ 153 note("\$Data::Dumper::Useqq and \$obj->Useqq"); 154 my ($obj, %dumps, $useqq); 155 $obj = Data::Dumper->new([$a,$b]); 156 $dumps{'noprev'} = _dumptostr($obj); 157 158 $obj = Data::Dumper->new([$a,$b]); 159 $obj->Useqq(undef); 160 $dumps{'undef'} = _dumptostr($obj); 161 162 $obj = Data::Dumper->new([$a,$b]); 163 $obj->Useqq(''); 164 $dumps{'emptystring'} = _dumptostr($obj); 165 166 $obj = Data::Dumper->new([$a,$b]); 167 $obj->Useqq(0); 168 $dumps{'zero'} = _dumptostr($obj); 169 170 my $current = $Data::Dumper::Useqq; 171 local $Data::Dumper::Useqq = 0; 172 $obj = Data::Dumper->new([$a,$b]); 173 $dumps{'dduzero'} = _dumptostr($obj); 174 local $Data::Dumper::Useqq = $current; 175 176 is($dumps{'noprev'}, $dumps{'undef'}, 177 "No setting for \$Data::Dumper::Useqq and Useqq(undef) give same result"); 178 179 is($dumps{'noprev'}, $dumps{'zero'}, 180 "No setting for \$Data::Dumper::Useqq and Useqq(0) give same result"); 181 182 is($dumps{'noprev'}, $dumps{'emptystring'}, 183 "No setting for \$Data::Dumper::Useqq and Useqq('') give same result"); 184 185 is($dumps{'noprev'}, $dumps{'dduzero'}, 186 "No setting for \$Data::Dumper::Useqq and Useqq(undef) give same result"); 187 188 local $Data::Dumper::Useqq = 1; 189 $obj = Data::Dumper->new([$a,$b]); 190 $dumps{'ddu'} = _dumptostr($obj); 191 local $Data::Dumper::Useqq = $current; 192 193 $obj = Data::Dumper->new([$a,$b]); 194 $obj->Useqq(1); 195 $dumps{'obj'} = _dumptostr($obj); 196 197 is($dumps{'ddu'}, $dumps{'obj'}, 198 "\$Data::Dumper::Useqq=1 and Useqq(1) give same result"); 199 200 like($dumps{'ddu'}, 201 qr/"$a".+?"$b"/s, 202 "Double-quotes used around values" 203 ); 204 205 unlike($dumps{'ddu'}, 206 qr/'$a'.+?'$b'/s, 207 "Single-quotes not used around values" 208 ); 209} 210