1*de8cc8edSafresh1BEGIN { 2*de8cc8edSafresh1 require Config; 3*de8cc8edSafresh1 if (($Config::Config{'extensions'} !~ m!\bList/Util\b!) ){ 4*de8cc8edSafresh1 print "1..0 # Skip -- Perl configured without List::Util module\n"; 5*de8cc8edSafresh1 exit 0; 6*de8cc8edSafresh1 } 7*de8cc8edSafresh1 8*de8cc8edSafresh1 # `make test` in the CPAN version of this module runs us with -w, but 9*de8cc8edSafresh1 # Dumpvalue.pm relies on all sorts of things that can cause warnings. I 10*de8cc8edSafresh1 # don't think that's worth fixing, so we just turn off all warnings 11*de8cc8edSafresh1 # during testing. 12*de8cc8edSafresh1 $^W = 0; 13*de8cc8edSafresh1} 14*de8cc8edSafresh1 15*de8cc8edSafresh1use strict; 16*de8cc8edSafresh1use warnings; 17*de8cc8edSafresh1use lib ("./t/lib"); 18*de8cc8edSafresh1use TieOut; 19*de8cc8edSafresh1use Test::More qw(no_plan); # tests => 17; 20*de8cc8edSafresh1use List::Util qw( sum ); 21*de8cc8edSafresh1use File::Temp qw( tempfile tempdir ); 22*de8cc8edSafresh1use File::Spec; 23*de8cc8edSafresh1 24*de8cc8edSafresh1use_ok( 'Dumpvalue' ); 25*de8cc8edSafresh1 26*de8cc8edSafresh1my $out = tie *OUT, 'TieOut'; 27*de8cc8edSafresh1select(OUT); 28*de8cc8edSafresh1 29*de8cc8edSafresh1{ 30*de8cc8edSafresh1 my $d = Dumpvalue->new( dumpReused => 1 ); 31*de8cc8edSafresh1 ok( $d, 'create a new Dumpvalue object' ); 32*de8cc8edSafresh1 is( $d->get('globPrint'), 0, 'get a single (default) option correctly' ); 33*de8cc8edSafresh1 my @attributes = (qw|globPrint printUndef tick unctrl|); 34*de8cc8edSafresh1 my @rv = $d->get(@attributes); 35*de8cc8edSafresh1 my $expected = [ 0, 1, "auto", 'quote' ]; 36*de8cc8edSafresh1 is_deeply( \@rv, $expected, "get multiple (default) options correctly" ); 37*de8cc8edSafresh1} 38*de8cc8edSafresh1 39*de8cc8edSafresh1{ 40*de8cc8edSafresh1 my $d; 41*de8cc8edSafresh1 ok( $d = Dumpvalue->new(), 'create a new Dumpvalue object' ); 42*de8cc8edSafresh1 my @foobar = ('foo', 'bar'); 43*de8cc8edSafresh1 my @bazlow = ('baz', 'low'); 44*de8cc8edSafresh1 { 45*de8cc8edSafresh1 local $@; 46*de8cc8edSafresh1 eval { $d->dumpValue([@foobar], [@bazlow]); }; 47*de8cc8edSafresh1 like $@, qr/^usage: \$dumper->dumpValue\(value\)/, 48*de8cc8edSafresh1 "dumpValue() takes only 1 argument"; 49*de8cc8edSafresh1 } 50*de8cc8edSafresh1} 51*de8cc8edSafresh1 52*de8cc8edSafresh1{ 53*de8cc8edSafresh1 my $d; 54*de8cc8edSafresh1 ok( $d = Dumpvalue->new(), 'create a new Dumpvalue object' ); 55*de8cc8edSafresh1 #is( $d->stringify(), 'undef', 'stringify handles undef okay' ); 56*de8cc8edSafresh1 # Need to create a "stringify-overloaded object", then test with 57*de8cc8edSafresh1 # non-default value 'bareStringify = 0'. 58*de8cc8edSafresh1} 59*de8cc8edSafresh1 60*de8cc8edSafresh1 61*de8cc8edSafresh1{ 62*de8cc8edSafresh1 my (@x, @y); 63*de8cc8edSafresh1 64*de8cc8edSafresh1 my $d = Dumpvalue->new( dumpReused => 1, quoteHighBit => '', unctrl => 'quote' ); 65*de8cc8edSafresh1 ok( $d, 'create a new Dumpvalue object: quoteHighBit explicitly off' ); 66*de8cc8edSafresh1 $x[0] = $d->stringify("\N{U+266}"); 67*de8cc8edSafresh1 is ($x[0], "'\N{U+266}'" , 'quoteHighBit off' ); 68*de8cc8edSafresh1 69*de8cc8edSafresh1 my $e = Dumpvalue->new( dumpReused => 1, quoteHighBit => 1, unctrl => 'quote' ); 70*de8cc8edSafresh1 ok( $e, 'create a new Dumpvalue object: quoteHighBit on' ); 71*de8cc8edSafresh1 $y[0] = $e->stringify("\N{U+266}"); 72*de8cc8edSafresh1 is( $y[0], q|'\1146'|, "quoteHighBit on"); 73*de8cc8edSafresh1 74*de8cc8edSafresh1 my $f = Dumpvalue->new( dumpReused => 1, quoteHighBit => '', unctrl => 'unctrl' ); 75*de8cc8edSafresh1 ok( $f, 'create a new Dumpvalue object: quoteHighBit explicitly off, unctrl' ); 76*de8cc8edSafresh1 $x[1] = $f->stringify("\N{U+266}"); 77*de8cc8edSafresh1 is ($x[1], "'\N{U+266}'" , 'quoteHighBit off' ); 78*de8cc8edSafresh1 79*de8cc8edSafresh1 my $g = Dumpvalue->new( dumpReused => 1, quoteHighBit => '', unctrl => 'unctrl' ); 80*de8cc8edSafresh1 ok( $g, 'create a new Dumpvalue object: quoteHighBit explicitly off, unctrl' ); 81*de8cc8edSafresh1 $y[1] = $g->stringify("\N{U+266}"); 82*de8cc8edSafresh1 is ($y[1], "'\N{U+266}'" , 'quoteHighBit off' ); 83*de8cc8edSafresh1 84*de8cc8edSafresh1 my $h = Dumpvalue->new( dumpReused => 1, quoteHighBit => '', tick => '"' ); 85*de8cc8edSafresh1 ok( $h, 'create a new Dumpvalue object: quoteHighBit explicitly off, tick quote' ); 86*de8cc8edSafresh1 $x[2] = $h->stringify("\N{U+266}"); 87*de8cc8edSafresh1 is ($x[2], q|"| . "\N{U+266}" . q|"| , 'quoteHighBit off' ); 88*de8cc8edSafresh1 89*de8cc8edSafresh1 my $i = Dumpvalue->new( dumpReused => 1, quoteHighBit => 1, tick => '"' ); 90*de8cc8edSafresh1 ok( $i, 'create a new Dumpvalue object: quoteHighBit on, tick quote' ); 91*de8cc8edSafresh1 $y[2] = $i->stringify("\N{U+266}"); 92*de8cc8edSafresh1 is( $y[2], q|"\1146"|, "quoteHighBit on"); 93*de8cc8edSafresh1 94*de8cc8edSafresh1 my $j = Dumpvalue->new( dumpReused => 1, quoteHighBit => 1, unctrl => 'quote' ); 95*de8cc8edSafresh1 ok( $j, 'create a new Dumpvalue object: quoteHighBit on' ); 96*de8cc8edSafresh1 $x[3] = $j->stringify("abc"); 97*de8cc8edSafresh1 is( $x[3], q|'abc'|, "quoteHighBit on, unctrl quote, asciii-only text"); 98*de8cc8edSafresh1 99*de8cc8edSafresh1 my $k = Dumpvalue->new( dumpReused => 1, quoteHighBit => 1, unctrl => 'unctrl' ); 100*de8cc8edSafresh1 ok( $k, 'create a new Dumpvalue object: quoteHighBit on' ); 101*de8cc8edSafresh1 $y[3] = $k->stringify("\N{U+266}abc"); 102*de8cc8edSafresh1 is( $y[3], q|'\1146abc'|, "quoteHighBit on, unctrl unctrl, mixed text"); 103*de8cc8edSafresh1 104*de8cc8edSafresh1 my $l = Dumpvalue->new( dumpReused => 1, quoteHighBit => '', unctrl => 'quote' ); 105*de8cc8edSafresh1 ok( $l, 'create a new Dumpvalue object: quoteHighBit off' ); 106*de8cc8edSafresh1 $x[4] = $l->stringify("abc"); 107*de8cc8edSafresh1 is( $x[4], q|'abc'|, "quoteHighBit off, unctrl quote, asciii-only text"); 108*de8cc8edSafresh1 109*de8cc8edSafresh1 my $m = Dumpvalue->new( dumpReused => 1, quoteHighBit => '', unctrl => 'unctrl' ); 110*de8cc8edSafresh1 ok( $m, 'create a new Dumpvalue object: quoteHighBit off' ); 111*de8cc8edSafresh1 $y[4] = $m->stringify("\N{U+266}abc"); 112*de8cc8edSafresh1 #is( $y[4], q|'\1146abc'|, "quoteHighBit off, unctrl unctrl, mixed text"); 113*de8cc8edSafresh1 is( $y[4], qq|'\N{U+266}abc'|, "quoteHighBit off, unctrl unctrl, mixed text"); 114*de8cc8edSafresh1 115*de8cc8edSafresh1} 116*de8cc8edSafresh1 117*de8cc8edSafresh1{ 118*de8cc8edSafresh1 my (@x, @y); 119*de8cc8edSafresh1 120*de8cc8edSafresh1 my $d = Dumpvalue->new( dumpReused => 1, veryCompact => '' ); 121*de8cc8edSafresh1 ok( $d, 'create a new Dumpvalue object: veryCompact explicitly off' ); 122*de8cc8edSafresh1 $d->DumpElem([1, 2, 3]); 123*de8cc8edSafresh1 $x[0] = $out->read; 124*de8cc8edSafresh1 like( $x[0], qr/^ARRAY\([^)]+\)\n0\s+1\n1\s+2\n2\s+3/, 125*de8cc8edSafresh1 "DumpElem worked as expected with veryCompact explicitly off"); 126*de8cc8edSafresh1 127*de8cc8edSafresh1 my $e = Dumpvalue->new( dumpReused => 1, veryCompact => 1 ); 128*de8cc8edSafresh1 ok( $e, 'create a new Dumpvalue object: veryCompact on' ); 129*de8cc8edSafresh1 $e->DumpElem([1, 2, 3]); 130*de8cc8edSafresh1 $y[0] = $out->read; 131*de8cc8edSafresh1 like( $y[0], qr/^0\.\.2\s+1 2 3/, 132*de8cc8edSafresh1 "DumpElem worked as expected with veryCompact on"); 133*de8cc8edSafresh1 134*de8cc8edSafresh1 my $f = Dumpvalue->new( dumpReused => 1, veryCompact => '' ); 135*de8cc8edSafresh1 $f->DumpElem({ a => 1, b => 2, c => 3 }); 136*de8cc8edSafresh1 $x[1] = $out->read; 137*de8cc8edSafresh1 like( $x[1], qr/^HASH\([^)]+\)\n'a'\s=>\s1\n'b'\s=>\s2\n'c'\s=>\s3/, 138*de8cc8edSafresh1 "DumpElem worked as expected with veryCompact explicitly off: hashref"); 139*de8cc8edSafresh1 140*de8cc8edSafresh1 my $g = Dumpvalue->new( dumpReused => 1, veryCompact => 1 ); 141*de8cc8edSafresh1 ok( $g, 'create a new Dumpvalue object: veryCompact on' ); 142*de8cc8edSafresh1 $g->DumpElem({ a => 1, b => 2, c => 3 }); 143*de8cc8edSafresh1 $y[1] = $out->read; 144*de8cc8edSafresh1 like( $y[1], qr/^'a'\s=>\s1,\s'b'\s=>\s2,\s'c'\s=>\s3/, 145*de8cc8edSafresh1 "DumpElem worked as expected with veryCompact on: hashref"); 146*de8cc8edSafresh1 147*de8cc8edSafresh1 my $h = Dumpvalue->new( dumpReused => 1, veryCompact => '' ); 148*de8cc8edSafresh1 ok( $h, 'create a new Dumpvalue object: veryCompact explicitly off' ); 149*de8cc8edSafresh1 $h->DumpElem([1, 2, ['a']]); 150*de8cc8edSafresh1 $x[2] = $out->read; 151*de8cc8edSafresh1 like( $x[2], qr/^ARRAY\([^)]+\)\n0\s+1\n1\s+2\n2\s+ARRAY\([^)]+\)\n\s+0\s+'a'/, 152*de8cc8edSafresh1 "DumpElem worked as expected with veryCompact explicitly off: array contains ref"); 153*de8cc8edSafresh1 154*de8cc8edSafresh1 my $i = Dumpvalue->new( dumpReused => 1, veryCompact => 1 ); 155*de8cc8edSafresh1 ok( $i, 'create a new Dumpvalue object: veryCompact on' ); 156*de8cc8edSafresh1 $i->DumpElem([1, 2, ['a']]); 157*de8cc8edSafresh1 $y[2] = $out->read; 158*de8cc8edSafresh1 like( $y[2], qr/^ARRAY\([^)]+\)\n0\s+1\n1\s+2\n2\s+0\.\.0\s+'a'/, 159*de8cc8edSafresh1 "DumpElem worked as expected with veryCompact on: array contains ref"); 160*de8cc8edSafresh1 161*de8cc8edSafresh1 my $j = Dumpvalue->new( dumpReused => 1, veryCompact => '' ); 162*de8cc8edSafresh1 ok( $j, 'create a new Dumpvalue object: veryCompact explicitly off' ); 163*de8cc8edSafresh1 $j->DumpElem({ a => 1, b => 2, c => ['a'] }); 164*de8cc8edSafresh1 $x[3] = $out->read; 165*de8cc8edSafresh1 like( $x[3], qr/^HASH\([^)]+\)\n'a'\s=>\s1\n'b'\s=>\s2\n'c'\s=>\sARRAY\([^)]+\)\n\s+0\s+'a'/, 166*de8cc8edSafresh1 "DumpElem worked as expected with veryCompact explicitly off: hash contains ref"); 167*de8cc8edSafresh1 168*de8cc8edSafresh1 my $k = Dumpvalue->new( dumpReused => 1, veryCompact => 1 ); 169*de8cc8edSafresh1 ok( $k, 'create a new Dumpvalue object: veryCompact on' ); 170*de8cc8edSafresh1 $k->DumpElem({ a => 1, b => 2, c => ['a'] }); 171*de8cc8edSafresh1 $y[3] = $out->read; 172*de8cc8edSafresh1 like( $y[3], qr/^HASH\([^)]+\)\n'a'\s=>\s1\n'b'\s=>\s2\n'c'\s=>\s0\.\.0\s+'a'/, 173*de8cc8edSafresh1 "DumpElem worked as expected with veryCompact on: hash contains ref"); 174*de8cc8edSafresh1 175*de8cc8edSafresh1 my $l = Dumpvalue->new( dumpReused => 1, veryCompact => '', hashDepth => 2 ); 176*de8cc8edSafresh1 $l->DumpElem({ a => 1, b => 2, c => 3 }); 177*de8cc8edSafresh1 $x[4] = $out->read; 178*de8cc8edSafresh1 like( $x[4], qr/^HASH\([^)]+\)\n'a'\s=>\s1\n'b'\s=>\s2\n\.{4}/, 179*de8cc8edSafresh1 "DumpElem worked as expected with veryCompact explicitly off: hashref hashdepth"); 180*de8cc8edSafresh1 181*de8cc8edSafresh1 my $m = Dumpvalue->new( dumpReused => 1, veryCompact => 1, hashDepth => 2 ); 182*de8cc8edSafresh1 ok( $m, 'create a new Dumpvalue object: veryCompact on' ); 183*de8cc8edSafresh1 $m->DumpElem({ a => 1, b => 2, c => 3 }); 184*de8cc8edSafresh1 $y[4] = $out->read; 185*de8cc8edSafresh1 like( $y[4], qr/^'a'\s=>\s1,\s'b'\s=>\s2\s\.+/, 186*de8cc8edSafresh1 "DumpElem worked as expected with veryCompact on: hashref hashdepth"); 187*de8cc8edSafresh1 188*de8cc8edSafresh1 my $n = Dumpvalue->new( dumpReused => 1, veryCompact => '', hashDepth => 4 ); 189*de8cc8edSafresh1 ok( $n, 'create a new Dumpvalue object: veryCompact off' ); 190*de8cc8edSafresh1 $n->DumpElem({ a => 1, b => 2, c => 3 }); 191*de8cc8edSafresh1 $x[5] = $out->read; 192*de8cc8edSafresh1 like( $x[5], qr/^HASH\([^)]+\)\n'a'\s=>\s1\n'b'\s=>\s2\n'c'\s+=>\s+3/, 193*de8cc8edSafresh1 "DumpElem worked as expected with veryCompact explicitly off: hashref hashdepth"); 194*de8cc8edSafresh1 195*de8cc8edSafresh1 my $o = Dumpvalue->new( dumpReused => 1, veryCompact => 1, hashDepth => 4 ); 196*de8cc8edSafresh1 ok( $o, 'create a new Dumpvalue object: veryCompact on' ); 197*de8cc8edSafresh1 $o->DumpElem({ a => 1, b => 2, c => 3 }); 198*de8cc8edSafresh1 $y[5] = $out->read; 199*de8cc8edSafresh1 like( $y[5], qr/^'a'\s=>\s1,\s+'b'\s=>\s2,\s+'c'\s+=>\s+3/, 200*de8cc8edSafresh1 "DumpElem worked as expected with veryCompact on: hashref hashdepth"); 201*de8cc8edSafresh1} 202*de8cc8edSafresh1 203*de8cc8edSafresh1{ 204*de8cc8edSafresh1 my (@x, @y); 205*de8cc8edSafresh1 206*de8cc8edSafresh1 my $five = '12345'; 207*de8cc8edSafresh1 my $six = '123456'; 208*de8cc8edSafresh1 my $alt = '78901'; 209*de8cc8edSafresh1 my @arr = ($six, $alt); 210*de8cc8edSafresh1 my %two = (first => $six, notthefirst => $alt); 211*de8cc8edSafresh1 212*de8cc8edSafresh1 my $d = Dumpvalue->new( dumpReused => 1, usageOnly => '' ); 213*de8cc8edSafresh1 ok( $d, 'create a new Dumpvalue object: usageOnly explicitly off' ); 214*de8cc8edSafresh1 $x[0] = $d->scalarUsage($five); 215*de8cc8edSafresh1 is( $x[0], length($five), 'scalarUsage reports length correctly' ); 216*de8cc8edSafresh1 217*de8cc8edSafresh1 my $e = Dumpvalue->new( dumpReused => 1, usageOnly => 1 ); 218*de8cc8edSafresh1 ok( $e, 'create a new Dumpvalue object: usageOnly on' ); 219*de8cc8edSafresh1 $y[0] = $e->scalarUsage($five); 220*de8cc8edSafresh1 is( $y[0], length($five), 'scalarUsage reports length correctly' ); 221*de8cc8edSafresh1 222*de8cc8edSafresh1 my $f = Dumpvalue->new( dumpReused => 1, usageOnly => '' ); 223*de8cc8edSafresh1 ok( $f, 'create a new Dumpvalue object: usageOnly explicitly off' ); 224*de8cc8edSafresh1 $x[1] = $f->scalarUsage($six, '7890'); 225*de8cc8edSafresh1 is ($x[1], length($six), 'scalarUsage reports length of first element correctly' ); 226*de8cc8edSafresh1 227*de8cc8edSafresh1 my $g = Dumpvalue->new( dumpReused => 1, usageOnly => 1 ); 228*de8cc8edSafresh1 ok( $g, 'create a new Dumpvalue object: usageOnly on' ); 229*de8cc8edSafresh1 $y[1] = $g->scalarUsage($six, '7890'); 230*de8cc8edSafresh1 is ($y[1], length($six), 'scalarUsage reports length of first element correctly' ); 231*de8cc8edSafresh1 232*de8cc8edSafresh1 my $h = Dumpvalue->new( dumpReused => 1, usageOnly => '' ); 233*de8cc8edSafresh1 ok( $h, 'create a new Dumpvalue object: usageOnly explicitly off' ); 234*de8cc8edSafresh1 $x[2] = $h->scalarUsage( [ @arr ] ); 235*de8cc8edSafresh1 is ($x[2], sum( map { length($_) } @arr ), 236*de8cc8edSafresh1 'scalarUsage reports sum of length of array elements correctly' ); 237*de8cc8edSafresh1 238*de8cc8edSafresh1 my $i = Dumpvalue->new( dumpReused => 1, usageOnly => 1 ); 239*de8cc8edSafresh1 ok( $i, 'create a new Dumpvalue object: usageOnly on' ); 240*de8cc8edSafresh1 $y[2] = $i->scalarUsage( [ @arr ] ); 241*de8cc8edSafresh1 is ($y[2], sum( map { length($_) } @arr ), 242*de8cc8edSafresh1 'scalarUsage reports length of first element correctly' ); 243*de8cc8edSafresh1 244*de8cc8edSafresh1 my $j = Dumpvalue->new( dumpReused => 1, usageOnly => '' ); 245*de8cc8edSafresh1 ok( $j, 'create a new Dumpvalue object: usageOnly explicitly off' ); 246*de8cc8edSafresh1 $x[3] = $j->scalarUsage( { %two } ); 247*de8cc8edSafresh1 is ($x[3], sum( ( map { length($_) } keys %two ), ( map { length($_) } values %two ), ), 248*de8cc8edSafresh1 'scalarUsage reports sum of length of hash keys and values correctly' ); 249*de8cc8edSafresh1 250*de8cc8edSafresh1 my $k = Dumpvalue->new( dumpReused => 1, usageOnly => 1 ); 251*de8cc8edSafresh1 ok( $k, 'create a new Dumpvalue object: usageOnly on' ); 252*de8cc8edSafresh1 $y[3] = $k->scalarUsage( { %two } ); 253*de8cc8edSafresh1 is ($y[3], sum( ( map { length($_) } keys %two ), ( map { length($_) } values %two ), ), 254*de8cc8edSafresh1 'scalarUsage reports sum of length of hash keys and values correctly' ); 255*de8cc8edSafresh1} 256*de8cc8edSafresh1 257*de8cc8edSafresh1{ 258*de8cc8edSafresh1 my (@x, @y); 259*de8cc8edSafresh1 260*de8cc8edSafresh1 my $d = Dumpvalue->new( dumpReused => 1, usageOnly => 1 ); 261*de8cc8edSafresh1 ok( $d, 'create a new Dumpvalue object, usageOnly on' ); 262*de8cc8edSafresh1 $d->dumpvars( 'Fake', 'veryfake' ); 263*de8cc8edSafresh1 like( $out->read, qr/^String space:/, 'printed usage message fine' ); 264*de8cc8edSafresh1 265*de8cc8edSafresh1 my $e = Dumpvalue->new( dumpReused => 1, usageOnly => '' ); 266*de8cc8edSafresh1 ok( $e, 'create a new Dumpvalue object, usageOnly explicitly off' ); 267*de8cc8edSafresh1 $e->dumpvars( 'Fake', 'veryfake' ); 268*de8cc8edSafresh1 is( $out->read, '', 'printed usage message fine' ); 269*de8cc8edSafresh1 270*de8cc8edSafresh1 my $f = Dumpvalue->new( dumpReused => 1, usageOnly => 1 ); 271*de8cc8edSafresh1 ok( $f, 'create a new Dumpvalue object, usageOnly on' ); 272*de8cc8edSafresh1 $f->dumpvars( 'main', 'INC' ); 273*de8cc8edSafresh1 like( $out->read, qr/\@INC =/, 'dumped variables from a package' ); 274*de8cc8edSafresh1 275*de8cc8edSafresh1 my $g = Dumpvalue->new( dumpReused => 1, usageOnly => '' ); 276*de8cc8edSafresh1 ok( $g, 'create a new Dumpvalue object, usageOnly explicitly off' ); 277*de8cc8edSafresh1 $g->dumpvars( 'main', 'INC' ); 278*de8cc8edSafresh1 like( $out->read, qr/\@INC =/, 'dumped variables from a package' ); 279*de8cc8edSafresh1 280*de8cc8edSafresh1 # return if $DB::signal and $self->{stopDbSignal}; 281*de8cc8edSafresh1 282*de8cc8edSafresh1 { 283*de8cc8edSafresh1 note("DB::signal off"); 284*de8cc8edSafresh1 local $DB::signal = 0; 285*de8cc8edSafresh1 286*de8cc8edSafresh1 my $h = Dumpvalue->new( dumpReused => 1, stopDbSignal => '' ); 287*de8cc8edSafresh1 ok( $h, 'create a new Dumpvalue object, stopDbSignal explicitly off' ); 288*de8cc8edSafresh1 $h->dumpvars( 'main', 'INC' ); 289*de8cc8edSafresh1 like( $out->read, qr/\@INC =/, 'dumped variables from a package' ); 290*de8cc8edSafresh1 291*de8cc8edSafresh1 my $i = Dumpvalue->new( dumpReused => 1, stopDbSignal => 1 ); 292*de8cc8edSafresh1 ok( $i, 'create a new Dumpvalue object, stopDbSignal on' ); 293*de8cc8edSafresh1 $i->dumpvars( 'main', 'INC' ); 294*de8cc8edSafresh1 like( $out->read, qr/\@INC =/, 'dumped variables from a package' ); 295*de8cc8edSafresh1 } 296*de8cc8edSafresh1 297*de8cc8edSafresh1 { 298*de8cc8edSafresh1 note("DB::signal on"); 299*de8cc8edSafresh1 local $DB::signal = 1; 300*de8cc8edSafresh1 301*de8cc8edSafresh1 my $j = Dumpvalue->new( dumpReused => 1, stopDbSignal => '' ); 302*de8cc8edSafresh1 ok( $j, 'create a new Dumpvalue object, stopDbSignal explicitly off' ); 303*de8cc8edSafresh1 $j->dumpvars( 'main', 'INC' ); 304*de8cc8edSafresh1 like( $out->read, qr/\@INC =/, 'dumped variables from a package' ); 305*de8cc8edSafresh1 306*de8cc8edSafresh1 my $k = Dumpvalue->new( dumpReused => 1, stopDbSignal => 1 ); 307*de8cc8edSafresh1 ok( $k, 'create a new Dumpvalue object, stopDbSignal on' ); 308*de8cc8edSafresh1 $k->dumpvars( 'main', 'INC' ); 309*de8cc8edSafresh1 is( $out->read, '', 'return false' ); 310*de8cc8edSafresh1 311*de8cc8edSafresh1 my $l = Dumpvalue->new( dumpReused => 1, stopDbSignal => 1 ); 312*de8cc8edSafresh1 ok( $l, 'create a new Dumpvalue object, stopDbSignal on' ); 313*de8cc8edSafresh1 $l->dumpvars( 'main::', 'INC' ); 314*de8cc8edSafresh1 is( $out->read, '', 'XXX: return false' ); 315*de8cc8edSafresh1 } 316*de8cc8edSafresh1} 317*de8cc8edSafresh1 318*de8cc8edSafresh1{ 319*de8cc8edSafresh1 my (@x, @y); 320*de8cc8edSafresh1 321*de8cc8edSafresh1 my $d = Dumpvalue->new( dumpReused => 1, compactDump => 1 ); 322*de8cc8edSafresh1 ok( $d, 'create a new Dumpvalue object, compactDump' ); 323*de8cc8edSafresh1 $d->unwrap([]); 324*de8cc8edSafresh1 $x[0] = $out->read; 325*de8cc8edSafresh1 like( $x[0], qr/\s*empty array\n/, "unwrap() reported empty array"); 326*de8cc8edSafresh1 327*de8cc8edSafresh1 my $e = Dumpvalue->new( dumpReused => 1, compactDump => 0 ); 328*de8cc8edSafresh1 ok( $e, 'create a new Dumpvalue object, compactDump explicitly off' ); 329*de8cc8edSafresh1 $e->unwrap([ qw| alpha beta gamma | ]); 330*de8cc8edSafresh1 $y[0] = $out->read; 331*de8cc8edSafresh1 like( $y[0], qr/0\s+'alpha'\n1\s+'beta'\n2\s+'gamma'/, 332*de8cc8edSafresh1 "unwrap() with compactDump explicitly off"); 333*de8cc8edSafresh1 334*de8cc8edSafresh1 my $f = Dumpvalue->new( dumpReused => 1 ); 335*de8cc8edSafresh1 ok( $f, 'create a new Dumpvalue object' ); 336*de8cc8edSafresh1 $f->veryCompact(0); 337*de8cc8edSafresh1 $f->unwrap([ qw| alpha beta gamma | ]); 338*de8cc8edSafresh1 $x[1] = $out->read; 339*de8cc8edSafresh1 like( $x[1], qr/0\s+'alpha'\n1\s+'beta'\n2\s+'gamma'/, 340*de8cc8edSafresh1 "unwrap() after veryCompact method call with arg 0"); 341*de8cc8edSafresh1 342*de8cc8edSafresh1 my $g = Dumpvalue->new( dumpReused => 1 ); 343*de8cc8edSafresh1 ok( $g, 'create a new Dumpvalue object' ); 344*de8cc8edSafresh1 $g->veryCompact(); 345*de8cc8edSafresh1 $g->unwrap([ qw| alpha beta gamma | ]); 346*de8cc8edSafresh1 $y[1] = $out->read; 347*de8cc8edSafresh1 like( $y[1], qr/0\s+'alpha'\n1\s+'beta'\n2\s+'gamma'/, 348*de8cc8edSafresh1 "unwrap() after veryCompact method call with explicitly off"); 349*de8cc8edSafresh1 350*de8cc8edSafresh1 my $h = Dumpvalue->new( dumpReused => 1 ); 351*de8cc8edSafresh1 ok( $h, 'create a new Dumpvalue object' ); 352*de8cc8edSafresh1 $h->compactDump(1); 353*de8cc8edSafresh1 $h->veryCompact(0); 354*de8cc8edSafresh1 $h->unwrap([ qw| alpha beta gamma | ]); 355*de8cc8edSafresh1 $x[2] = $out->read; 356*de8cc8edSafresh1 like( $x[2], qr/0\.\.2\s+'alpha'\s+'beta'\s+'gamma'/, 357*de8cc8edSafresh1 "unwrap() after compactDump(1) and veryCompact(0) method calls"); 358*de8cc8edSafresh1 359*de8cc8edSafresh1 my $i = Dumpvalue->new( dumpReused => 1 ); 360*de8cc8edSafresh1 ok( $i, 'create a new Dumpvalue object' ); 361*de8cc8edSafresh1 $i->compactDump(0); 362*de8cc8edSafresh1 $i->unwrap([ qw| alpha beta gamma | ]); 363*de8cc8edSafresh1 $y[2] = $out->read; 364*de8cc8edSafresh1 like( $y[1], qr/0\s+'alpha'\n1\s+'beta'\n2\s+'gamma'/, 365*de8cc8edSafresh1 "unwrap() after compactDump(0) method call"); 366*de8cc8edSafresh1 367*de8cc8edSafresh1} 368*de8cc8edSafresh1 369*de8cc8edSafresh1{ 370*de8cc8edSafresh1 no warnings 'once'; 371*de8cc8edSafresh1 372*de8cc8edSafresh1 my (@x, @y); 373*de8cc8edSafresh1 374*de8cc8edSafresh1 my $d = Dumpvalue->new( dumpReused => 1 ); 375*de8cc8edSafresh1 ok( $d, 'create a new Dumpvalue object' ); 376*de8cc8edSafresh1 $d->unwrap(\*BAR); 377*de8cc8edSafresh1 $x[0] = $out->read; 378*de8cc8edSafresh1 is( $x[0], "-> *main::BAR\n", "unwrap reported ref to typeglob"); 379*de8cc8edSafresh1 380*de8cc8edSafresh1 my $e = Dumpvalue->new( dumpReused => 1, globPrint => 1 ); 381*de8cc8edSafresh1 ok( $e, 'create a new Dumpvalue object, globPrint' ); 382*de8cc8edSafresh1 $e->unwrap(\*RQP); 383*de8cc8edSafresh1 $y[0] = $out->read; 384*de8cc8edSafresh1 is( $y[0], "-> *main::RQP\n", "unwrap reported ref to typeglob"); 385*de8cc8edSafresh1 386*de8cc8edSafresh1 my $tdir = tempdir( CLEANUP => 1 ); 387*de8cc8edSafresh1 my $tempfile = File::Spec->catfile($tdir, 'foo.txt'); 388*de8cc8edSafresh1 open FH, '>', $tempfile or die "Unable to open tempfile for writing"; 389*de8cc8edSafresh1 print FH "\n"; 390*de8cc8edSafresh1 my $f = Dumpvalue->new( dumpReused => 1 ); 391*de8cc8edSafresh1 ok( $f, 'create a new Dumpvalue object' ); 392*de8cc8edSafresh1 $f->unwrap(\*FH); 393*de8cc8edSafresh1 $x[1] = $out->read; 394*de8cc8edSafresh1 like( $x[1], 395*de8cc8edSafresh1 qr/->\s\*main::FH\n\s*FileHandle\(\{\*main::FH\}\)\s+=>\s+fileno\(\d+\)\n/, 396*de8cc8edSafresh1 "unwrap reported ref to typeglob"); 397*de8cc8edSafresh1 close FH or die "Unable to close tempfile after writing"; 398*de8cc8edSafresh1} 399*de8cc8edSafresh1 400*de8cc8edSafresh1{ 401*de8cc8edSafresh1 my (@x, @y); 402*de8cc8edSafresh1 403*de8cc8edSafresh1 my $d = Dumpvalue->new( dumpReused => 1, quoteHighBit => '' ); 404*de8cc8edSafresh1 ok( $d, 'create a new Dumpvalue object' ); 405*de8cc8edSafresh1 $d->set_unctrl('unctrl'); 406*de8cc8edSafresh1 $d->unwrap([ "bo\007nd", qw| alpha beta gamma | ]); 407*de8cc8edSafresh1 $x[0] = $out->read; 408*de8cc8edSafresh1 like( $x[0], qr/0\s+"bo\^.nd"\n1\s+'alpha'\n2\s+'beta'\n3\s+'gamma'/, 409*de8cc8edSafresh1 "unwrap() with set_unctrl('unctrl') method call" ); 410*de8cc8edSafresh1 411*de8cc8edSafresh1 my $e = Dumpvalue->new( dumpReused => 1, quoteHighBit => 1 ); 412*de8cc8edSafresh1 ok( $e, 'create a new Dumpvalue object' ); 413*de8cc8edSafresh1 $e->set_unctrl('unctrl'); 414*de8cc8edSafresh1 $e->unwrap([ "bo\007nd", qw| alpha beta gamma | ]); 415*de8cc8edSafresh1 $x[1] = $out->read; 416*de8cc8edSafresh1 like( $x[1], qr/0\s+"bo\^.nd"\n1\s+'alpha'\n2\s+'beta'\n3\s+'gamma'/, 417*de8cc8edSafresh1 "unwrap() with set_unctrl('unctrl') method call" ); 418*de8cc8edSafresh1} 419*de8cc8edSafresh1 420*de8cc8edSafresh1{ 421*de8cc8edSafresh1 my (@x, @y); 422*de8cc8edSafresh1 423*de8cc8edSafresh1 my $d = Dumpvalue->new( dumpReused => 1 ); 424*de8cc8edSafresh1 ok( $d, 'create a new Dumpvalue object' ); 425*de8cc8edSafresh1 $x[0] = $d->dumpsub( '', 'TieOut::read' ); 426*de8cc8edSafresh1 like( $x[0], qr/&TieOut::read in/, 'dumpsub found sub fine' ); 427*de8cc8edSafresh1 428*de8cc8edSafresh1 my $e = Dumpvalue->new( dumpReused => 1 ); 429*de8cc8edSafresh1 ok( $e, 'create a new Dumpvalue object' ); 430*de8cc8edSafresh1 $y[0] = $e->dumpsub( 5, 'TieOut::read' ); 431*de8cc8edSafresh1 like( $y[0], qr/\s{5}&TieOut::read in/, 'dumpsub found sub fine, leading whitespace' ); 432*de8cc8edSafresh1 433*de8cc8edSafresh1 my $f = Dumpvalue->new( dumpReused => 1 ); 434*de8cc8edSafresh1 ok( $f, 'create a new Dumpvalue object' ); 435*de8cc8edSafresh1 $x[1] = $f->dumpsub( '', "{*ABC}" ); 436*de8cc8edSafresh1 like( $x[1], qr/&ABC in \?{3}/, 'dumpsub found sub (ref) fine' ); 437*de8cc8edSafresh1 438*de8cc8edSafresh1} 439*de8cc8edSafresh1 440*de8cc8edSafresh1__END__ 441*de8cc8edSafresh1 print STDERR "AAA: $x[0]\n"; 442*de8cc8edSafresh1 print STDERR "AAA: $y[0]\n"; 443*de8cc8edSafresh1 444