diff -r 000000000000 -r 5752a19fdefe imagingtestenv/imagingtesttools/Scripts/RunTests.bat --- /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 = ; + + 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 +