diff options
author | Lars Langhans <lla@openoffice.org> | 2010-05-10 14:22:51 +0200 |
---|---|---|
committer | Lars Langhans <lla@openoffice.org> | 2010-05-10 14:22:51 +0200 |
commit | 3ebaf28103410e2d08d3989ed182719706ae2553 (patch) | |
tree | 44a08ba8978452090de1b73821f34a98e862ddbc /testgraphical | |
parent | 6abd4f597851158f0456345a8fe9fcc3d6ddb5e6 (diff) |
gfxcmp02: #159601# add graphical compare test
Diffstat (limited to 'testgraphical')
-rw-r--r-- | testgraphical/source/graphical_compare.pm | 582 |
1 files changed, 582 insertions, 0 deletions
diff --git a/testgraphical/source/graphical_compare.pm b/testgraphical/source/graphical_compare.pm new file mode 100644 index 000000000000..d0c63181119c --- /dev/null +++ b/testgraphical/source/graphical_compare.pm @@ -0,0 +1,582 @@ +package graphical_compare; + +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 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; + # } + } + } + } + } + } + + 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; |