testexecfw/tef/test/tools/tefcmp.pm
changeset 0 3e07fef1e154
--- /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