The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! perl -w
use strict;
$| = 1;

# $Id: grepccmsg.t 1041 2007-04-06 11:59:32Z abeltje $

my $findbin;
use File::Basename;
BEGIN { $findbin = dirname $0; }
use lib $findbin;
use TestLib;

use File::Spec::Functions;
use Test::More;

my @logs;
BEGIN {
    @logs = ( 
        { file => 'w32bcc32.log', type => 'bcc32',
          wcnt => 12, ecnt => 1, lcnt => 13 },
        { file => 'solaris.log',  type => 'solaris',
          wcnt =>  2, ecnt => 0, lcnt => 2 },
        { file => 'hpux1020.log', type => 'hpux',
          wcnt =>  1, ecnt => 0, lcnt => 1 },
        { file => 'hpux1111.log', type => 'hpux',
          wcnt =>  2, ecnt => 0, lcnt => 2 },
        { file => 'mingw.log',    type => 'gcc',
          wcnt =>  1, ecnt => 0, lcnt => 32 }, 
    );

    plan tests => 1 + 5 * @logs + 1;

    use_ok 'Test::Smoke::Util', 'grepccmsg';
}

my $verbose = $ENV{SMOKE_VERBOSE} || 0;

for my $log ( @logs ) {
    my $file = catfile "t", "logs", $log->{file};
    ok -f $file, "logfile($file) exists";

    my @errors = grepccmsg( $log->{type}, $file, $verbose );

    ok @errors, "Found messages in '$log->{file}'";
    is scalar @errors, $log->{lcnt},
       "Lines extracted from $log->{file}: $log->{lcnt}"
         or diag join "\n",@errors;

    my $wcnt = grep /\bwarning\b/i => @errors;
    is $wcnt, $log->{wcnt},
       "Number of warnings: $log->{wcnt}";

    my $ecnt = grep /\berror\b/i => @errors;
    is $ecnt, $log->{ecnt},
       "Number of errors: $log->{ecnt}";
}

{
    my $log = catfile 't', 'logs', 'gcc2722.log';
    my @errors = grepccmsg( 'gcc', $log, $verbose );
    my $report = join "\n", @errors;

    ( my $orig = get_file( $log ) ) =~ s/\n$//;
    is $report, $orig, "Got all the gcc-2.7.2.2 messages";
}