diff -r 000000000000 -r 3e07fef1e154 testexecfw/tef/test/tools/tefcmp.pm --- /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 . "
\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 = ; + 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