#!perl use strict; use Test::More tests => 16; use vars qw($AR $HR @ARGold @HRGold); require 't/Testdata.pm'; # share imported pkgs via myvars to other pkgs in file my ($ar,$hr) = ($AR, $HR); my @argold = @ARGold; my @hrgold = @HRGold; use vars q($odd); my ($mdd, %style); # cant declare inside use BEGIN { %style = (indent=>1, terse=>1); } # 2 imports, each inits an object use Data::Dumper::EasyOO; Data::Dumper::EasyOO->import(%style, init => \$mdd); Data::Dumper::EasyOO->import(%style, init => \$odd); is($mdd->($AR), $ARGold[1][1], "use-time init of my var"); is($odd->($HR), $HRGold[1][1], "use-time init of pkg var"); pass "test copy constructor"; my $ndd = $mdd->new; $ndd->Indent(2); is($ndd->($AR), $ARGold[1][2], "cpd obj w indent=>2"); is($ndd->($HR), $HRGold[1][2], "cpd obj w indent=>2"); #$ndd->(copied => \%INC); SKIP: { eval "use Test::Warn"; skip "these tests need Test::Warn", 4 if $@; pass "test (init => \$var) where \$var is already defined"; my $code = q{ use Data::Dumper::EasyOO (init => \$odd) }; #print "code: $code, with $odd\n"; TODO: { local $TODO = "withut this todo block, test fails ?!?"; # eval "use re 'debug'"; warnings_like ( sub { eval "$code" }, [ qr/init arg must be a ref to a (scalar) variable/, qr/wont construct a new EzDD object into non-undef variable/, ], 'Auto-Construct only into variable w/o a defined value'); # eval "no re 'debug'"; }; $odd = undef; eval "$code"; isa_ok ($odd, 'Data::Dumper::EasyOO', 're-construct after undeffing var.'); # test void-context call on obj w/o autoprint $odd = Data::Dumper::EasyOO->new(); $odd->Set(autoprint => undef); warning_like( sub { $odd->(\%INC) }, qr/called in void context, without autoprint defined/, "carps on void context call to obj w/o autoprint on"); } SKIP: { eval "use Config"; skip "these tests need Test::Warn", 1 unless $Config::Config{useperlio}; # strcat in eval's arg to prevent compile-time parse, # which would cause 5.5.3 to barf on 3 arg open eval "".q{ my $buf; open (my $fh, '>', \$buf); $odd->Set(autoprint => $fh); $odd->(odd => \%INC); like ($buf, qr/PerlIO/, "autoprint => \$fh works on use-time init'd obj"); }; warn $@ if $@; } package MultiInit; *is = \&Test::More::is; # multiple object inits/auto-constructs my ($ez1, $ez2, $ez3); use Data::Dumper::EasyOO ( init => \$ez1, indent => 1, init => \$ez2, terse => 1, init => \$ez3, indent => 2); is($ez1->($ar), $argold[0][2], "init => \$ez1 prints as expected"); is($ez1->($hr), $hrgold[0][2], "init => \$ez1 prints as expected"); is($ez2->($ar), $argold[0][1], "init => \$ez2 prints as expected"); is($ez2->($hr), $hrgold[0][1], "init => \$ez2 prints as expected"); is($ez3->($ar), $argold[1][1], "init => \$ez3 prints as expected"); is($ez3->($hr), $hrgold[1][1], "init => \$ez3 prints as expected");