]> git.vpit.fr Git - perl/modules/autovivification.git/commitdiff
Factor the common part of t/20-hash.t and t/21-array.t into a new t/lib/autovivificat...
authorVincent Pit <vince@profvince.com>
Mon, 15 Jun 2009 21:22:43 +0000 (23:22 +0200)
committerVincent Pit <vince@profvince.com>
Mon, 15 Jun 2009 21:23:11 +0000 (23:23 +0200)
MANIFEST
samples/hash2array.pl
t/20-hash.t
t/21-array.t
t/lib/autovivification/TestCases.pm [new file with mode: 0644]

index a4cfc0f95c6bfa486d0a1b8b8f9990b6449b9554..9af2be8a924180cfcbc45792b381fe1380cb0821 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -15,5 +15,6 @@ t/91-pod.t
 t/92-pod-coverage.t
 t/95-portability-files.t
 t/99-kwalitee.t
+t/lib/autovivification/TestCases.pm
 t/lib/autovivification/TestRequired1.pm
 t/lib/autovivification/TestRequired2.pm
index 72cd2657ee2c1c689e85442bbca1f77b20d68330..4e7ccaa032da344682be0a7ace71b58c2fdef2c8 100644 (file)
@@ -37,7 +37,7 @@ while (<$hash_t>) {
   $in_data = 1;
   print $array_t $_;
  } elsif (!$in_data) {
-  s{s/\^\$/%/}{s/^\$/@/};
+  s{'%'}{'\@'};
   print $array_t $_;
  } else {
   s!->{([a-z])}!'->[' . num($1) . ']'!eg;
index 867152a2f84dbd82f71618140938d3df47c3452f..ad82aae48831c7809fc916b4567e890ed3fc8486 100644 (file)
@@ -5,75 +5,13 @@ use warnings;
 
 use Test::More tests => 6 * 3 * 260;
 
-sub testcase {
- my ($var, $init, $code, $exp, $use, $global) = @_;
- my $decl = $global ? "our $var; local $var;" : "my $var;";
- my $test = $var =~ /^[@%]/ ? "\\$var" : $var;
- return <<TESTCASE;
-my \@exp = ($exp);
-$decl
-$init
-my \$res = eval {
- local \$SIG{__WARN__} = sub { die join '', 'warn:', \@_ };
- $use
- $code
-};
-if (ref \$exp[0]) {
- like \$@, \$exp[0], \$desc . ' [exception]';
-} else {
- is   \$@, \$exp[0], \$desc . ' [exception]';
-}
-is_deeply \$res, \$exp[1], \$desc . ' [return]';
-is_deeply $test, \$exp[2], \$desc . ' [variable]';
-TESTCASE
-}
+use lib 't/lib';
+use autovivification::TestCases;
 
 while (<DATA>) {
  1 while chomp;
  next unless /#/;
- my @chunks = split /#+/, "$_ ";
- s/^\s+//, s/\s+$// for @chunks;
- my ($init, $code, $exp, $opts) = @chunks;
- (my $var = $init) =~ s/[^\$@%\w].*//;
- $init = $var eq $init ? '' : "$init;";
- my $use;
- if ($opts) {
-  for (split ' ', $opts) {
-   my $no = 1;
-   $no = 0 if s/^([-+])// and $1 eq '-';
-   $use .= ($no ? 'no' : 'use') . " autovivification '$_';"
-  }
- } elsif (defined $opts) {
-  $opts = 'empty';
-  $use  = 'no autovivification;';
- } else {
-  $opts = 'default';
-  $use  = '';
- }
- my @testcases = (
-  [ $var, $init,               $code, $exp, $use, 0 ],
-  [ $var, "use strict; $init", $code, $exp, $use, 1 ],
-  [ $var, "no strict;  $init", $code, $exp, $use, 1 ],
- );
- my @extra;
- for (@testcases) {
-  my $var = $_->[0];
-  if ($var =~ /\$/) {
-   my @new = @$_;
-   $new[0] =~ s/^$/%/;
-   $new[1] =~ s/$var\->/$var/g;
-   $new[2] =~ s/$var\->/$var/g;
-   push @extra, \@new;
-  }
- }
- push @testcases, @extra;
- for (@testcases) {
-  my $testcase = testcase(@$_);
-  my ($var, $init, $code) = @$_;
-  my $desc = do { (my $x = "$var | $init") =~ s,;\s+$,,; $x } . " | $code | $opts";
-  eval $testcase;
-  diag "== This testcase failed to compile ==\n$testcase\n## Reason: $@" if $@;
- }
+ testcase_ok($_, '%');
 }
 
 __DATA__
index 5183bdfab92689d044df1a35e433539beb5f9727..ed746c67f208bf466467691a907591e9dca10196 100644 (file)
@@ -5,75 +5,13 @@ use warnings;
 
 use Test::More tests => 6 * 3 * 260;
 
-sub testcase {
- my ($var, $init, $code, $exp, $use, $global) = @_;
- my $decl = $global ? "our $var; local $var;" : "my $var;";
- my $test = $var =~ /^[@%]/ ? "\\$var" : $var;
- return <<TESTCASE;
-my \@exp = ($exp);
-$decl
-$init
-my \$res = eval {
- local \$SIG{__WARN__} = sub { die join '', 'warn:', \@_ };
- $use
- $code
-};
-if (ref \$exp[0]) {
- like \$@, \$exp[0], \$desc . ' [exception]';
-} else {
- is   \$@, \$exp[0], \$desc . ' [exception]';
-}
-is_deeply \$res, \$exp[1], \$desc . ' [return]';
-is_deeply $test, \$exp[2], \$desc . ' [variable]';
-TESTCASE
-}
+use lib 't/lib';
+use autovivification::TestCases;
 
 while (<DATA>) {
  1 while chomp;
  next unless /#/;
- my @chunks = split /#+/, "$_ ";
- s/^\s+//, s/\s+$// for @chunks;
- my ($init, $code, $exp, $opts) = @chunks;
- (my $var = $init) =~ s/[^\$@%\w].*//;
- $init = $var eq $init ? '' : "$init;";
- my $use;
- if ($opts) {
-  for (split ' ', $opts) {
-   my $no = 1;
-   $no = 0 if s/^([-+])// and $1 eq '-';
-   $use .= ($no ? 'no' : 'use') . " autovivification '$_';"
-  }
- } elsif (defined $opts) {
-  $opts = 'empty';
-  $use  = 'no autovivification;';
- } else {
-  $opts = 'default';
-  $use  = '';
- }
- my @testcases = (
-  [ $var, $init,               $code, $exp, $use, 0 ],
-  [ $var, "use strict; $init", $code, $exp, $use, 1 ],
-  [ $var, "no strict;  $init", $code, $exp, $use, 1 ],
- );
- my @extra;
- for (@testcases) {
-  my $var = $_->[0];
-  if ($var =~ /\$/) {
-   my @new = @$_;
-   $new[0] =~ s/^$/@/;
-   $new[1] =~ s/$var\->/$var/g;
-   $new[2] =~ s/$var\->/$var/g;
-   push @extra, \@new;
-  }
- }
- push @testcases, @extra;
- for (@testcases) {
-  my $testcase = testcase(@$_);
-  my ($var, $init, $code) = @$_;
-  my $desc = do { (my $x = "$var | $init") =~ s,;\s+$,,; $x } . " | $code | $opts";
-  eval $testcase;
-  diag "== This testcase failed to compile ==\n$testcase\n## Reason: $@" if $@;
- }
+ testcase_ok($_, '@');
 }
 
 __DATA__
diff --git a/t/lib/autovivification/TestCases.pm b/t/lib/autovivification/TestCases.pm
new file mode 100644 (file)
index 0000000..507a4d8
--- /dev/null
@@ -0,0 +1,84 @@
+package autovivification::TestCases;
+
+use strict;
+use warnings;
+
+use Test::More;
+
+sub import {
+ no strict 'refs';
+ *{caller().'::testcase_ok'} = \&testcase_ok;
+}
+
+sub source {
+ my ($var, $init, $code, $exp, $use, $global) = @_;
+ my $decl = $global ? "our $var; local $var;" : "my $var;";
+ my $test = $var =~ /^[@%]/ ? "\\$var" : $var;
+ return <<TESTCASE;
+my \@exp = ($exp);
+$decl
+$init
+my \$res = eval {
+ local \$SIG{__WARN__} = sub { die join '', 'warn:', \@_ };
+ $use
+ $code
+};
+if (ref \$exp[0]) {
+ like \$@, \$exp[0], \$desc . ' [exception]';
+} else {
+ is   \$@, \$exp[0], \$desc . ' [exception]';
+}
+is_deeply \$res, \$exp[1], \$desc . ' [return]';
+is_deeply $test, \$exp[2], \$desc . ' [variable]';
+TESTCASE
+}
+
+sub testcase_ok {
+ local $_  = shift;
+ my $sigil = shift;
+ my @chunks = split /#+/, "$_ ";
+ s/^\s+//, s/\s+$// for @chunks;
+ my ($init, $code, $exp, $opts) = @chunks;
+ (my $var = $init) =~ s/[^\$@%\w].*//;
+ $init = $var eq $init ? '' : "$init;";
+ my $use;
+ if ($opts) {
+  for (split ' ', $opts) {
+   my $no = 1;
+   $no = 0 if s/^([-+])// and $1 eq '-';
+   $use .= ($no ? 'no' : 'use') . " autovivification '$_';"
+  }
+ } elsif (defined $opts) {
+  $opts = 'empty';
+  $use  = 'no autovivification;';
+ } else {
+  $opts = 'default';
+  $use  = '';
+ }
+ my @testcases = (
+  [ $var, $init,               $code, $exp, $use, 0 ],
+  [ $var, "use strict; $init", $code, $exp, $use, 1 ],
+  [ $var, "no strict;  $init", $code, $exp, $use, 1 ],
+ );
+ my @extra;
+ for (@testcases) {
+  my $var = $_->[0];
+  if ($var =~ /\$/) {
+   my @new = @$_;
+   $new[0] =~ s/^$/$sigil/;
+   $new[1] =~ s/$var\->/$var/g;
+   $new[2] =~ s/$var\->/$var/g;
+   push @extra, \@new;
+  }
+ }
+ push @testcases, @extra;
+ for (@testcases) {
+  my $testcase = source(@$_);
+  my ($var, $init, $code) = @$_;
+  my $desc = do { (my $x = "$var | $init") =~ s,;\s+$,,; $x } . " | $code | $opts";
+  eval $testcase;
+  diag "== This testcase failed to compile ==\n$testcase\n## Reason: $@" if $@;
+ }
+}
+
+1;