--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/testing/tools/rerunsubs.pl Thu Nov 04 11:16:56 2010 +0200
@@ -0,0 +1,369 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+my $regexpCaseName = '[<>\x3C\x3E\(\)\w.,\/:_\-&\' ]+';
+
+{ # No globals.
+ # Solve where the script is located.
+ $0=~/^(.+[\\\/])[^\\\/]+[\\\/]*$/;
+ my $cgidir= $1 || "./";
+
+ # And try to solve relative path.
+ if( index( $cgidir, "..\\" ) != -1 )
+ {
+ my $p = cwd;
+ $p =~ s/\//\\/g;
+ $cgidir =~ s/\//\\/g;
+ while(1)
+ {
+ my $pos = index( $cgidir, "..\\" );
+ last if( $pos == -1 );
+ $cgidir = substr( $cgidir, $pos+3 );
+
+ $pos = rindex( $p, "\\" );
+ last if( $pos == -1 );
+ $p = substr( $p, 0, $pos);
+ }
+ $cgidir = $p . "\\" . $cgidir;
+ }
+
+ if ( ! -e( $cgidir . "rerunsubs.pl" ) )
+ {
+ $cgidir = cwd;
+ my $domain = "VideoApp_Domain";
+ my $pos = index( $cgidir, $domain );
+ if( $pos != -1 )
+ {
+ $cgidir = substr( $cgidir, 0, $pos + length( $domain ) ) . "\\videoplayer\\tsrc\\testing\\tools\\";
+
+ }
+ }
+
+ require( $cgidir . "utils.pl" );
+}
+
+#------------------------------------------------------------------------------------
+# Rerun_ReadFailedCases
+# Parameters:
+# $filename, filename of the result IPTV_Engine testreport.
+# $refCfgs, reference to array which contains failed cases as a result
+#
+# array
+# {
+# array { $cfgFilename, @cases },
+# array { $cfgFilename, @cases },
+# ...
+# }
+#
+# returns 1 if something fails, otherwise 0
+#------------------------------------------------------------------------------------
+
+sub Rerun_ReadFailedCases
+{
+ my( $filename, $refCfgs ) = @_;
+
+ if( !open(FILE_HANDLE, $filename) )
+ {
+ print("ERROR! Could not open file '" . $filename . "'\n");
+ return 1;
+ }
+ my @array = <FILE_HANDLE>;
+ close(FILE_HANDLE);
+
+ my $refCfg;
+ my $cfgHasFailedCases = 0;
+
+ my $lineCount = scalar(@array);
+ for($i=0; $i<$lineCount; $i++ )
+ {
+ $line = $array[$i];
+ XmlToText(\$line);
+ $line =~ s/\'/\"/g;
+
+ # Read the name of cfg
+ if($line =~ m/Cell ss:MergeAcross=\"11\" ss:StyleID=\"/ )
+ {
+ #<Cell ss:MergeAcross="11" ss:StyleID="m150670304"><Data ss:Type="String">IptvEpgEngineTest.cfg</Data></Cell>
+ if($line =~ m/>([a-z0-9_\-]+).cfg<\/Data>/i)
+ {
+ # Add cfg to cfg list if it has failed cases.
+ if( defined( @$refCfg ) and $cfgHasFailedCases )
+ {
+ push @$refCfgs, [ @$refCfg ];
+ }
+
+ # Initialize new array for new cfg, if the cfg exists.
+ $cfgHasFailedCases = 0;
+
+ my $cfgFilename = $1 . ".cfg";
+
+ my @cfg;
+ $refCfg = \@cfg;
+ push @cfg, $cfgFilename;
+ my @cases;
+ push @cfg, [@cases];
+ }
+ }
+
+ #<Cell ss:MergeAcross="5" ss:StyleID="m150670456"><Data ss:Type="String">ET17099 <not a test> Setup EPG tests</Data></Cell>
+ #<Cell ss:MergeAcross="5" ss:StyleID="m150686796"><Data ss:Type="String">ET17001 Update EPG 3G</Data></Cell>
+ #<Cell ss:StyleID="s57"><Data ss:Type="String">PASSED</Data></Cell>
+
+ # Read case and the result
+ if( defined( @$refCfg ) && $line =~ m/Cell ss:MergeAcross=\"5\" ss:StyleID=\"/ )
+ {
+ if($line =~ m/>($regexpCaseName)<\/Data><\/Cell>/i)
+ {
+ my $caseName = $1;
+ my $saveCase = 0;
+
+ $line2 = $array[$i+1];
+ XmlToText(\$line2);
+
+ #print("Found case: $caseName\n");
+
+ if( $line =~ m/Setup/i or $line =~ m/not a test/i or $line =~ m/set up/i or $line =~m/not test/i or $line =~m/cleanup/i)
+ {
+ #print(" - is for setup\n");
+ $saveCase = 1;
+ }
+
+ # If case has failed.
+ if($line2 =~ m/>CRASHED</ or $line2 =~ m/>FAILED</)
+ {
+ #print(" - failed\n");
+ $saveCase = 1;
+ $cfgHasFailedCases = 1;
+ }
+
+ # It's marked for rerun.
+ if($saveCase)
+ {
+ my $refCases = @$refCfg[1];
+ push @$refCases, $caseName;
+ #print(" - ADDED\n");
+ }
+ }
+ }
+ }
+
+ # If cfg has failed cases then add it
+ if(defined(@$refCfg) and $cfgHasFailedCases != 0)
+ {
+ push @$refCfgs, [ @$refCfg ];
+ }
+ return 0;
+}
+
+
+#------------------------------------------------------------------------------------
+# Rerun_GenerateCfg
+# Parameters:
+# $srcFile, $destFile
+#------------------------------------------------------------------------------------
+sub Rerun_GenerateCfg
+{
+ my($srcFile, $destFile, $refFailedCfgs) = @_;
+
+ my $refCases = 0;
+
+ foreach my $cfg( @$refFailedCfgs )
+ {
+ my $cfgFile = GetPathFileName( $srcFile );
+ if( @$cfg[0] =~ m/$cfgFile/i )
+ {
+ $refCases = @$cfg[1];
+ last;
+ }
+ }
+
+ if( !$refCases )
+ {
+ my $cfgFile = GetPathFileName( $srcFile );
+ #print("Writing empty cfg for $cfgFile, no fails.\n");
+
+ open(FILE_HANDLE, ">$destFile");
+ close(FILE_HANDLE);
+
+ return 0;
+ }
+
+ my @foundFailedCases;
+
+ my @lines;
+
+ if( open(FILE_HANDLE, $srcFile) )
+ {
+ @lines = <FILE_HANDLE>;
+ close(FILE_HANDLE);
+ }
+ else
+ {
+ print("ERROR: could not read file: $srcFile\n");
+ return 0;
+ }
+
+ print("Writing cfg $destFile\n");
+ if( !open(FILE_HANDLE, ">$destFile") )
+ {
+ print("ERROR: could not write to file: $destFile\n");
+ return 0;
+ }
+
+ my $lastLineBeforeCases = 0;
+ for( my $i=0; $i<scalar(@lines); $i++ )
+ {
+ $line = $lines[$i];
+ $lastLineBeforeCases = $i if( $line =~ m/\[Enddefine\]/i or $line =~ m/\[EndSub\]/i );
+ }
+
+ # Write lines before first case
+ foreach my $line(@lines)
+ {
+ print FILE_HANDLE ( $line );
+
+ if($line =~ m/\[Enddefine\]/i)
+ {
+ last;
+ }
+ }
+
+ # Write all subs
+
+ my $inSub = 0;
+ my $refSubLines;
+ foreach my $line (@lines)
+ {
+ RemoveWhiteSpaces(\$line);
+
+ # Sub starts?
+ if($line =~ m/\[Sub [a-zA-Z0-9]+\]/)
+ {
+ $inSub= 1;
+ my @subLines;
+ $refSubLines = \@subLines;
+ }
+
+ # Add lines
+ if($inSub)
+ {
+ push @$refSubLines, $line;
+ }
+
+ # Sub ends?
+ if($line =~ m/\[EndSub\]/)
+ {
+ $inSub = 0;
+
+ foreach $l (@$refSubLines)
+ {
+ print FILE_HANDLE ( "$l" . "\n" );
+ }
+
+ print FILE_HANDLE ( "\n" );
+ print FILE_HANDLE ( "\n" );
+ }
+ }
+
+ print FILE_HANDLE ( "\n" );
+ print FILE_HANDLE ( "\n" );
+
+ my $savedCases = 0;
+
+ # Write cases
+ my $inCase = 0;
+ my $refCaseLines;
+ my $writeCase = 0;
+ foreach my $line(@lines)
+ {
+ RemoveWhiteSpaces(\$line);
+
+ # Case starts?
+ if($line =~ m/\[Test\]/)
+ {
+ $inCase = 1;
+ my @caseLines;
+ $refCaseLines = \@caseLines;
+ $writeCase = 0;
+ }
+
+ # Add lines
+ if($inCase)
+ {
+ push @$refCaseLines, $line;
+ }
+
+ # Case ends?
+ if($line =~ m/\[Endtest\]/)
+ {
+ $inCase = 0;
+
+ # And it had failed. Write into new cfg.
+ if($writeCase)
+ {
+ foreach $l(@$refCaseLines)
+ {
+ print FILE_HANDLE ( "$l" . "\n" );
+ }
+
+ print FILE_HANDLE ( "\n" );
+ print FILE_HANDLE ( "\n" );
+ }
+ }
+
+ # title line for the case
+ if($inCase and $line =~ m/^title /)
+ {
+ my $caseName = substr($line, length("title "));
+ RemoveWhiteSpaces(\$caseName);
+
+ foreach my $failedCaseName (@$refCases)
+ {
+ my $addFoundCase = 0;
+ if( $line =~ m/Setup/i or $line =~ m/not a test/i or $line =~ m/set up/i or $line =~m/not test/i or $line =~m/cleanup/i)
+ {
+ $addFoundCase = 1;
+ }
+
+ if($failedCaseName eq $caseName)
+ {
+ $addFoundCase = 1;
+ }
+ if( $addFoundCase )
+ {
+ push @foundFailedCases, $caseName;
+ print(" - Case: $failedCaseName\n");
+ $writeCase = 1;
+ $savedCases++;
+ }
+ }
+ }
+ }
+
+ my $caseIsFound = 0;
+ foreach my $failedCaseName (@$refCases)
+ {
+ foreach my $foundCaseName (@foundFailedCases)
+ {
+ $caseIsFound = 1 if($foundCaseName eq $failedCaseName);
+ }
+ if(!$caseIsFound)
+ {
+ print("ERROR: Case '$failedCaseName' couldn't be found from the CFG files!\n");
+ }
+ $caseIsFound = 0;
+ }
+}