tsrc/testing/tools/genCfgs.pl
changeset 0 96612d01cf9f
--- /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 <<USAGE_EOF;
+
+Creates new STIF CFG files depending if they have the specified class(es) defined. Add line:
+    # CaseClass: <classname> 
+before the case to define the class.
+
+Usage: genCfgs.pl -c <classname> (-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 = <FILE_HANDLE>;
+	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 = <FILE_HANDLE>;
+    	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 = <FILE_HANDLE>;
+	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