--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingtestenv/imagingtesttools/Scripts/RunTests.bat Wed Aug 25 12:29:52 2010 +0300
@@ -0,0 +1,508 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+goto endofperl
+@rem ';
+#!perl
+#line 14
+ eval 'exec perl.exe -S $0 ${1+"$@"}'
+ if $running_under_some_shell;
+
+use strict; # important pragma
+use File::Copy;
+use File::Find;
+
+
+my @Month =("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
+my ($sec,my $min,my $hour,my $mday,my $mon,my $year,my $wday,my $yday,my $isdst);
+
+
+my $BuildToUse="winscw";
+my $EpocCDrive = "$ENV{EPOCROOT}epoc32\\$BuildToUse\\c";
+my $ResultsDirectory = "$EpocCDrive\\Logs\\TestResults";
+my $TestFrameworkOpts="";
+my $TestFrameworkNoDelay="";
+my $Debug=0;
+my $Warning=0; #controls how pernickety the output is
+my $Cmd; #general variable to carry system commands
+my $CodeCover=0;
+my $ScriptToRun='[\S]+\.script';
+my $TimesToRun=1;
+
+
+if(@ARGV && (($ARGV[0] eq "-h") ||
+ ($ARGV[0] eq "--h") ||
+ ($ARGV[0] eq "-help") ||
+ ($ARGV[0] eq "--help") ||
+ ($ARGV[0] eq "help"))
+ )
+ {
+ print "Runs all the Test Framework and Test Execute script files.\n";
+ print "\nSyntax : runtests -b=sss -d -c -a -v=nnn -cc -rep=nnn -q\n";
+ print "-b Compiler version to use [wins\|winscw) (default=$BuildToUse)\n";
+ print "-d Force to run testframework at debug mode \n";
+ print "-c Clean results directory ($ResultsDirectory)\n";
+ print "-a Full output in testframework console\n";
+ print "-v Provide verbose output 1=limited 2=maximum\n";
+ print "-s Define a script to be executed (ommitting causes all scripts to be run)\n";
+ print "-cc Only run release builds for Code Cover\n";
+ print "-rep Repeat the test run a number of times\n";
+ print "-q Start testframework without the 20 second delay\n";
+
+ exit 0;
+ }
+
+
+
+use Getopt::Long;
+my %optctl = ();
+keys(%optctl)=10;
+unless (GetOptions (\%optctl, "b=s","d","c","v=i", "cc", "s=s","rep=i","a","q"))
+ {exit 1;}
+
+
+
+if($optctl{"b"})
+ {
+ $BuildToUse=$optctl{"b"};
+ if((lc($BuildToUse) ne "wins") && (lc($BuildToUse) ne "winscw"))
+ {
+ print STDERR "only wins and winscw builds are supported\n";
+ exit 1;
+ }
+
+ $EpocCDrive = "$ENV{EPOCROOT}epoc32\\$BuildToUse\\c";
+ $ResultsDirectory = "$EpocCDrive\\Logs\\TestResults";
+ }
+#repeat test run a number of times
+if($optctl{"rep"})
+ {
+ $TimesToRun = $optctl{"rep"};
+ if(($TimesToRun < 1))
+ {
+ print STDERR "must specify a positive number of repeates\n";
+ exit 1;
+ }
+ }
+
+
+#debug on
+if($optctl{"v"})
+ {$Debug=$optctl{"v"};}
+
+if($Debug ==2)
+ {
+ print "Command line options:-\n";
+ while ((my $key, my $val) = each %optctl)
+ {print "$key => $val\n";}
+ }
+
+
+#Code Cover run
+if($optctl{"cc"})
+ {$CodeCover=1;}
+
+
+if($Debug ==2)
+ {
+ print "Command line options:-\n";
+ while ((my $key, my $val) = each %optctl)
+ {print "$key => $val\n";}
+ }
+
+
+
+if($optctl{"c"})
+ {
+ print "Deleting Existing Results FIles\n";
+
+ my @ExistingResultsFiles;
+ my $ExistingResultsFile;
+ find( sub { push @ExistingResultsFiles, $File::Find::name if /\.htm/ }, ($ResultsDirectory) );
+
+
+ foreach $ExistingResultsFile (@ExistingResultsFiles)
+ {
+ $ExistingResultsFile =~ s/\//\\/g;
+ $Cmd="del $ExistingResultsFile";
+ if($Debug==2)
+ {print "executing $Cmd\n";}
+ system($Cmd);
+ }
+
+ }
+
+if($optctl{"a"})
+ {
+ print "Full output in testframework console\n";
+ $TestFrameworkOpts .= " -a";
+ }
+
+if($optctl{"s"})
+ {
+ $ScriptToRun = $optctl{"s"};
+
+ print "Looking for script file $ScriptToRun\n";
+ }
+
+# Only add -q flag to textframework request
+if($optctl{"q"})
+ {
+ $TestFrameworkNoDelay .= " -q";
+ }
+
+my $UrelTestFramework = "$ENV{EPOCROOT}epoc32\\release\\$BuildToUse\\urel\\testframework.exe" . $TestFrameworkOpts . $TestFrameworkNoDelay;
+my $UdebTestFramework = "$ENV{EPOCROOT}epoc32\\release\\$BuildToUse\\udeb\\testframework.exe -t" . $TestFrameworkOpts . $TestFrameworkNoDelay;
+my $RecogUrelTestFramework = "$ENV{EPOCROOT}epoc32\\release\\$BuildToUse\\urel\\testframeworkrecognizer.exe" . $TestFrameworkOpts . $TestFrameworkNoDelay;
+my $RecogUdebTestFramework = "$ENV{EPOCROOT}epoc32\\release\\$BuildToUse\\udeb\\testframeworkrecognizer.exe" . $TestFrameworkOpts . $TestFrameworkNoDelay;
+my $NoneUrelTestFramework = "$ENV{EPOCROOT}epoc32\\release\\$BuildToUse\\urel\\testframeworkNone.exe" . $TestFrameworkOpts . $TestFrameworkNoDelay;
+my $NoneUdebTestFramework = "$ENV{EPOCROOT}epoc32\\release\\$BuildToUse\\udeb\\testframeworkNone.exe" . $TestFrameworkOpts . $TestFrameworkNoDelay;
+my $MMDDCapUrelTestFramework = "$ENV{EPOCROOT}epoc32\\release\\$BuildToUse\\urel\\testframeworkMMDDCap.exe" . $TestFrameworkOpts . $TestFrameworkNoDelay;
+my $UECapUrelTestFramework = "$ENV{EPOCROOT}epoc32\\release\\$BuildToUse\\urel\\testframeworkUECap.exe" . $TestFrameworkOpts . $TestFrameworkNoDelay;
+my $UrelEpocEmulator = "$ENV{EPOCROOT}epoc32\\release\\$BuildToUse\\urel\\epoc.exe" . $TestFrameworkOpts;
+my $UdebEpocEmulator = "$ENV{EPOCROOT}epoc32\\release\\$BuildToUse\\udeb\\epoc.exe" . $TestFrameworkOpts;
+my $eka2IdentifyFile = "$ENV{EPOCROOT}epoc32\\release\\winscw\\udeb\\winsgui.dll"; # if file present, is EKA2 build
+my $UrelTestExecute = "$ENV{EPOCROOT}epoc32\\release\\$BuildToUse\\urel\\testexecute.exe" . $TestFrameworkOpts;
+my $UdebTestExecute = "$ENV{EPOCROOT}epoc32\\release\\$BuildToUse\\udeb\\testexecute.exe" . $TestFrameworkOpts;
+
+my $RecogniserCfgFile = "$EpocCDrive\\mm\\AutorunTests.cfg";
+my $copy_ini_secdisp = "perl secdisp_ini_append.pl append";
+my $delete_ini_secdisp = "perl secdisp_ini_append.pl restore";
+if($Debug>=1)
+ {
+ print "\nUsing $RecogniserCfgFile to configure the Epoc recogniser\n";
+ }
+
+print "\nScanning $EpocCDrive for script files\n";
+my @ScriptFilesFound;
+my $ScriptFile;
+my $ScriptToRunTmp = $ScriptToRun;
+
+#Firstly, try to find an exact script name
+print "ScriptToRunTmp = $ScriptToRunTmp\n";
+
+if(!($ScriptToRun =~ /\.script/i))
+ {$ScriptToRunTmp = $ScriptToRun .'\.script';}
+
+#find all the required script files
+find( sub { push @ScriptFilesFound, $File::Find::name if /^$ScriptToRunTmp$/i }, ($EpocCDrive) );
+
+#if no scripts were found, look for scripts that wildcard match
+if(@ScriptFilesFound < 1)
+ {
+ if(!($ScriptToRun =~ /\.script/i))
+ {$ScriptToRunTmp = '[\S]*' . $ScriptToRun .'[\S]*\.script';}
+ else
+ {$ScriptToRunTmp = $ScriptToRun;}
+
+ find( sub { push @ScriptFilesFound, $File::Find::name if /$ScriptToRunTmp/i }, ($EpocCDrive) );
+ }
+
+if($Debug>=1)
+ {
+ my $len = @ScriptFilesFound;
+ print "\nScanned $len script files in $EpocCDrive\n";
+ foreach $ScriptFile (@ScriptFilesFound)
+ {print "$ScriptFile\n";}
+ }
+
+
+#look for any scripts that are called from other scripts; no need to call these directly
+my @IndirectScripts;
+my $IndirectScript;
+foreach $ScriptFile (@ScriptFilesFound)
+ {
+ unless (open(SCRIPTFILE,"$ScriptFile"))
+ {
+ print STDERR "Can't open $ScriptFile: $!\n";
+ exit 1;
+ }
+
+ my $ScriptFileLine;
+ my @ResultFileContents = <SCRIPTFILE>;
+
+ foreach $ScriptFileLine (@ResultFileContents)
+ {
+ if($ScriptFileLine =~ /^RUN_SCRIPT[\s]+[\S]+[\s]*$/)
+ {
+ if($Debug==2)
+ {print "File: $ScriptFile Line: $ScriptFileLine\n";}
+
+ $IndirectScript = $ScriptFileLine;
+ $_ = $IndirectScript;
+
+ m/^RUN_SCRIPT[\s]+([\S]+)[\s]*$/;
+ $IndirectScript=($1);
+
+ if($Debug==2)
+ {print "Secondary Script = $IndirectScript\n";}
+
+ push @IndirectScripts, $IndirectScript;
+ }
+ }
+ }
+
+
+#produce a list of the script files that need running
+my @ScriptsToRun;
+ScriptFile_LBL: foreach $ScriptFile (@ScriptFilesFound)
+ {
+
+ foreach $IndirectScript (@IndirectScripts)
+ {
+ if($ScriptFile =~ /$IndirectScript/)
+ {
+ if($Debug==2)
+ {print "Not running $ScriptFile directly\n";}
+ next ScriptFile_LBL;}
+ }
+
+ push @ScriptsToRun, $ScriptFile;
+ }
+
+
+if($Debug>=1)
+ {
+ foreach $ScriptFile (@ScriptsToRun)
+ {print "Running $ScriptFile\n";}
+ }
+
+
+unless (open(TESTRUNLOG,">TestRunLog.txt"))
+ {
+ print STDERR "Can't open orphanedtests.txt: $!\n";
+ exit 1;
+ }
+
+unless (open(MASTERSCRIPT,">master.script"))
+ {
+ print STDERR "Can't open master.script: $!\n";
+ exit 1;
+ }
+unless (open(MASTERALLOCSCRIPT,">master_alloc.script"))
+ {
+ print STDERR "Can't open master_alloc.script: $!\n";
+ exit 1;
+ }
+
+#create a master script file, this could be usefull for running on hardware.
+foreach $ScriptFile (@ScriptsToRun)
+ {
+ $ScriptFile =~ s/\//\\/g;
+ $ScriptFile =~ s/^[\s]*[a-z]://i;
+
+ my $regex = quotemeta $EpocCDrive;
+ $ScriptFile =~ s/$regex//gi;
+
+ #alloc tests must be run under debug
+ if($ScriptFile =~ /_alloc(_wm)?.script/i)
+ {
+ print MASTERALLOCSCRIPT "RUN_SCRIPT $ScriptFile\n";}
+ else
+ {print MASTERSCRIPT "RUN_SCRIPT $ScriptFile\n";}
+
+ }
+close MASTERSCRIPT;
+close MASTERALLOCSCRIPT;
+
+
+#remove any alloc tests from list. Alloc tests must be run on debug builds, Code Cover tests
+#are only done against release builds.
+if($CodeCover==1)
+ {
+ my @ScriptsToRunTmp=();
+ foreach $ScriptFile (@ScriptsToRun)
+ {
+ if(!($ScriptFile =~ /_alloc(_wm)?.script/i))
+ {
+ push @ScriptsToRunTmp, $ScriptFile;
+ }
+ }
+ @ScriptsToRun = @ScriptsToRunTmp;
+ }
+
+
+my $TotalScriptFiles = @ScriptsToRun;
+if($TimesToRun > 1)
+ {
+ print "Running $TotalScriptFiles scripts $TimesToRun times\n";
+ }
+else
+ {
+ print "Running $TotalScriptFiles scripts\n";
+ }
+
+
+my $RunCount=0;
+for ($RunCount = 0; $RunCount < $TimesToRun; $RunCount++)
+ {
+ my $ScriptsRun=0;
+ #run each script
+ foreach $ScriptFile (@ScriptsToRun)
+ {
+ $ScriptFile =~ s/\//\\/g;
+ $ScriptFile =~ s/^[\s]*[a-z]://i;
+
+ my $regex = quotemeta $EpocCDrive;
+ $ScriptFile =~ s/$regex//gi;
+
+ # We must decide if the test needs to be run using epoc or the test framework. This is
+ # done by looking for _WM (Window Manager) appended to the script name.
+ # NB. This only applies to Typhoon, Jetstream is unaffected.
+
+ if (!(-f $eka2IdentifyFile) && ($ScriptFile =~ /_wm.script/i)) # This script must be run using epoc and the recogniser
+ {
+ # First create the recogniser config file
+ my $line1 = "// This file is generated by runtests.bat\n";
+ my $line2 = "RUN_SCRIPT\n";
+ my $line3 = "";
+
+ #alloc tests must be run under debug
+ if($ScriptFile =~ /_alloc_wm.script/i)
+ {
+ $Cmd = "$UdebEpocEmulator";
+ $line3 = "C:$ScriptFile -t 15000000\n";
+ }
+ else
+ {
+ $Cmd = "$UrelEpocEmulator";
+ $line3 = "C:$ScriptFile 15000000\n";
+ }
+ open(RECOGNISER_CFG_FILE,">$RecogniserCfgFile") or die "Could not open $RecogniserCfgFile for writing\n";
+ print RECOGNISER_CFG_FILE $line1, $line2, $line3;
+ close(RECOGNISER_CFG_FILE);
+ }
+ else # This script can be run from the test framework
+ {
+ #alloc tests must be run under debug
+ if($ScriptFile =~ /_recog_alloc.script/i)
+ {
+ $Cmd = "$RecogUdebTestFramework $ScriptFile";
+ }
+ elsif($ScriptFile =~ /_nocap_alloc.script/i)
+ {
+ $Cmd = "$NoneUdebTestFramework $ScriptFile";
+ }
+ elsif(($ScriptFile =~ /_alloc.script/i) || ($ScriptFile =~ /_alloc_wm.script/i) || ($ScriptFile =~ /_debug.script/i) || ($optctl{"d"}) )
+ {
+ $Cmd = "$UdebTestFramework $ScriptFile";
+ }
+ elsif($ScriptFile =~ /_recog.script/i)
+ {
+ $Cmd = "$RecogUrelTestFramework $ScriptFile";
+ }
+ elsif($ScriptFile =~ /_nocap.script/i)
+ {
+ $Cmd = "$NoneUrelTestFramework $ScriptFile";
+ }
+ elsif($ScriptFile =~ /_mmddcap.script/i)
+ {
+ $Cmd = "$MMDDCapUrelTestFramework $ScriptFile";
+ }
+ elsif($ScriptFile =~ /_uecap.script/i)
+ {
+ $Cmd = "$UECapUrelTestFramework $ScriptFile";
+ }
+ elsif($ScriptFile =~ /_secdisp.script/i)
+ {
+ #Take a backup of the existing ini files to .OLD and copy our ini files from the current dir to \epoc folders
+ if(!(system($copy_ini_secdisp)==0))
+ {
+ print "Failure to execute - $Cmd: $!";
+ print TESTRUNLOG "Failure to execute - $Cmd: $!\n";
+ }
+ $Cmd = "$UrelTestFramework $ScriptFile";
+ }
+ elsif($ScriptFile =~ /\\te_/i)
+ {
+ $Cmd = "$UdebTestExecute $ScriptFile";
+ }
+ elsif($ScriptFile =~ /_te.script/i)
+ {
+ $Cmd = "$UdebTestExecute $ScriptFile";
+ }
+ else
+ {
+ $Cmd = "$UrelTestFramework $ScriptFile";
+ }
+ }
+
+
+
+ ($sec,my $min,my $hour,my $mday,my $mon,my $year,my $wday,my $yday,my $isdst) = localtime(time);
+ print "Starting script at $hour:$min:$sec\n";
+ print TESTRUNLOG "Starting script at $hour:$min:$sec\n";
+
+ $ScriptsRun++;
+ print "executing $Cmd ($ScriptsRun of $TotalScriptFiles)\n";
+
+ print TESTRUNLOG "executing $Cmd\n";
+
+ if(!(system($Cmd)==0))
+ {
+ print "Failure to execute - $Cmd: $!";
+ print TESTRUNLOG "Failure to execute - $Cmd: $!\n";
+ }
+ if($ScriptFile =~ /_secdisp.script/i)
+ {
+ #Delete .ini files and rename .OLD files to .ini files
+ if(!(system($delete_ini_secdisp)==0))
+ {
+ print "Failure to execute - $Cmd: $!";
+ print TESTRUNLOG "Failure to execute - $Cmd: $!\n";
+ }
+ }
+
+ }#foreach $ScriptFile (@ScriptsToRun)
+
+ if($TimesToRun > 1)
+ {
+ #now copy the results to a new numbered directory
+ $Cmd = "xcopy /E /R /I /Y P:\\epoc32\\wins\\c\\Logs\\TestResults P:\\epoc32\\wins\\c\\Logs\\TestResults$RunCount";
+ print "executing $Cmd";
+
+ if(!(system($Cmd)==0))
+ {
+ print "Failure to execute - $Cmd: $!";
+ print TESTRUNLOG "Failure to execute - $Cmd: $!\n";
+ }
+ }
+ }
+
+
+
+$Cmd="del /F /Q $RecogniserCfgFile";
+if($Debug==2)
+ {print "executing $Cmd\n";}
+system($Cmd);
+
+($sec,my $min,my $hour,my $mday,my $mon,my $year,my $wday,my $yday,my $isdst) = localtime(time);
+print "Test run completed at $hour:$min:$sec\n";
+print TESTRUNLOG "Test run completed at $hour:$min:$sec\n";
+
+
+__END__
+
+:endofperl
+