--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecfw/tef/test/tools/tefcmp.pm Mon Mar 08 15:03:44 2010 +0800
@@ -0,0 +1,451 @@
+#
+# Copyright (c) 2005-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:
+#
+
+require Algorithm::Diff;
+#ppm install Algorithm-Diff
+
+# Globle variables
+# compare result counter
+ {
+ $PASSCounter = 0;
+ $DIFFCounter = 0;
+ $MISSCounter = 0; #only existed in BaseLine directory
+ $NEWADDCounter = 0; #only existed in DABS directory
+ $IGNCounter = 0; # this is some case cann't using this tool to comapre
+ }
+
+ $GlobleisLowCases = 0;
+ $CmpDetail = 0; # this is detailed compare information switch
+ $ShowPassCmp = 0; # only output negtive compare result.
+ $cmpResultF = "dailyregresultfile.txt";
+ my $CurrentDir = ".";
+
+sub compareBase2DABS_ReturnEmailBody
+{
+ my ( $baseLineDir, $DABSResultDir,$currentpath) = @_;
+ $CurrentDir = $currentpath; #save to inner pm current variable
+ compareBase2DABS( $baseLineDir, $DABSResultDir);
+ my $mydir = "$currentpath\\$cmpResultF";
+ print $mydir;
+ my @fileArr = read_file($mydir);
+ my $buf;
+ foreach $item (@fileArr){
+ $buf = $buf . $item . "<br>\n";# for lotus not mail.
+ }
+ return $buf;
+}
+#main
+sub compareBase2DABS
+{
+ my ( $baseLineDir, $DABSResultDir, $argv3, $argv4 ) = @_;
+ $CurrentDir = getcwd;
+ # print $argv1." VS ".$argv2."\n";
+ # my($GlobleisLowCases);
+
+
+
+ if (!open( DailyRegResultOutPut, ">$cmpResultF" ))
+ {
+ print "open $DailyRegResultOutPut failed.";
+ }
+ print DailyRegResultOutPut "Start of Result compare\n";
+
+
+ compare_BaseLineFiles_with_DABSResult( $baseLineDir, $DABSResultDir );
+ checking_TestCase_no_BaseLine( $baseLineDir, $DABSResultDir );
+
+ print DailyRegResultOutPut "End of Result compare\n";
+ SummaryCounter2File();
+ close(DailyRegResultOutPut);
+}
+#main
+# gerarate the baseline dir of tef code
+# this is utility function for DABS
+sub makeBaseLineDir
+{
+ my ( $device, $build ) = @_;
+ my ( $device1, $build1 );
+ my ($dirResult);
+ $dirResult = "\\testexecute\\Test\\baseline";
+ if ( $device =~ /arm/i ) {
+ $device1 = "\\h4";
+ }
+ elsif ( $device =~ /winscw/i ) {
+ $device1 = "\\emulator";
+ }
+ else {
+ return "error_path";
+ }
+
+ if ( $build =~ /urel/i ) {
+ $build1 = "\\urel";
+ }
+ elsif ( $build =~ /udeb/i ) {
+ $build1 = "\\udeb";
+ }
+ else {
+ return "error_path";
+ }
+ return $dirResult =
+ $dirResult . $device1 . $build1; #\testexecute\Test\baseline\h4\udeb
+}
+
+sub SummaryCounter2File
+{
+ my($seperator,$eol);
+ $seperator = " = ";
+ $eol = "\n";
+
+ print DailyRegResultOutPut $eol,"*******************" ,$eol,"Compare Summary: ",$eol;
+
+
+ print DailyRegResultOutPut "Pass", $seperator, $PASSCounter,$eol;
+ print DailyRegResultOutPut "Diff", $seperator, $DIFFCounter,$eol;
+ print DailyRegResultOutPut "Existing only on Base Line" , $seperator, $MISSCounter,$eol;
+ print DailyRegResultOutPut "Existing only on DABS", $seperator, $NEWADDCounter,$eol;
+ print DailyRegResultOutPut "Needs to manual check", $seperator, $IGNCounter,$eol;
+}
+
+sub checking_TestCase_no_BaseLine {
+ my ( $baseLineDir, $DABSResultDir ) = @_;
+
+ # read DABS file list
+ my $thisdir;
+ opendir( $thisdir, $DABSResultDir );
+ my @DABSFiles = readdir($thisdir);
+ closedir($thisdir);
+
+ # read base file list
+ opendir( $thisdir, $baseLineDir );
+ my @baseFiles = readdir($thisdir);
+ closedir($thisdir);
+
+ # New test case without base line
+ my ( $DABSfile, $basefile );
+
+ # compare all the file name
+ foreach $DABSfile (@DABSFiles) {
+ if ( $DABSfile =~ /\.htm/ ) {
+ my ( $i, $match );
+ for ( $i = 0, $match = 0 ; $i < @baseFiles ; $i++ ) {
+ $basefile = @baseFiles[$i];
+ if ( $DABSfile eq $basefile ) {
+ $match = 1;
+ last;
+ }
+ }
+
+ # the new test case file name found!
+ if ( $match != 1 ) {
+ print DailyRegResultOutPut
+ "$DABSfile is a new test case without baseline.\n";
+ $NEWADDCounter++;
+ }
+ }
+
+ }
+ return;
+}
+
+sub compare_BaseLineFiles_with_DABSResult {
+ my ( $baseLineDir, $DABSResultDir ) = @_;
+ #chdir($baseLineDir) ;
+ if ( !-e $baseLineDir)
+ {
+ print DailyRegResultOutPut
+ "[Fatal Error]: Can not open $baseLineDir.\n";
+ return;
+ }
+ my $thisdir;
+ opendir( $thisdir, $baseLineDir );
+ my @baseLineFiles = readdir($thisdir);
+ closedir($thisdir);
+ my $i = 0;
+ my @BaseFileSet;
+ my @DABSFileSet;
+
+# generate the file path
+ my $count2 = 0;
+ while ( $i < @baseLineFiles ) {
+ if ( ( !-d @baseLineFiles[$i] )
+ && ( @baseLineFiles[$i] =~ /\.htm/ )
+ ) # (@files[$count] =~/\.htm/) to select all *.htm files
+ {
+ @BaseFileSet[$count2] = $baseLineDir . "\\" . "@baseLineFiles[$i]";
+
+ # print "@srcfiles[$i] \n";
+ @DABSFileSet[$count2] =
+ $DABSResultDir . "\\" . "@baseLineFiles[$i]";
+
+ # print "@dstfiles[$i] \n";
+ $count2++;
+ }
+ $i++;
+ }
+
+ # file context compare
+ $i = 2; #ignore .. and . files
+ while ( $i < @BaseFileSet ) {
+ if ( @DABSFileSet[$i] =~ /dt-tef-concurrent/
+ || @DABSFileSet[$i] =~ /dt-tef-performance-0001/
+ || @DABSFileSet[$i] =~ /dt-tef-command-line/
+ ) {
+ #skip concurrent compare
+ print DailyRegResultOutPut @DABSFileSet[$i],
+ " compare has being ignored. Plese checke your self.\n";
+ $IGNCounter++;
+ }
+ elsif ( !-e @BaseFileSet[$i] ) {
+# this case will not TRUE because only baseline's file name will be compared.
+# see the upper while {....}
+ print DailyRegResultOutPut
+ "@BaseFileSet[$i] does not exist in baseline.\n";# is a new test case without baseline
+ #baseLineFiles[$i] only contain file name.
+ $NEWADDCounter++;
+ }
+ elsif ( !-e @DABSFileSet[$i] ) {
+ print DailyRegResultOutPut
+ "$DABSFileSet[$i] does not exist in DABS.\n";
+ #baseLineFiles[$i] only contain file name.
+ $MISSCounter++;
+ }
+ else {
+ FileCompare( @BaseFileSet[$i], @DABSFileSet[$i] );
+ }
+ $i++;
+ }
+ #chang back to the orginal dir.
+ chdir($CurrentDir); # don't die this fail not change
+}
+
+sub FileCompare {
+ my ( $argv1, $argv2 ) = @_;
+ @array1 = file_array( $argv1, $GlobleisLowCases );
+ @array2 = file_array( $argv2, $GlobleisLowCases );
+
+ # This example produces traditional 'diff' output:
+ my $diff =
+ Algorithm::Diff->new( \@array1, \@array2 ); # this must done in main
+ my ($result);
+ $result = TEF_Compare_Diff($diff);
+ if ( $result == 0 ) #file diff
+ {
+ print DailyRegResultOutPut $argv2, " different with baseline.\n";
+ $DIFFCounter++;
+ }
+ else {
+ if ( $ShowPassCmp == 1 )
+ {
+ print DailyRegResultOutPut $argv2, " PASS\n";
+ }
+ $PASSCounter++;
+ }
+
+ # if ( $argv4 == "-D" ) {
+ # Save_Tailored_to_file( "PR1", @array1 );
+ # Save_Tailored_to_file( "PR2", @array2 );
+ # }
+
+ # print @file1[0].@file2[0];
+ return;
+}
+
+sub file_array {
+ my ( $filename, $isLowCase ) = @_;
+ # if ($isLowCase == 1)
+ # {
+ # print "file_arrayisLowCases = 1";
+ # print "\n";
+ # }
+ # else
+ # {
+ # print "file_arrayisLowCases = 0";
+ # print "\n";
+ # }
+ my @readarray;
+ @readarray = read_file($filename);
+ return @readarray = remove_prefix_from_arrary( @readarray, $isLowCase );
+}
+
+sub read_file {
+ my ($read_file1) = @_;
+ if(!open( IN1, $read_file1 ) )
+ {
+ print DailyRegResultOutPut "[Fatal Error]: Can not open the $read_file1 file !\n" ;
+ }
+ my @content = <IN1>;
+ close(IN1);
+ return @content;
+}
+sub TEF_Compare_Diff {
+
+ # This example produces traditional 'diff' output:
+ # my $diff = Algorithm::Diff->new( \@arr1, \@arr2 );
+
+ my ($diff) = @_;
+ my ($BoolSame);
+ $BoolSame = 1; #file same
+ $diff->Base(1); # Return line numbers, not indices
+ while ( $diff->Next() ) {
+ next if $diff->Same();
+ if ( $CmpDetail == 1 ) {
+ my $sep = '';
+ if ( !$diff->Items(2) ) {
+ printf DailyRegResultOutPut "%d,%dd%d\n",
+ $diff->Get(qw( Min1 Max1 Max2 ));
+ }
+ elsif ( !$diff->Items(1) ) {
+ printf DailyRegResultOutPut "%da%d,%d\n",
+ $diff->Get(qw( Max1 Min2 Max2 ));
+ }
+ else {
+ $sep = "---\n";
+ printf DailyRegResultOutPut "%d,%dc%d,%d\n",
+ $diff->Get(qw( Min1 Max1 Min2 Max2 ));
+ }
+ print DailyRegResultOutPut "< $_" for $diff->Items(1);
+ print DailyRegResultOutPut $sep;
+ print DailyRegResultOutPut "> $_" for $diff->Items(2);
+ }
+ $BoolSame = 0; #file diff
+ }
+ return $BoolSame;
+}
+
+sub Save_Tailored_to_file {
+ my ( $write_file1, @array ) = @_;
+
+ if (!open( OUT, "| cat >$write_file1" ) )
+ {
+ print DailyRegResultOutPut "[Fatal Error]: Can NOT open the $write_file1 file !\n" ;
+ return ;
+ }
+ my $i = 0;
+ my $item;
+ while ( $i < @array ) {
+ $item = @array[ $i++ ];
+ print OUT $item;
+ }
+ close(OUT);
+ return;
+}
+
+sub output_arrary {
+ my (@array) = @_;
+ my $i = 0;
+ while ( $i < @array ) {
+ $item = @array[ $i++ ];
+ print $item ;
+ }
+}
+
+sub remove_prefix_from_arrary {
+ my ( @_array, $LowCase ) = @_;
+ my $i = 0;
+
+ my $item;
+ while ( $i < @_array ) {
+ $item = @_array[$i];
+ $item = remove_time_stamp($item);
+ $item = remove_INFOPRINT($item);
+ $item = remove_remote_panic($item);
+ $item = remove_time_infomation($item);
+ @_array[$i] = remove_script_linenum($item);
+
+ if ( $GlobleisLowCases == 1 ) {
+ @_array[$i] = lc( @_array[$i] );
+ }
+ $i++;
+ }
+ return @_array;
+}
+
+sub remove_script_linenum {
+ my ($srcstring) = @_;
+
+ # search for
+ # ....\dt-tef-testclient-0009.script Line = 22 Command = END_TESTCASE...
+ $_ = $srcstring;
+ if (/[.]*.script [Ll]ine = [\d]+ [Cc]ommand =[.]*/) {
+
+ # print ":)\n";
+ $srcstring =~
+s/[.]*.script [Ll]ine = [\d]+ [Cc]ommand =[.]*/\.script line = command =/;
+ }
+ return $srcstring;
+}
+
+sub remove_remote_panic {
+ my ($srcstring) = @_;
+ $_ = $srcstring;
+ if (/[Rr]emote [Pp]anic \d/) {
+
+ # print ":)\n";
+ return $srcstring = ""; # remove panic string
+ }
+ else {
+
+ # print ":(\n";
+ return $srcstring;
+ }
+}
+
+sub remove_INFOPRINT {
+ my ($srcstring) = @_;
+ $_ = $srcstring;
+
+# if (/(INFO|ERROR|WARN|HIGH|MEDIUM|LOW)[ ]- [0-9]+[ ][a-zA-Z0-9_-]+[.][a-zA-Z]* [0-9]+/) {
+# the file name to strict for "03:39:57:980 INFO - 2607 DIR\DIR\ 221 GetCPPModuleName"
+# "DIR\DIR\" not a legeal file name,
+# so I change the regx
+ if (
+/(INFO|ERROR|WARN|HIGH|MEDIUM|LOW)[ ]- [0-9]+[ ][a-zA-Z0-9_.-\\]* [0-9]+/
+ )
+ {
+
+ # print ":)\n";
+ $srcstring =~ s/[ ]- [0-9]+[ ][a-zA-Z0-9_.-\\]* [0-9]+//;
+ }
+## now else no use.
+ # else
+ # {
+ # print ":(\n";
+ # }
+ return $srcstring;
+}
+sub remove_time_stamp {
+ my ($srcstring) = @_;
+ $_ = substr( $srcstring, 0, 12 );
+
+ if (/[0-9]+:[0-9]+:[0-9]+:[0-9]+/) {
+ return substr( $srcstring, 12 );
+ }
+}
+sub remove_time_infomation {
+ my ($srcstring) = @_;
+ if ($srcstring =~ /[.]*[0-9]+\/[0-9]+\/[0-9]+ [0-9]+\:[0-9]+\:[0-9]+ [apAP][.]*/) {
+ #print ":)\n";
+ $srcstring =~ s/[.]*[0-9]+\/[0-9]+\/[0-9]+ [0-9]+\:[0-9]+\:[0-9]+ [apAP][.]*/$1/;
+ }
+# else
+# {
+# print ":(\n";
+# }
+ return $srcstring;
+}
+
+
+1;
\ No newline at end of file