diff -r 000000000000 -r 96612d01cf9f tsrc/testing/tools/genCfgs.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/testing/tools/genCfgs.pl Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,534 @@ +# +# Copyright (c) 2007 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: +# + + +#------------------------------------------------------------------------------------ +# Includes +#------------------------------------------------------------------------------------ +#use strict; +use warnings; +use Cwd; # for cwd +use FindBin; # for FindBin:Bin +use File::Path; # for mkpath +use Date::Calc; + +{ # 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" ); +} + +#------------------------------------------------------------------------------------ +# GLOBAL CODE +#------------------------------------------------------------------------------------ + +my @paramClasses; + +while(scalar(@ARGV) <= 0) +{ + Help(); + exit; +} + +while(scalar(@ARGV) >= 1) +{ + my $argument = shift(@ARGV); + + if($argument eq "-c") + { + my $class = shift(@ARGV); + push @paramClasses, $class; + } + elsif($argument eq "-h") + { + Help(); + exit; + } + else { + Help(); + exit; + } +} + +sub Help +{ + print < +before the case to define the class. + +Usage: genCfgs.pl -c (-c classname2) + +USAGE_EOF + + exit; +} + +ClassifyCfgs( \@paramClasses ); + +exit; + +sub ClassifyCfgs +{ + my ( $refClasses ) = @_; + + system("rmdir /s /q conf_temp"); + mkdir("conf_temp"); + + my @cfgFiles; + FindFiles( ".", ".cfg", 0, \@cfgFiles ); + + my @testframeworkInis; + FindFiles( ".", "testframework.ini", 0, \@testframeworkInis ); + if( scalar( @testframeworkInis ) < 1 ) + { + die("\nThere must be at least one testframework.ini somewhere in the subpath!\n"); + } + print("Using testframework.ini from: " . $testframeworkInis[0] . "\n"); + + my @pkgFiles; + + foreach my $file ( @cfgFiles ) + { + my $dst = ".\\conf_temp\\" . GetPathFileName( $file ); + if( ClassifyCfg( $refClasses, $file, $dst ) ) + { + push @pkgFiles, GetPathFileName( $file ); + AddCfgToIni( $testframeworkInis[0], ".\\conf_temp\\Testframework.ini", GetPathFileName( $file ) ); + print("Added: " . GetPathFileName($file) . "\n"); + } + } + + if( scalar(@pkgFiles) > 0 ) + { + MakeSISX( \@pkgFiles ); + } + else + { + system("rmdir /s /q conf_temp"); # remove empty dir + } +} + +sub ClassifyCfg +{ + my ( $refClasses, $sourceFile, $destFile ) = @_; + + # Read the cfg. + open(FILE_HANDLE, $sourceFile) or die ("ERROR! Could not open file $sourceFile\n"); + my @cfgLines = ; + close(FILE_HANDLE); + + my @cfgCases; + ReadCfgCasesWithClass( \@cfgLines, \@cfgCases, $refClasses ); + + if( !@cfgCases or scalar(@cfgCases) < 1 ) + { + return 0; + } + + # Write the helium CFG. + open(FILE_HANDLE, ">$destFile") or die("Could not write into file $destFile\n"); + + # Write everything from CFG before the first case. + foreach my $line ( @cfgLines ) + { + if( $line =~ m/\[Test\]/ ) + { + last; + } + print FILE_HANDLE ( $line ); + } + + foreach my $refCase ( @cfgCases ) + { + my $refCaseLines = @$refCase[1]; + print FILE_HANDLE ( @$refCaseLines ); + print FILE_HANDLE ( "\n" ); + } + + close( FILE_HANDLE ); + + return 1; +} + +sub ReadCfgCasesWithClass +{ + my ( $refLines, $refCases, $refClasses ) = @_; + + my $inCase = 0; + my @caseLines; + my $caseTitle; + my @caseClasses = ""; + + my $cfgHasClassCases = 0; + + for( my $i = 0; $i < scalar(@$refLines); $i++ ) + { + my $line = @$refLines[$i]; + + # Case has class. + if( $line =~ m/#[ ]+CaseClass:/ ) + { + my $pos = index( $line, "CaseClass: " ); + if( $pos == -1 ) + { + $i++; + die("Invalid CaseClass at line $i. Must be specified exactly as '# CaseClass: clas1(,class2,class3..)'.\n"); + } + my $classes = substr( $line, $pos + 11 ); + RemoveWhiteSpaces(\$classes); + @caseClasses = split(/,/, $classes); + } + + # Case starts here. + if( $line =~ m/\[Test\]/ ) + { + undef( @caseLines ); + $caseTitle = ""; + $inCase = 1; + } + + # Found title for the case. + if( $line =~ m/^title / ) + { + $caseTitle = $line; + } + + # Save case lines. + if( $inCase ) + { + push @caseLines, ( $line ); + } + + # End of test case. + if( $line =~ m/\[Endtest\]/ ) + { + $inCase = 0; + + my $saveCase = 0; + + foreach my $class ( @$refClasses ) + { + foreach my $caseClass (@caseClasses) + { + if( $caseClass eq $class ) + { + $saveCase = 1; + $cfgHasClassCases = 1; + #print("Class case: $caseTitle\n"); + } + } + } + + if( $caseTitle =~ m/Setup/i or $caseTitle =~ m/not a test/i or $caseTitle =~ m/set up/i + or $caseTitle =~m/not test/i or $caseTitle =~m/cleanup/i ) + { + $saveCase = 1; + #print("Setup case: $caseTitle\n"); + } + + if( $saveCase ) + { + # Yes, save it. + my @case; + $case[0] = $caseTitle; + $case[1] = [ @caseLines ]; + push @$refCases, [ @case ]; + + } + undef( @caseClasses ); + } + } + + if( !$cfgHasClassCases ) + { + undef( @$refCases ); + } +} + +sub FindFiles +{ + my ($godir, $fileSearch, $searchType, $refIncfiles) = @_; + + my $startDir = cwd; + + chdir($godir); + + opendir(DIR, "."); + my @filelist = sort(readdir(DIR)); + closedir(DIR); + + foreach my $file(@filelist) + { + if($file eq "." or $file eq "..") {next}; + + if (-d $file) + { + FindFiles( $file, $fileSearch, $searchType, $refIncfiles); + } else + { + if( ($file =~ m/$fileSearch/i and $searchType == 0 ) or ($file =~ m/$fileSearch$/i and $searchType == 1 ) ) + { + $file = cwd . "/" . $file; + push @$refIncfiles, $file; + } + } + } + + chdir ($startDir); +} + +sub MakeSISX +{ + my ($refFiles) = @_; + + # Continue creating pkg. + + my $startDir = cwd; + + chdir( "conf_temp" ); + + my $pkgname = "cfgs.pkg"; + my $sisname = "cfgs.sis"; + my $sisnamex = "cfgs.sisx"; + + print("Writing pkg $pkgname\n"); + if( !open(FILE_HANDLE, ">$pkgname") ) + { + print("ERROR: could not write to file: $pkgname\n"); + return 0; + } + + my $lineFeed = "\n"; + + print FILE_HANDLE ( + "&EN" . $lineFeed . + "#{\"CFGS\"},(0x10102ae9),0,1,0,TYPE=PU" . $lineFeed . + "%{\"Nokia EN\"}" . $lineFeed . + ":\"Nokia\"" . $lineFeed + ); + + foreach my $file (@$refFiles) + { + print FILE_HANDLE ("\"..\\conf_temp\\$file\" - \"c:\\TestFramework\\$file\"" . $lineFeed ); + } + + my $file = "Testframework.ini"; + print FILE_HANDLE (";\"..\\conf_temp\\$file\" - \"c:\\TestFramework\\$file\"" . $lineFeed ); + + close(FILE_HANDLE); + + # Check that we have signing keys. + + my $derFile = "RDTest_02.der"; + my $keyFile = "RDTest_02.key"; + + if (-e $derFile and -e $keyFile) + { + # Keys are in current dir + } + elsif(-e "sis\\$derFile" and -e "sis\\$keyFile") + { + # Keys are in internal/sis dir + $derFile = "sis\\$derFile"; + $keyFile = "sis\\$keyFile"; + } + elsif(-e "group\\$derFile" and -e "group\\$keyFile") + { + # Keys are in internal/group dir + $derFile = "group\\$derFile"; + $keyFile = "group\\$keyFile"; + } + else + { + # Find em. + my @derFiles; + my @keyFiles; + FindFiles( ".", "$derFile", 0, \@derFiles ); + FindFiles( ".", "$keyFile", 0, \@keyFiles ); + $derFile = $derFiles[0] if( scalar(@derFiles) > 0 ); + $keyFile = $keyFiles[0] if( scalar(@keyFiles) > 0 ); + } + + if (!-e $derFile or !-e $keyFile) + { + print("\nNeed signing keys: $derFile and $keyFile in current or subdirs.\n"); + return; + } + + my $cmd = "makesis $pkgname $sisname"; + print("$cmd\n"); + system $cmd; + + $cmd = "signsis $sisname $sisnamex $derFile $keyFile"; + print("$cmd\n"); + system $cmd; + + #system("del $pkgname"); + system("del $sisname"); + + chdir( $startDir ); +} + + +sub AddCfgToIni +{ + my ($sourceFile, $destIniFile, $cfgFile) = @_; + + # Rerun ini does not exist. Create one. + if( ! (-e $destIniFile) ) + { + if( !open(FILE_HANDLE, $sourceFile) ) + { + print("ERROR! Could not open file '" . $sourceFile . "'\n"); + return 0; + } + my @array = ; + close(FILE_HANDLE); + + if( !open(FILE_HANDLE, ">$destIniFile") ) + { + print("ERROR! Could not open file '" . $destIniFile . "'\n"); + return 0; + } + + my $inNew_Module = 0; + + foreach $line ( @array ) + { + if($line =~ m/\[New_Module\]/) + { + $inNew_Module = 1; + print FILE_HANDLE ($line); + print FILE_HANDLE ("ModuleName= TestScripter\n"); + } + if($line =~ m/\[End_Module\]/) + { + $inNew_Module = 0; + } + + if($inNew_Module) + { + # Copy only setup cfgs if they are found. + if($line =~ m/setvalidservices/i) + { + print FILE_HANDLE ($line); + } + if($line =~ m/testprovisioning/i) + { + print FILE_HANDLE ($line); + } + } + else + { + print FILE_HANDLE ($line); + } + } + + close(FILE_HANDLE); + } + + # Read the existing file. + + if( !open(FILE_HANDLE, $destIniFile) ) + { + print("ERROR! Could not open file '" . $destIniFile . "'\n"); + return 0; + } + my @array = ; + close(FILE_HANDLE); + + # Check if CFG is already there. + + my $inNew_Module = 0; + + foreach $line ( @array ) + { + if($line =~ m/\[New_Module\]/) + { + $inNew_Module = 1; + } + if($line =~ m/\[End_Module\]/) + { + $inNew_Module = 0; + } + + if($inNew_Module) + { + if($line =~ m/$cfgFile/i) + { + return 1; + } + } + } + + # Add the cfg to it. + + if( !open(FILE_HANDLE, ">$destIniFile") ) + { + print("ERROR! Could not open file '" . $destIniFile . "'\n"); + return 0; + } + + $inNew_Module = 0; + + foreach $line ( @array ) + { + if($line =~ m/\[End_Module\]/) + { + $inNew_Module = 0; + print FILE_HANDLE ("TestCaseFile= c:\\TestFramework\\$cfgFile\n"); + } + print FILE_HANDLE ($line); + } + + close(FILE_HANDLE); + + return 1; +} \ No newline at end of file