B::Lint tests
Rafael Garcia-Suarez [Fri, 8 Mar 2002 14:47:19 +0000 (15:47 +0100)]
Message-ID: <20020308144719.A2663@rafael>

p4raw-id: //depot/perl@15104

MANIFEST
ext/B/B/Lint.pm
ext/B/t/lint.t [new file with mode: 0644]

index 1a7e8f5..d4ab4aa 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -102,6 +102,7 @@ ext/B/t/bblock.t        See if B::Bblock works
 ext/B/t/concise.t      See whether B::Concise works
 ext/B/t/debug.t                See if B::Debug works
 ext/B/t/deparse.t      See if B::Deparse works
+ext/B/t/lint.t         See if B::Lint works
 ext/B/t/showlex.t      See if B::ShowLex works
 ext/B/t/stash.t                See if B::Stash works
 ext/B/t/terse.t                See if B::Terse works
index 81e0f0e..1510d36 100644 (file)
@@ -1,6 +1,6 @@
 package B::Lint;
 
-our $VERSION = '1.00';
+our $VERSION = '1.01';
 
 =head1 NAME
 
@@ -164,7 +164,7 @@ sub gimme {
     my $op = shift;
     my $flags = $op->flags;
     if ($flags & OPf_WANT) {
-       return(($flags & OPf_WANT_LIST) ? 1 : 0);
+       return(($flags & OPf_WANT == OPf_WANT_LIST) ? 1 : 0);
     }
     return undef;
 }
diff --git a/ext/B/t/lint.t b/ext/B/t/lint.t
new file mode 100644 (file)
index 0000000..f4209de
--- /dev/null
@@ -0,0 +1,81 @@
+#!./perl -w
+
+BEGIN {
+    chdir 't' if -d 't';
+    @INC = qw(../lib);
+    require './test.pl';
+}
+
+plan tests => 13;
+
+# Runs a separate perl interpreter with the appropriate lint options
+# turned on
+sub runlint ($$$;$) {
+    my ($opts,$prog,$result,$testname) = @_;
+    my $res = runperl(
+       switches => [ "-MO=Lint,$opts" ],
+       prog     => $prog,
+       stderr   => 1,
+    );
+    $res =~ s/-e syntax OK\n$//;
+    is( $res, $result, $testname || $opts );
+}
+
+runlint 'context', '$foo = @bar', <<'RESULT';
+Implicit scalar context for array in scalar assignment at -e line 1
+RESULT
+
+runlint 'context', '$foo = length @bar', <<'RESULT';
+Implicit scalar context for array in length at -e line 1
+RESULT
+
+runlint 'implicit-read', '/foo/', <<'RESULT';
+Implicit match on $_ at -e line 1
+RESULT
+
+runlint 'implicit-write', 's/foo/bar/', <<'RESULT';
+Implicit substitution on $_ at -e line 1
+RESULT
+
+runlint 'implicit-read', '1 for @ARGV', <<'RESULT', 'implicit-read in foreach';
+Implicit use of $_ in foreach at -e line 1
+RESULT
+
+runlint 'dollar-underscore', '$_ = 1', <<'RESULT';
+Use of $_ at -e line 1
+RESULT
+
+runlint 'dollar-underscore', 'print', <<'RESULT', 'dollar-underscore in print';
+Use of $_ at -e line 1
+RESULT
+
+runlint 'private-names', 'sub A::_f{};A::_f()', <<'RESULT';
+Illegal reference to private name _f at -e line 1
+RESULT
+
+runlint 'private-names', '$A::_x', <<'RESULT';
+Illegal reference to private name _x at -e line 1
+RESULT
+
+{
+    local $TODO = q/doesn't catch methods/;
+    runlint 'private-names', 'sub A::_f{};A->_f()', <<'RESULT',
+Illegal reference to private method name _f at -e line 1
+RESULT
+    'private-names';
+}
+
+runlint 'undefined-subs', 'foo()', <<'RESULT';
+Undefined subroutine foo called at -e line 1
+RESULT
+
+runlint 'regexp-variables', 'print $&', <<'RESULT';
+Use of regexp variable $& at -e line 1
+RESULT
+
+{
+    local $TODO = 'bug';
+    runlint 'regexp-variables', 's/./$&/', <<'RESULT';
+Use of regexp variable $& at -e line 1
+RESULT
+}