1 package autovivification::TestCases;
10 *{caller().'::testcase_ok'} = \&testcase_ok;
14 my ($var, $init, $code, $exp, $use, $global) = @_;
15 my $decl = $global ? "our $var; local $var;" : "my $var;";
16 my $test = $var =~ /^[@%]/ ? "\\$var" : $var;
22 local \$SIG{__WARN__} = sub { die join '', 'warn:', \@_ };
27 like \$@, \$exp[0], \$desc . ' [exception]';
29 is \$@, \$exp[0], \$desc . ' [exception]';
31 is_deeply \$res, \$exp[1], \$desc . ' [return]';
32 is_deeply $test, \$exp[2], \$desc . ' [variable]';
39 my @chunks = split /#+/, "$_ ";
40 s/^\s+//, s/\s+$// for @chunks;
41 my ($init, $code, $exp, $opts) = @chunks;
42 (my $var = $init) =~ s/[^\$@%\w].*//;
43 $init = $var eq $init ? '' : "$init;";
46 for (split ' ', $opts) {
48 $no = 0 if s/^([-+])// and $1 eq '-';
49 $use .= ($no ? 'no' : 'use') . " autovivification '$_';"
51 } elsif (defined $opts) {
53 $use = 'no autovivification;';
59 [ $var, $init, $code, $exp, $use, 0 ],
60 [ $var, "use strict; $init", $code, $exp, $use, 1 ],
61 [ $var, "no strict; $init", $code, $exp, $use, 1 ],
68 $new[0] =~ s/^$/$sigil/;
69 $new[1] =~ s/$var\->/$var/g;
70 $new[2] =~ s/$var\->/$var/g;
74 push @testcases, @extra;
76 my $testcase = source(@$_);
77 my ($var, $init, $code) = @$_;
78 my $desc = do { (my $x = "$var | $init") =~ s,;\s+$,,; $x } . " | $code | $opts";
80 diag "== This testcase failed to compile ==\n$testcase\n## Reason: $@" if $@;