summaryrefslogtreecommitdiff
path: root/testgraphical/source
diff options
context:
space:
mode:
authorLars Langhans <lla@openoffice.org>2010-05-10 14:22:51 +0200
committerLars Langhans <lla@openoffice.org>2010-05-10 14:22:51 +0200
commit3ebaf28103410e2d08d3989ed182719706ae2553 (patch)
tree44a08ba8978452090de1b73821f34a98e862ddbc /testgraphical/source
parent6abd4f597851158f0456345a8fe9fcc3d6ddb5e6 (diff)
gfxcmp02: #159601# add graphical compare test
Diffstat (limited to 'testgraphical/source')
-rw-r--r--testgraphical/source/graphical_compare.pm582
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;