Testcase, der alle Vorkommnisse von my $var = EXPR if COND; findet.
authorSven Schöling <s.schoeling@linet-services.de>
Fri, 4 Mar 2011 16:51:50 +0000 (17:51 +0100)
committerSven Schöling <s.schoeling@linet-services.de>
Wed, 26 Oct 2011 13:21:31 +0000 (15:21 +0200)
t/structure/no_lexicals_in_postif.t [new file with mode: 0644]

diff --git a/t/structure/no_lexicals_in_postif.t b/t/structure/no_lexicals_in_postif.t
new file mode 100644 (file)
index 0000000..960b9ab
--- /dev/null
@@ -0,0 +1,45 @@
+use strict;
+
+use lib 't';
+
+use Support::Files;
+
+use Test::More tests => scalar(@Support::Files::testitems);
+use PPI;
+
+my $fh;
+{
+    local $^W = 0;  # Don't complain about non-existent filehandles
+    if (-e \*Test::More::TESTOUT) {
+        $fh = \*Test::More::TESTOUT;
+    } elsif (-e \*Test::Builder::TESTOUT) {
+        $fh = \*Test::Builder::TESTOUT;
+    } else {
+        $fh = \*STDOUT;
+    }
+}
+
+my @testitems = @Support::Files::testitems;
+
+foreach my $file (@testitems) {
+  my $clean = 1;
+  my $doc = PPI::Document->new($file);
+  my $stmts = $doc->find('Statement::Variable');
+
+  for my $var (@{ $stmts || [] }) {
+    # local can have valid uses like this, and our is extremely uncommon
+    next unless $var->type eq 'my';
+
+    # no if? alright
+    next unless $var->find(sub { $_[1]->content eq 'if' });
+
+    # token "if" is not in the top level struvture - no problem
+    # most likely an anonymous sub or a complicated map/grep/reduce
+    next unless grep { $_->content eq 'if'  } $var->schildren;
+
+    $clean = 0;
+    print $fh "?: $var \n";
+  }
+
+  ok $clean, $file;
+}