sl@0: # sl@0: # Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: # All rights reserved. sl@0: # This component and the accompanying materials are made available sl@0: # under the terms of the License "Eclipse Public License v1.0" sl@0: # which accompanies this distribution, and is available sl@0: # at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: # sl@0: # Initial Contributors: sl@0: # Nokia Corporation - initial contribution. sl@0: # sl@0: # Contributors: sl@0: # sl@0: # Description: sl@0: # sl@0: sl@0: sl@0: use strict; sl@0: use Getopt::Long; sl@0: use IO::Handle; sl@0: use IO::Seekable; sl@0: use File::Basename; sl@0: sl@0: main(); sl@0: exit(0); sl@0: sl@0: sub main { sl@0: if ($#ARGV != 0) sl@0: { sl@0: print "usage: newdigest.pl \n"; sl@0: exit; sl@0: } sl@0: sl@0: my ($log_file) = $ARGV[0]; sl@0: sl@0: if (-f $log_file) sl@0: { sl@0: system ("del $log_file"); sl@0: } sl@0: sl@0: opendir( DIR, "." ) or die("Unable to open directory"); sl@0: my @dirs = readdir DIR; sl@0: my $entry; sl@0: sl@0: my $nTotalTestCase = 0; sl@0: my $nTotalPassedCase = 0; sl@0: my $nTotalFailedCase = 0; sl@0: my $nTotalPassedStep = 0; sl@0: my $nTotalFailedStep = 0; sl@0: my $scriptsRun = 0; sl@0: open (SUMMARY, ">$log_file") || die "couldn't open digest file: $!"; sl@0: sl@0: foreach $entry ( sort @dirs ) sl@0: { sl@0: next if ( $entry eq ".." or $entry eq "." ); sl@0: next if ( -d $entry ); sl@0: sl@0: my $failed = 0; sl@0: my $passed = 0; sl@0: my $ntestcasepassed = 0; sl@0: my $ntestcasefailed = 0; sl@0: sl@0: if ( $entry =~ /\.log/ || $entry =~ /\.txt/) sl@0: { sl@0: parseLog($entry, \$failed, \$passed); sl@0: #printf SUMMARY (" %45s: %d tests failed out of %d\r\n", $entry, $failed, $failed+$passed); sl@0: } sl@0: sl@0: elsif ($entry =~ /\.htm/) sl@0: { sl@0: open (HTML_LOG, "$entry" ) or die("open failed"); sl@0: my $Is_Tef_Htm = 1; sl@0: sl@0: while() sl@0: { sl@0: chomp; sl@0: sl@0: my $line = $_; sl@0: $line =~ s/\x0//g; sl@0: sl@0: if ($line =~ /tests failed/) sl@0: { sl@0: parseLog($entry, \$failed, \$passed); sl@0: #printf SUMMARY (" %45s: %d tests failed out of %d\r\n", $entry, $failed, $failed+$passed); sl@0: $Is_Tef_Htm = 0; sl@0: } sl@0: sl@0: } sl@0: sl@0: close HTML_LOG; sl@0: if( $Is_Tef_Htm ) sl@0: { sl@0: parseHtm($entry, \$failed, \$passed, \$ntestcasefailed, \$ntestcasepassed); sl@0: } sl@0: } sl@0: if ( $passed > 0 or $failed > 0) sl@0: { sl@0: $scriptsRun++; sl@0: $nTotalPassedStep += $passed; sl@0: $nTotalFailedStep += $failed; sl@0: sl@0: if ( $ntestcasepassed > 0 || $ntestcasefailed > 0 ) sl@0: { sl@0: $nTotalPassedCase += $ntestcasepassed; sl@0: $nTotalFailedCase += $ntestcasefailed; sl@0: } sl@0: else sl@0: { sl@0: if ( $failed > 0 ) sl@0: { sl@0: $nTotalFailedCase++; sl@0: } sl@0: else sl@0: { sl@0: $nTotalPassedCase++; sl@0: } sl@0: } sl@0: } sl@0: } sl@0: my $ntestScripts = " Test Scripts Run \t"; sl@0: print SUMMARY "\n"; sl@0: print SUMMARY ($scriptsRun, $ntestScripts); sl@0: sl@0: my $nTotalTestCases = $nTotalFailedCase+$nTotalPassedCase; sl@0: print SUMMARY "\n"; sl@0: print SUMMARY "\r\nTest Cases\tPassed\tFailed\tTotal\r\n"; sl@0: printf SUMMARY ("\t\t%d\t%d\t%d\n", $nTotalPassedCase, $nTotalFailedCase, $nTotalTestCases); sl@0: if ($nTotalTestCases > 0) sl@0: { sl@0: print SUMMARY "\r\n\t\t%Passed\t\t%Failed\r\n"; sl@0: printf SUMMARY ("\t\t%.2f\t\t%.2f\r\n", $nTotalPassedCase/$nTotalTestCases*100, $nTotalFailedCase/$nTotalTestCases*100); sl@0: } sl@0: my $nTotalTestSteps = $nTotalPassedStep+$nTotalFailedStep; sl@0: print SUMMARY "\n"; sl@0: print SUMMARY "\r\nTest Steps\tPassed\tFailed\tTotal\r\n"; sl@0: printf SUMMARY ("\t\t%d\t%d\t%d\n", $nTotalPassedStep, $nTotalFailedStep, $nTotalTestSteps); sl@0: if ($nTotalTestSteps > 0) sl@0: { sl@0: print SUMMARY "\r\n\t\t%Passed\t\t%Failed\r\n"; sl@0: printf SUMMARY ("\t\t%.2f\t\t%.2f\r\n", $nTotalPassedStep/$nTotalTestSteps*100, $nTotalFailedStep/$nTotalTestSteps*100); sl@0: } sl@0: } sl@0: sl@0: sl@0: sub parseLog($$$) { sl@0: my ($entry, $failed, $passed) = @_; sl@0: sl@0: open (LOG, "$entry" ) or die("open failed"); sl@0: my $found = "false"; sl@0: my $notests = 0; sl@0: while() sl@0: { sl@0: chomp; sl@0: sl@0: my $line = $_; sl@0: $line =~ s/\x0//g; sl@0: if ($line =~ /tests failed/) sl@0: { sl@0: $line =~ /(\d+) tests failed out of (\d+)/; sl@0: printf SUMMARY (" %45s: %s\r\n", $entry, $&); sl@0: $found = "true"; sl@0: $$failed = $1; sl@0: $notests = $2; sl@0: } sl@0: } sl@0: close LOG; sl@0: sl@0: if ( $found eq "false" && $entry ne "buildid.txt") sl@0: { sl@0: printf SUMMARY ("WARNING: Could not parse file %s\r\n", $entry); sl@0: } sl@0: $$passed = $notests - $$failed; sl@0: } sl@0: sl@0: sub parseHtm($$$$$) { sl@0: my ($entry, $nfailed, $npassed, $nCasesFailed, $nCasesPassed) = @_; sl@0: my ($textfile); sl@0: $textfile = $entry; sl@0: $textfile =~ s/\.htm/\.log/; sl@0: next if ( -f $textfile); sl@0: sl@0: my $ncasestotal = 0; sl@0: my $nstepstotal = 0; sl@0: my $passed = 0; sl@0: my $failed = 0; sl@0: my $casepassed = 0; sl@0: my $casefailed = 0; sl@0: my $TEST_STEP_SECTION = 0; sl@0: my $TEST_CASE_SECTION = 0; sl@0: my $noTestCase = 0; sl@0: sl@0: sl@0: open (LOG, $entry) || die "couldn't open $entry: $!"; sl@0: while () sl@0: { sl@0: my ($sLine) = $_; sl@0: sl@0: if ( $sLine =~ /TEST STEP SUMMARY:<\/font>/i) sl@0: { sl@0: $TEST_STEP_SECTION = 1; sl@0: $TEST_CASE_SECTION = 0; sl@0: } sl@0: elsif ( $sLine =~ /RUN PROGRAM SUMMARY:<\/font>/i) sl@0: { sl@0: $TEST_STEP_SECTION = 0; sl@0: } sl@0: elsif( $sLine =~ /TEST CASE SUMMARY:<\/font>/i) sl@0: { sl@0: $TEST_CASE_SECTION = 1; sl@0: $TEST_STEP_SECTION = 0; sl@0: } sl@0: elsif ( $sLine =~ /SUMMARY:<\/font>/i ) # To Keep Last sl@0: { sl@0: $TEST_STEP_SECTION = 1; sl@0: $noTestCase = 1; sl@0: } sl@0: sl@0: if ( $TEST_STEP_SECTION ) sl@0: { sl@0: $passed += $1 if( $sLine =~ / PASS = (\d+)<\/font>/i); sl@0: $passed += $1 if( $sLine =~ /PASS = (\d+)<\/font>/i); sl@0: $failed += $1 if( $sLine =~ /FAIL = (\d+)<\/font>/i); sl@0: $failed += $1 if( $sLine =~ /ABORT = (\d+)<\/font>/i); sl@0: $failed += $1 if( $sLine =~ /PANIC = (\d+)<\/font>/i); sl@0: $failed += $1 if( $sLine =~ /INCONCLUSIVE = (\d+)<\/font>/i); sl@0: $failed += $1 if( $sLine =~ /UNKNOWN = (\d+)<\/font>/i); sl@0: $failed += $1 if( $sLine =~ /UNEXECUTED = (\d+)<\/font>/i); sl@0: } sl@0: if ( $TEST_CASE_SECTION ) sl@0: { sl@0: $casepassed += $1 if( $sLine =~ / PASS = (\d+)<\/font>/i); sl@0: $casepassed += $1 if( $sLine =~ /PASS = (\d+)<\/font>/i); sl@0: $casefailed += $1 if( $sLine =~ /FAIL = (\d+)<\/font>/i); sl@0: $casefailed += $1 if( $sLine =~ /ABORT = (\d+)<\/font>/i); sl@0: $casefailed += $1 if( $sLine =~ /PANIC = (\d+)<\/font>/i); sl@0: $casefailed += $1 if( $sLine =~ /INCONCLUSIVE = (\d+)<\/font>/i); sl@0: $casefailed += $1 if( $sLine =~ /UNKNOWN = (\d+)<\/font>/i); sl@0: $casefailed += $1 if( $sLine =~ /UNEXECUTED = (\d+)<\/font>/i); sl@0: } sl@0: } sl@0: $ncasestotal = $casefailed + $casepassed; sl@0: $nstepstotal = $passed + $failed; sl@0: sl@0: close LOG; sl@0: if($ncasestotal != 0 or $noTestCase == 1) sl@0: { sl@0: printf SUMMARY (" %45s: %d tests failed out of %d\r\n", $entry, $failed, $nstepstotal); sl@0: } sl@0: else sl@0: { sl@0: printf SUMMARY ("WARNING: %45s: %d tests failed out of %d\r\n", $entry, $failed, $nstepstotal); sl@0: } sl@0: $$npassed = $passed; sl@0: $$nfailed = $failed; sl@0: $$nCasesPassed = $casepassed; sl@0: $$nCasesFailed = $casefailed; sl@0: } sl@0: sl@0: sl@0: sl@0: sl@0: sl@0: