diff options
author | Eoghan Sherry <ejsherry@gmail.com> | 2010-12-07 15:28:21 -0500 |
---|---|---|
committer | Eoghan Sherry <ejsherry@gmail.com> | 2010-12-07 15:28:21 -0500 |
commit | 2aa82e389b9e85c8d008598c7cfe95222e1906b3 (patch) | |
tree | 0a1a3818f0cc986269f5e113fb82536781e9e7b8 /test/errchk | |
parent | 3543dbe96f0175cec025b3c7e9b569112640299d (diff) | |
download | go-2aa82e389b9e85c8d008598c7cfe95222e1906b3.tar.gz |
errchk: accept multiple source files
R=rsc, iant
CC=golang-dev
http://codereview.appspot.com/3217042
Committer: Russ Cox <rsc@golang.org>
Diffstat (limited to 'test/errchk')
-rwxr-xr-x | test/errchk | 100 |
1 files changed, 59 insertions, 41 deletions
diff --git a/test/errchk b/test/errchk index d65899be6..b0edd7a6b 100755 --- a/test/errchk +++ b/test/errchk @@ -3,30 +3,38 @@ # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. -# This script checks that the compilers emits the errors which we -# expect. Usage: errchk COMPILER [OPTS] SOURCEFILE. This will run -# the command COMPILER [OPTS] SOURCEFILE. The compilation is expected -# to fail; if it succeeds, this script will report an error. The -# stderr output of the compiler will be matched against comments in -# SOURCEFILE. For each line of the source file which should generate -# an error, there should be a comment of the form // ERROR "regexp". -# If the compiler generates an error for a line which has no such -# commnt, this script will report an error. Likewise if the compiler -# does not generate an error for a line which has a comment, or if the -# error message does not match the <regexp>. The <regexp> syntax -# is Perl but its best to stick to egrep. +# This script checks that the compilers emit the errors which we expect. +# Usage: errchk COMPILER [OPTS] SOURCEFILES. This will run the command +# COMPILER [OPTS] SOURCEFILES. The compilation is expected to fail; if +# it succeeds, this script will report an error. The stderr output of +# the compiler will be matched against comments in SOURCEFILES. For each +# line of the source files which should generate an error, there should +# be a comment of the form // ERROR "regexp". If the compiler generates +# an error for a line which has no such comment, this script will report +# an error. Likewise if the compiler does not generate an error for a +# line which has a comment, or if the error message does not match the +# <regexp>. The <regexp> syntax is Perl but its best to stick to egrep. use POSIX; if(@ARGV < 1) { - print STDERR "Usage: errchk COMPILER [OPTS] SOURCEFILE\n"; + print STDERR "Usage: errchk COMPILER [OPTS] SOURCEFILES\n"; exit 1; } -$file = $ARGV[@ARGV-1]; -open(SRC, $file) || die "BUG: errchk: open $file: $!"; -@src = <SRC>; -close(SRC); +# Grab SOURCEFILES +foreach(reverse 0 .. @ARGV-1) { + unless($ARGV[$_] =~ /\.go$/) { + @file = @ARGV[$_+1 .. @ARGV-1]; + last; + } +} + +foreach $file (@file) { + open(SRC, $file) || die "BUG: errchk: open $file: $!"; + $src{$file} = [<SRC>]; + close(SRC); +} # Run command $cmd = join(' ', @ARGV); @@ -57,35 +65,45 @@ sub bug() { } } -$line = 0; -foreach $src (@src) { - $line++; - next unless $src =~ m|// (GC_)?ERROR (.*)|; - $regexp = $2; - if($regexp !~ /^"([^"]*)"/) { - print STDERR "$file:$line: malformed regexp\n"; - next; - } - $regexp = $1; - - @errmsg = grep { /$file:$line[:[]/ } @out; - @out = grep { !/$file:$line[:[]/ } @out; - if(@errmsg == 0) { - bug(); - print STDERR "errchk: $file:$line: missing expected error: '$regexp'\n"; - next; - } - @match = grep { /$regexp/ } @errmsg; - if(@match == 0) { - bug(); - print STDERR "errchk: $file:$line: error message does not match '$regexp'\n"; - next; +sub chk { + my $file = shift; + my $line = 0; + my $regexp; + my @errmsg; + my @match; + foreach my $src (@{$src{$file}}) { + $line++; + next unless $src =~ m|// (GC_)?ERROR (.*)|; + $regexp = $2; + if($regexp !~ /^"([^"]*)"/) { + print STDERR "$file:$line: malformed regexp\n"; + next; + } + $regexp = $1; + + @errmsg = grep { /$file:$line[:[]/ } @out; + @out = grep { !/$file:$line[:[]/ } @out; + if(@errmsg == 0) { + bug(); + print STDERR "errchk: $file:$line: missing expected error: '$regexp'\n"; + next; + } + @match = grep { /$regexp/ } @errmsg; + if(@match == 0) { + bug(); + print STDERR "errchk: $file:$line: error message does not match '$regexp'\n"; + next; + } } } +foreach $file (@file) { + chk($file) +} + if(@out != 0) { bug(); - print STDERR "errchk: $file: unmatched error messages:\n"; + print STDERR "errchk: unmatched error messages:\n"; print STDERR "==================================================\n"; print STDERR @out; print STDERR "==================================================\n"; |