xref: /openbsd-src/gnu/usr.bin/perl/dist/Dumpvalue/t/extend-coverage.t (revision de8cc8edbc71bd3e3bc7fbffa27ba0e564c37d8b)
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