| package graphical_compare; |
| |
| #************************************************************** |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| #************************************************************** |
| |
| |
| |
| use CallExternals; |
| use stringhelper; |
| use timehelper; |
| use filehelper; |
| use loghelper; |
| use oshelper; |
| use cwstestresulthelper; |
| use solarenvhelper; |
| use ConvwatchHelper; |
| |
| use strict; |
| use Cwd; |
| # use File::Basename; |
| use Getopt::Long; |
| use English; # $OSNAME, ... |
| use File::Path; |
| use Cwd 'chdir'; |
| use Sys::Hostname; |
| use Time::localtime; |
| |
| # my $cwd = getcwd(); |
| |
| BEGIN { |
| use Exporter (); |
| our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); |
| |
| $VERSION = 1.00; |
| # if using RCS/CVS, this may be preferred |
| $VERSION = do { my @r = (q$Revision: 1.2 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker |
| @ISA = qw(Exporter); |
| @EXPORT = qw(&SingleDocumentCompare &setPrefix &setConnectionString); |
| %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], |
| # your exported package globals go here, |
| # as well as any optionally exported functions |
| @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); |
| } |
| |
| |
| our $nTimeOut = 300 * 1000; |
| our $viewable = 1; |
| our $port; |
| our $resolution; |
| our $overwritereference; |
| our $fixreference; |
| our $sConncectionString; |
| |
| sub setConnectionString($) |
| { |
| $sConncectionString=shift; |
| } |
| |
| sub getOOoRunnerClasspath() |
| { |
| my $sSourceRoot; |
| my $sUPDExtensions = ""; |
| if (defined ($ENV{SOL_TMP}) && defined ($ENV{SOLARVERSION})) |
| { |
| $sSourceRoot = $ENV{SOLARVERSION}; |
| } |
| elsif (defined $ENV{SOURCE_ROOT}) |
| { |
| $sSourceRoot = $ENV{SOURCE_ROOT}; |
| $sSourceRoot = appendPath($sSourceRoot, $ENV{WORK_STAMP}); |
| } |
| else |
| { |
| $sSourceRoot = $ENV{SOLARVERSION}; |
| $sUPDExtensions = ".$ENV{UPDMINOR}"; |
| } |
| $sSourceRoot = appendPath($sSourceRoot, $ENV{INPATH}); |
| my $sSourceRootBin = appendPath($sSourceRoot, "bin" . $sUPDExtensions); |
| my $sSourceRootLib = appendPath($sSourceRoot, "lib" . $sUPDExtensions); |
| |
| if (! -d $sSourceRoot ) |
| { |
| log_print( "SourceRoot not found, search it in '$sSourceRoot'\n"); |
| return ""; |
| } |
| |
| my $sOOoRunnerPath = $sSourceRootBin; |
| my $sUnoilPath = $sSourceRootBin; |
| my $sRidlPath = $sSourceRootBin; |
| my $sJurtPath = $sSourceRootBin; |
| my $sJuhPath = $sSourceRootBin; |
| my $sJavaUnoPath = $sSourceRootBin; |
| |
| my $sOOoRunnerClasspath = |
| appendPath( $sRidlPath, "ridl.jar") . getJavaPathSeparator() . |
| appendPath( $sUnoilPath, "unoil.jar") . getJavaPathSeparator() . |
| appendPath( $sJurtPath, "jurt.jar") . getJavaPathSeparator() . |
| appendPath( $sJuhPath, "juh.jar") . getJavaPathSeparator() . |
| appendPath( $sJavaUnoPath, "java_uno.jar") . getJavaPathSeparator() . |
| appendPath( $sOOoRunnerPath, "OOoRunnerLight.jar"); |
| if (isWindowsEnvironment()) |
| { |
| $sOOoRunnerClasspath .= getJavaPathSeparator() . $sSourceRootBin; |
| } |
| else |
| { |
| $sOOoRunnerClasspath .= getJavaPathSeparator() . $sSourceRootLib; |
| } |
| return $sOOoRunnerClasspath; |
| } |
| |
| # ------------------------------------------------------------------------------ |
| sub getTempPath() |
| { |
| my $sTempPath; |
| if (isWindowsEnvironment()) |
| { |
| $sTempPath = "C:/temp"; |
| } |
| elsif (isUnixEnvironment()) |
| { |
| $sTempPath = "/tmp"; |
| } |
| else |
| { |
| die "getTempPath() Failed, due to unsupported environment.\n"; |
| } |
| return $sTempPath; |
| } |
| # ------------------------------------------------------------------------------ |
| |
| sub getProjectOutput() |
| { |
| my $sOutput = appendPath(getProjectRoot(), $ENV{INPATH}); |
| $sOutput = appendPath($sOutput, "misc"); |
| return $sOutput; |
| } |
| |
| # ------------------------------------------------------------------------------ |
| sub getProjectOutputReference() |
| { |
| my $sOutput = appendPath(getProjectRoot(), $ENV{INPATH}); |
| $sOutput = appendPath($sOutput, "reference"); |
| return $sOutput; |
| } |
| |
| |
| sub searchForReference($) |
| { |
| my $sFile = shift; |
| if ( -e $sFile ) |
| { |
| return 0; |
| } |
| if ( -e $sFile . ".ps") |
| { |
| return 0; |
| } |
| if ( -e $sFile . ".pdf") |
| { |
| return 0; |
| } |
| return 1; |
| } |
| # ------------------------------------------------------------------------------ |
| |
| # my $sOfficeName = $officeprefixname . $officename; |
| sub SingleDocumentCompare($$$$$$) |
| { |
| # get all about the document to compare |
| my $sDocumentPoolPath = shift; |
| my $sDocumentPool = shift; |
| my $sDocumentName = shift; |
| my $sDebug = ""; |
| |
| # get all about the destination office |
| my $sCreatorType = shift; |
| if (! $sCreatorType) |
| { |
| # log_print( "parameter -creatortype not given. Use 'OOo'\n"); |
| $sCreatorType = "ps"; |
| } |
| my $prepareonly = shift; |
| my $show = shift; |
| |
| # my $nSimpleCompareTime = getTime(); |
| |
| my $nConvwatchFailed = 0; |
| set_logfile( appendPath(getProjectOutput(), $sDocumentName . ".txt" )); |
| |
| print("$sDocumentName"); |
| log_print("\n"); |
| log_print("Graphical compare on document: '$sDocumentName'\n"); |
| # ------------------------------------------------------------------------------ |
| # create postscript or pdf from first installed office |
| # ------------------------------------------------------------------------------ |
| |
| my $sOOoRunnerClasspath = quoteIfNeed(getOOoRunnerClasspath()); |
| if ($OSNAME eq "cygwin") |
| { |
| if (!startswith($sOOoRunnerClasspath, "\"")) |
| { |
| $sOOoRunnerClasspath = quote($sOOoRunnerClasspath); |
| } |
| } |
| if (length($sOOoRunnerClasspath) == 0) |
| { |
| $nConvwatchFailed == 1; |
| } |
| # ------------------------------------------------------------------------------ |
| # create postscript or pdf from second installed office |
| # ------------------------------------------------------------------------------ |
| |
| my $sPathesIni = appendPath(getProjectOutput(), "pathes.ini"); |
| my $gspath = getFromPathes($sPathesIni, "gs.path"); |
| my $gsexe = getFromPathes($sPathesIni, "gs.exe"); |
| my $impath = getFromPathes($sPathesIni, "imagemagick.path"); |
| my $javaexe = getFromPathes($sPathesIni, "java.exe"); |
| setJavaExecutable($javaexe); |
| |
| log_print("----- CREATE POSTSCRIPT OR PDF WITH RUNNING OFFICE -----\n"); |
| # my $nPrepareSecondPostscriptTime = getTime(); |
| if ($nConvwatchFailed == 0) |
| { |
| my $sInputPath = $sDocumentPoolPath; |
| $sInputPath = appendPath($sInputPath, $sDocumentPool); |
| $sInputPath = appendPath($sInputPath, $sDocumentName); |
| |
| if (! -f $sInputPath ) |
| { |
| $nConvwatchFailed = 1; |
| log_print("ERROR: File '$sInputPath' doesn't exists.\n"); |
| } |
| else |
| { |
| my $sOutputPath = getProjectOutput(); |
| my $sPropertyFile = appendPath(getProjectOutput() , $sDocumentName . ".build.props"); |
| |
| local *PROPERTYFILE; |
| if (open(PROPERTYFILE, ">$sPropertyFile")) |
| { |
| print PROPERTYFILE "# This file is automatically created by graphical_compare.pl\n"; |
| print PROPERTYFILE "DOC_COMPARATOR_PRINT_MAX_PAGE=9999\n"; |
| print PROPERTYFILE "DOC_COMPARATOR_GFX_OUTPUT_DPI_RESOLUTION=180\n"; |
| print PROPERTYFILE "DOC_COMPARATOR_REFERENCE_CREATOR_TYPE=$sCreatorType\n"; |
| print PROPERTYFILE "TEMPPATH=" . getTempPath() . "\n"; |
| if ($sConncectionString) |
| { |
| print PROPERTYFILE "ConnectionString=$sConncectionString\n"; |
| } |
| else |
| { |
| print PROPERTYFILE "ConnectionString=pipe,name=" . getUsername() . "\n"; |
| } |
| print PROPERTYFILE "OFFICE_VIEWABLE=true\n"; |
| print PROPERTYFILE "CREATE_DEFAULT_REFERENCE=true\n"; |
| print PROPERTYFILE "DOC_COMPARATOR_INPUT_PATH=$sInputPath\n"; |
| print PROPERTYFILE "DOC_COMPARATOR_OUTPUT_PATH=$sOutputPath\n"; |
| if (isWindowsEnvironment()) |
| { |
| print PROPERTYFILE "DOC_COMPARATOR_PRINTER_NAME=CrossOffice Generic Printer\n"; |
| } |
| print PROPERTYFILE "NoOffice=true\n"; |
| |
| close(PROPERTYFILE); |
| } |
| else |
| { |
| print "Can't open '$sPropertyFile' for write.\n"; |
| } |
| if ( -e "$sPropertyFile") |
| { |
| # start OOoRunner |
| # sleep 10; |
| # $sOOoRunnerClasspathFromDestinationName = quoteIfNeed(getOOoRunnerClasspath()); |
| my $sParams; |
| if ( $ENV{PERL} ) |
| { |
| $sParams = "-Dperl.exe=" . convertCygwinPath($ENV{PERL}); |
| } |
| |
| $sParams .= " -cp " . $sOOoRunnerClasspath . |
| " org.openoffice.Runner" . |
| " -TimeOut $nTimeOut" . |
| " -tb java_complex" . |
| " -ini $sPropertyFile" . |
| " -o graphical.PostscriptCreator"; |
| # $sParams .= " -cs pipe,name=$USER"; |
| |
| # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; |
| my $err = calljava(getJavaExecutable(), $sParams, $sDebug); |
| $sDebug = ""; |
| log_print( "\n\n"); |
| if ($err != 0) |
| { |
| my $sFailure = "Failed after try to create Postscript/pdf document for " . $sDocumentName; |
| log_print("ERROR: $sFailure\n"); |
| $nConvwatchFailed = 1; |
| } |
| } |
| else |
| { |
| my $sFailure = "There is no propertyfile: $sPropertyFile"; |
| log_print( "ERROR: $sFailure\n"); |
| $nConvwatchFailed=1; |
| } |
| } |
| |
| # set prepareonly and it is possible to only create ps or pdf files |
| if ($prepareonly) |
| { |
| print(" [only create "); |
| if ($sCreatorType eq "ps" || $sCreatorType eq "pdf") |
| { |
| print(" $sCreatorType"); |
| } |
| else |
| { |
| print(" (${sCreatorType}?)"); |
| } |
| if ($nConvwatchFailed == 0) |
| { |
| print(" ok"); |
| } |
| else |
| { |
| print(" failed") |
| } |
| print("]\n"); |
| return $nConvwatchFailed; |
| } |
| |
| |
| # ------------------------------------------------------------------------------ |
| # create jpeg from postscript or pdf from second installed office |
| # ------------------------------------------------------------------------------ |
| |
| if ($nConvwatchFailed == 0) |
| { |
| log_print("----- CREATE JPEG FROM POSTSCRIPT OR PDF FROM RUNNING OFFICE -----\n"); |
| # start OOoRunner |
| my $sInputPath = getProjectOutput(); |
| $sInputPath = appendPath($sInputPath, $sDocumentName); |
| |
| my $sOutputPath = getProjectOutput(); |
| |
| my $sParams = "-cp " . $sOOoRunnerClasspath . |
| " org.openoffice.Runner" . |
| " -TimeOut $nTimeOut" . |
| " -tb java_complex" . |
| " -DOC_COMPARATOR_INPUT_PATH " . quoteIfNeed($sInputPath) . |
| " -DOC_COMPARATOR_OUTPUT_PATH " . quoteIfNeed($sOutputPath) . |
| " -DOC_COMPARATOR_REFERENCE_CREATOR_TYPE $sCreatorType" . |
| " -NoOffice" . |
| " -NoSmallPictures" . |
| " -o graphical.JPEGCreator"; |
| if ($gspath) |
| { |
| $sParams .= " -gs.path " . quoteIfNeed($gspath); |
| } |
| if ($gsexe) |
| { |
| $sParams .= " -gs.exe $gsexe"; |
| } |
| |
| # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; |
| my $err = calljava(getJavaExecutable(), $sParams, $sDebug); |
| $sDebug = ""; |
| # log_print( "\n\n"); |
| if ($err != 0) |
| { |
| my $sFailure = "Failed after try to create JPEG from Postscript/pdf document for " . $sDocumentName; |
| log_print("ERROR: $sFailure\n"); |
| $nConvwatchFailed = 1; |
| } |
| } |
| } |
| |
| # ------------------------------------------------------------------------------ |
| # create jpeg from postscript or pdf from references |
| # ------------------------------------------------------------------------------ |
| |
| if ($nConvwatchFailed == 0) |
| { |
| log_print("----- CREATE JPEG FROM POSTSCRIPT OR PDF FROM REFERENCE -----\n"); |
| |
| # start OOoRunner |
| my $sInputPath = appendPath(getProjectRoot(), "references"); |
| $sInputPath = appendPath($sInputPath, getEnvironment()); |
| $sInputPath = appendPath($sInputPath, $sDocumentPool); |
| $sInputPath = appendPath($sInputPath, $sDocumentName); |
| |
| my $err = searchForReference($sInputPath); |
| if ($err != 0) |
| { |
| log_print("ERROR: Can't find Postscript or PDF reference for '$sInputPath'\n"); |
| $nConvwatchFailed = 1; |
| } |
| else |
| { |
| my $sOutputPath = getProjectOutputReference(); |
| rmkdir $sOutputPath; |
| |
| my $sIndexFile = appendPath($sOutputPath, "index.ini"); |
| # we need the index.ini for better run through |
| local *INDEXINI; |
| if ( ! -e $sIndexFile) |
| { |
| if (open(INDEXINI, ">$sIndexFile")) |
| { |
| # print INDEXINI "[$sDocumentName]\n"; |
| close(INDEXINI); |
| } |
| } |
| my $sParams = "-cp " . $sOOoRunnerClasspath . |
| " org.openoffice.Runner" . |
| " -TimeOut $nTimeOut" . |
| " -tb java_complex" . |
| " -DOC_COMPARATOR_INPUT_PATH " . quoteIfNeed($sInputPath) . |
| " -DOC_COMPARATOR_OUTPUT_PATH " . quoteIfNeed($sOutputPath) . |
| " -DOC_COMPARATOR_REFERENCE_CREATOR_TYPE $sCreatorType" . |
| " -NoOffice" . |
| " -NoSmallPictures" . |
| " -o graphical.JPEGCreator"; |
| if ($gspath) |
| { |
| $sParams .= " -gs.path " . quoteIfNeed($gspath); |
| } |
| if ($gsexe) |
| { |
| $sParams .= " -gs.exe $gsexe"; |
| } |
| |
| # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; |
| my $err = calljava(getJavaExecutable(), $sParams, $sDebug); |
| $sDebug = ""; |
| # log_print( "\n\n"); |
| if ($err != 0) |
| { |
| my $sFailure = "Failed after try to create JPEG from Postscript/pdf document for references."; |
| log_print("ERROR: $sFailure\n"); |
| $nConvwatchFailed = 1; |
| } |
| } |
| } |
| # ------------------------------------------------------------------------------ |
| # compare JPEGs |
| # ------------------------------------------------------------------------------ |
| |
| if ($nConvwatchFailed == 0) |
| { |
| log_print("----- COMPARE JPEGS -----\n"); |
| my $sInputPath = appendPath(getProjectOutputReference(), $sDocumentName); |
| |
| my $sOutputPath = getProjectOutput(); |
| |
| my $sParams = "-Xmx512m" . |
| " -cp " . $sOOoRunnerClasspath . |
| " org.openoffice.Runner" . |
| " -TimeOut $nTimeOut" . |
| " -tb java_complex" . |
| " -DOC_COMPARATOR_INPUT_PATH " . quoteIfNeed($sInputPath) . |
| " -DOC_COMPARATOR_OUTPUT_PATH " . quoteIfNeed($sOutputPath) . |
| " -NoOffice" . |
| " -NoSmallPictures" . |
| " -o graphical.JPEGComparator"; |
| if ($impath) |
| { |
| $sParams .= " -imagemagick.path " . quoteIfNeed($impath); |
| } |
| |
| # start OOoRunner |
| # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; |
| my $err = calljava(getJavaExecutable(), $sParams, $sDebug); |
| $sDebug = ""; |
| log_print( "\n\n"); |
| if ($err != 0) |
| { |
| my $sFailure = "Failed after compare JPEGs $sDocumentName\n"; |
| log_print("ERROR: $sFailure\n"); |
| $nConvwatchFailed = 1; |
| |
| if ($show) |
| { |
| # try to execute new java tool to show graphical compare |
| my $sJavaProgram = appendPath(getProjectRoot(), $ENV{INPATH}); |
| $sJavaProgram = appendPath($sJavaProgram, "class"); |
| $sJavaProgram = appendPath($sJavaProgram, "ConvwatchGUIProject.jar"); |
| if ( -e "$sJavaProgram") |
| { |
| my $sInputPath = appendPath(getProjectOutput(), $sDocumentName . ".ps.ini"); |
| if (! -e $sInputPath) |
| { |
| $sInputPath = appendPath(getProjectOutput(), $sDocumentName . ".pdf.ini"); |
| if (! -e $sInputPath) |
| { |
| $sInputPath = 0; |
| } |
| } |
| if ($sInputPath) |
| { |
| my $sParams = "-Xms128m -Xmx512m -jar $sJavaProgram $sInputPath"; |
| # $sParams .= " -cs pipe,name=$USER"; |
| # my $sJavaExe = "C:/Program Files/Java/jdk1.6.0_16/bin/java.exe"; # getJavaExecutable() |
| my $sJavaExe = getJavaExecutable(); |
| # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; |
| my $err = calljava($sJavaExe, $sParams, $sDebug); |
| # $sDebug = ""; |
| # log_print( "\n\n"); |
| # if ($err != 0) |
| # { |
| # my $sFailure = "Failed after try to create Postscript/pdf document for " . $sDocumentName; |
| # log_print("ERROR: $sFailure\n"); |
| # $nConvwatchFailed = 1; |
| # } |
| } |
| } |
| else |
| { |
| print "WARNING: The show program '$sJavaProgram' doesn't exists.\n"; |
| } |
| } |
| } |
| } |
| |
| log_print( "\n\n"); |
| close_logfile(); |
| |
| if ($nConvwatchFailed == 0) |
| { |
| print(" [ok]\n"); |
| } |
| else |
| { |
| print(" [FAILED]\n"); |
| print("\nPrint output of test: $sDocumentName\n"); |
| my $sLogFile = appendPath(getProjectOutput(), $sDocumentName . ".txt"); |
| showFile($sLogFile); |
| } |
| # printTime(endTime($nSimpleCompareTime)); |
| |
| return $nConvwatchFailed; |
| } |
| |
| # ------------------------------------------------------------------------------ |
| # cat $file |
| sub showFile($) |
| { |
| my $logfile = shift; |
| local *LOGFILE; |
| if (open(LOGFILE, "$logfile")) |
| { |
| my $line; |
| while ($line = <LOGFILE>) |
| { |
| chomp($line); |
| print $line ."\n"; |
| } |
| close(LOGFILE); |
| } |
| } |
| |
| |
| 1; |