#!/usr/bin/perl
use strict;
use warnings;

my $limit = $ARGV[0];

sub unique {
    my @list = @_;
    my %seen = ();
    return grep { ! $seen{$_} ++ } @list;
}

my %exceptions = ();

local $/ = "Beginning Test:  ";
foreach my $testOutput (<STDIN>) {
    chomp $testOutput;
    
    my ($test) = $testOutput =~ m/(^.*)/;
    my @thrown = unique($testOutput =~ m/(Exception:.*)/g);

    foreach my $t (@thrown) {
	# these two will be in nearly every failed test, just skip them
	next if $t =~ m/Exception: Deployment Failed./;
	next if $t =~ m/Exception: Distribute to one or more targets failed Failed targets: DefaultTarget/;

	# Maybe remove some details so failures can be more easily grouped
	
	$t =~ s,(Could not load WEB-INF/classes/).*(.class),${1}.....${2},;
	$t =~ s,(http://localhost:8080).*(_vehicle_[^/]+)/.*,$1/.....$2.....,;
	$t =~ s,(404 Not Found for http://localhost:8080/jsf_).*,$1.....,;
	$t =~ s,(Module failed validation.).*,$1.....,;
	$t =~ s,(No provider available for resource-ref 'null' of type 'com.sun.ts.tests.common.connector.whitebox.TSConnectionFactory').*,$1.....,;
	$t =~ s,(Table not found).*,$1.....,;
	$t =~ s,(java.lang.NoClassDefFoundError: Could not fully load class: com.sun.ts.tests.jsf).*,$1.....,;

	push( @{$exceptions{$t}}, $test);
    }
}

my @sortedKeys = sort {$#{$exceptions{$b}} <=> $#{$exceptions{$a}}} keys %exceptions;

my $l = 0;
foreach my $exception (@sortedKeys) {
    my $count = $#{$exceptions{$exception}} +1;
    print "$count\t$exception\n";
    last if ++$l >= $limit;
}

print "\n\n\n";
$l = 0;
foreach my $exception (@sortedKeys) {
    my @tests = @{$exceptions{$exception}};
    
    next if ( $#tests < 5 );

    print "$exception\n";
    my $i = 1;
    foreach my $test (@tests) {
	print " @{[$i++]}\t$test\n";
    }

    print "\n\n\n";

    last if ++$l >= $limit;
}
