xref: /openbsd-src/gnu/usr.bin/perl/dist/Data-Dumper/t/misc.t (revision f2da64fbbbf1b03f09f390ab01267c93dfd77c4c)
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