summaryrefslogtreecommitdiff
path: root/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/test_driver.pl
diff options
context:
space:
mode:
Diffstat (limited to 'xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/test_driver.pl')
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/test_driver.pl787
1 files changed, 787 insertions, 0 deletions
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/test_driver.pl b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/test_driver.pl
new file mode 100755
index 000000000000..a4dc46fb5e8f
--- /dev/null
+++ b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/test_driver.pl
@@ -0,0 +1,787 @@
+#!/usr/bin/perl
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: test_driver.pl,v $
+#
+# $Revision: 1.3 $
+#
+# 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.
+#
+#*************************************************************************
+
+####################################################################
+# File Name: test_driver.pl
+# Version : 1.0
+# Project : Xmerge
+# Author : Brian Cameron
+# Date : 5th Sept. 2001
+#
+# This script does the following:
+#
+# Processes the input file, and runs the tests specified in that
+# file. This will do the following for each test:
+#
+# 1. Convert a file from XML to PDB format
+# 2. Starts up the Palm OS emulator with the appropriate program
+# running and the converted file loaded the program.
+# 3. Makes automated changes as specified in the inputfile to
+# this script..
+# 4. Returns to the main applications window.
+#
+# Parameter
+# Filename to convert and change
+#
+##########################################################################
+
+# Turn on auto-flushing
+#
+$|=1;
+
+use EmRPC;
+
+# Directory where converterlib is located...
+#
+use lib "$ENV{qa-dir}/lib";
+use converterlib;
+
+#-------------------- Start of main script ------------------------------------
+
+# Environmental Settings
+
+$pose_exe = "$ENV{pose-dir}/pose/posedist/pose";
+$pose_prc = "$ENV{thirdpartyapps-dir}";
+$test_list = "";
+$infile = "";
+$merge_opt = 0;
+
+# You may need to change this from the default if your pose emulator
+# starts faster or slower than mine.
+#
+if ($ENV{'POSE_TIMEOUT'})
+{
+ $pose_timeout = "$ENV{'POSE_TIMEOUT'}";
+}
+else
+{
+ $pose_timeout = 15;
+}
+
+$cmdline_len = @ARGV;
+if ($cmdline_len <= 0)
+{
+ print_usage();
+ exit (0);
+}
+
+&process_cmdline(@ARGV);
+&print_env();
+&verify_env_options();
+
+# Make the output directories with timestamps included in the
+# directory names.
+#
+mkdir $pdb_orig, 0777 || die "can not create directory <$pdb_new>.";
+`chmod 777 $pdb_orig`;
+mkdir $pdb_new, 0777 || die "can not create directory <$pdb_new>.";
+`chmod 777 $pdb_new`;
+mkdir $xml_new, 0777 || die "can not create directory <$pdb_new>.";
+`chmod 777 $xml_new`;
+
+&verify_prcs_exist("DBExporter.prc");
+
+if ($test_list ne "")
+{
+ open (TESTLIST, $test_list) || die "Couldn't open testcase list file $test_list";
+
+ while (<TESTLIST>)
+ {
+ &process_testcase($_);
+ }
+}
+elsif ($infile ne "")
+{
+ &process_testcase($infile);
+}
+else
+{
+ die ("You didn't supply any test cases to process");
+}
+
+print "Finished.\n";
+exit(0);
+
+#-------------------- End of main script ----------------------------------------
+
+#--------------------------------------------------------------------------------
+# Various sub routines
+#--------------------------------------------------------------------------------
+
+# process_testcase
+# infile - test case file name
+#
+# This is the main driver function
+# Opens the infile, reads it in parses it, runs the appropriate conversion
+# starts pose and load the file into the emulator. It launches the
+# appropriate editor and then runs the commands specified in the test case.
+# It then exports the file and saves it locally. Finally it is converted
+# back to the original office format.
+#
+sub process_testcase
+{
+ my $infile = $_[0];
+ my $convert_file = "";
+ my $rc;
+
+ # Process the inputfile
+ #
+ open (INFILE, $infile) || die "Failed to open test case <$infile>";
+
+ $running_testtype = "";
+
+ # Process the input file.
+ #
+ while ($c_inline = <INFILE>)
+ {
+ chomp $c_inline;
+ @entry = split('\|', $c_inline);
+
+ # Process TEST
+ #
+ if ($c_inline =~ /^ *#/ || $c_inline =~ /^[ \t]*$/)
+ {
+ # skip comments and blank lines.
+ #
+ next;
+ }
+ elsif ("$entry[0]" eq "TEST")
+ {
+ # Close the test if one is running.
+ #
+ &close_program($convert_file);
+ $running_testtype = "";
+
+ $valid_test = 0;
+
+ if ($#entry != 3)
+ {
+ print "\nERROR, $entry[0] invalid number of arguments\n\n";
+ }
+ else
+ {
+ # Start the test.
+ #
+ print "\nStarting test: $entry[1]\n";
+ $convert_file = $entry[3];
+
+ if ("$entry[2]" =~ /[Qq][Uu][Ii][Cc][Kk][Ww][Oo][Rr][Dd]/)
+ {
+ $xml_extension = "sxw";
+ $convert_to = "doc";
+
+ # Convert XML file to pdb format.
+ #
+ $rc = &convert_to_pdb("$xml_orig", $convert_file, $xml_extension ,
+ $convert_to,"$pdb_orig");
+ if ($rc != 0)
+ {
+ print "\nERROR, problem converting file $convert_file\n\n";
+ }
+ else
+ {
+ # Start pose
+ #
+ $rc = &start_pose("$pose_exe",
+ "$pose_prc/Quickword.PRC,$pose_prc/DBExporter.prc,$pdb_orig/$convert_file.pdb",
+ "Quickword", $pose_timeout);
+
+ if ($rc == 0)
+ {
+ &start_quickword();
+ $valid_test = 1;
+ $running_testtype = "QUICKWORD";
+ print "\npose launched, begin automated test sequence for QuickWord\n";
+ }
+ else
+ {
+ &kill_pose();
+ $running_testtype = "";
+ }
+ }
+ }
+ elsif ("$entry[2]" =~ /[Mm][Ii][Nn][Ii][Cc][Aa][Ll][Cc]/)
+ {
+ $xml_extension = "sxc";
+ $convert_to = "minicalc";
+
+ # Convert XML file to pdb format.
+ #
+ $rc = &convert_to_pdb("$xml_orig", $convert_file,
+ $xml_extension, $convert_to,"$pdb_orig");
+ if ($rc != 0)
+ {
+ print "\nERROR, problem converting file $convert_file\n\n";
+ }
+ else
+ {
+ # Get minicalc PDB file names, since an SXC file can
+ # be converted to more than one.
+ #
+ $pdb_files="";
+ $i = 1;
+ while (-f "$pdb_orig/$convert_file-Sheet$i.pdb")
+ {
+ if ($i > 1)
+ {
+ $pdb_files .= ",";
+ }
+ $pdb_files .= "$pdb_orig/$convert_file-Sheet$i.pdb";
+ $i++;
+ }
+ $number = $i-1;
+
+ # Start pose
+ #
+ $rc = &start_pose("$pose_exe",
+ "$pose_prc/MiniCalc.prc,$pose_prc/DBExporter.prc,$pdb_files",
+ "MiniCalc", $pose_timeout);
+
+ if ($rc == 0)
+ {
+ &start_minicalc();
+ $valid_test = 1;
+ $running_testtype = "MINICALC";
+ print "pose launched, begin automated test sequence for MiniCalc\n";
+ }
+ else
+ {
+ &kill_pose();
+ $running_testtype = "";
+ }
+ }
+ }
+ else
+ {
+ print "\nERROR, invalid extension <$entry[2]>\n\n";
+ }
+ }
+ }
+
+ # Process DB_EXPORT
+ #
+ elsif ("$entry[0]" eq "DB_EXPORT")
+ {
+ if ($#entry != 1)
+ {
+ print "\nERROR, $entry[0] invalid number of arguments\n\n";
+ }
+ else
+ {
+ &db_export($entry[1]);
+ }
+ }
+
+ # Process TAP_APPLICATIONS
+ #
+ elsif ("$entry[0]" eq "TAP_APPLICATIONS")
+ {
+ if ($#entry != 0)
+ {
+ print "\nERROR, $entry[0] invalid number of arguments\n\n";
+ }
+ else
+ {
+ &tap_applications(0);
+ }
+ }
+
+ # Process ENTER_STRING_AT_LOCATION
+ #
+ elsif ("$entry[0]" eq "ENTER_STRING_AT_LOCATION")
+ {
+ if ($#entry != 3)
+ {
+ print "\nERROR, $entry[0] invalid number of arguments\n\n";
+ }
+ elsif ($valid_test == 0)
+ {
+ print "\nERROR, can not process $entry[0] for invalid test\n\n";
+ }
+ else
+ {
+ &enter_string_at_location($entry[1], $entry[2],
+ $entry[3], $running_testtype);
+ }
+ }
+
+ # Process TAP_PEN
+ #
+ elsif ("$entry[0]" eq "TAP_PEN")
+ {
+ if ($#entry != 2)
+ {
+ print "\nERROR, $entry[0] invalid number of arguments\n\n";
+ }
+ elsif ($valid_test == 0)
+ {
+ print "\nERROR, can not process $entry[0] for invalid test\n\n";
+ }
+ else
+ {
+ &pose_tap_pen($entry[1], $entry[2], 0);
+ }
+ }
+
+ # Process TAP_BUTTON
+ #
+ elsif ("$entry[0]" eq "TAP_BUTTON")
+ {
+ if ($#entry != 1)
+ {
+ print "\nERROR, $entry[0] invalid number of arguments\n\n";
+ }
+ elsif ($valid_test == 0)
+ {
+ print "\nERROR, can not process $entry[0] for invalid test\n\n";
+ }
+ else
+ {
+ &pose_tap_button($entry[1], 0);
+ }
+ }
+
+ # Process SLEEP
+ #
+ elsif ("$entry[0]" eq "SLEEP")
+ {
+ if ($#entry != 1)
+ {
+ print "\nERROR, $entry[0] invalid number of arguments\n\n";
+ }
+ else
+ {
+ &pose_sleep($entry[1]);
+ }
+ }
+
+ # Process MINICALC_ENTER_CELL
+ #
+ elsif ("$entry[0]" eq "MINICALC_ENTER_CELL")
+ {
+ if ($#entry != 3)
+ {
+ print "\nERROR, $entry[0] invalid number of arguments\n\n";
+ }
+ elsif ($valid_test == 0)
+ {
+ print "\nERROR, can not process $entry[0] for invalid test\n\n";
+ }
+ else
+ {
+ &minicalc_enter_cell($entry[1], $entry[2], $entry[3]);
+ }
+ }
+
+ # Process QUICKWORD_FIND_REPLACE
+ #
+ elsif ("$entry[0]" eq "QUICKWORD_FIND_REPLACE")
+ {
+ if ($#entry != 2)
+ {
+ print "\nERROR, $entry[0] invalid number of arguments\n\n";
+ }
+ elsif ($valid_test == 0)
+ {
+ print "\nERROR, can not process $entry[0] for invalid test\n\n";
+ }
+ else
+ {
+ &quickword_find_replace($entry[1], $entry[2]);
+ }
+ }
+ else
+ {
+ print "\nERROR, invalid line <$c_inline>\n";
+ }
+ }
+
+ &close_program($convert_file);
+}
+
+# close_program
+# convert_file - file to export
+#
+# closes the program running in pose and kills pose
+#
+sub close_program
+{
+ my $convert_file = $_[0];
+
+ if ($running_testtype eq "QUICKWORD")
+ {
+ print "QuickWord test completed.\n";
+ &close_program_quickword($convert_file);
+ }
+ elsif ($running_testtype eq "MINICALC")
+ {
+ print "MiniCalc test completed.\n";
+ &close_program_minicalc($convert_file, $number);
+ }
+}
+
+# close_program_quickword
+# convert_file - file to export
+#
+# Closes quickword and kills pose
+#
+sub close_program_quickword
+{
+ my $convert_file = $_[0];
+ my $error_file = "./error.txt";
+ my $rc;
+
+ &close_quickword();
+
+ &db_export($convert_file);
+ print "Moving /tmp/$convert_file.pdb to $pdb_new\n";
+ `mv /tmp/$convert_file.pdb $pdb_new`;
+ `chmod 666 $pdb_new/$convert_file.pdb`;
+
+ &close_connection(1);
+ &kill_pose();
+ print "\nFinishing test...\n";
+
+ # The path of where to put the error file should be specified
+ # in the properties file. Not sure if it is really necessary
+ # to put this out to a separate file. STDOUT should be fine.
+ #
+ $rc = &convert_to_xml($xml_new, $xml_orig,
+ "$pdb_new/$convert_file.pdb", "doc" ,
+ "sxw", $convert_file, $merge_opt);
+ if ($rc != 0)
+ {
+ print "\nERROR, problem converting file $pdb_new/$convert_file.pdb\n\n";
+ }
+}
+
+# close_program_minicalc
+# convert_file - file to export
+#
+# Closes minicalc and kills pose
+#
+sub close_program_minicalc
+{
+ my $convert_file = $_[0];
+ my $num_files = $_[1];
+ my $list="";
+ my $rc;
+
+ &close_minicalc();
+
+ for ($a=1; $a <= $num_files; $a++)
+ {
+ &db_export("$convert_file-Sheet$a");
+ print "Moving /tmp/$convert_file-Sheet$a.pdb to $pdb_new/\n";
+ `mv /tmp/$convert_file-Sheet$a.pdb $pdb_new/`;
+ `chmod 666 $pdb_new/$convert_file-Sheet$a.pdb`;
+ }
+
+ &close_connection(1);
+ &kill_pose();
+ print "\nFinishing test...\n";
+
+ for ($a=1; $a <= $num_files; $a++)
+ {
+ $list .="$pdb_new/$convert_file-Sheet$a.pdb "
+ }
+
+ $rc = &convert_to_xml($xml_new, $xml_orig, "$list",
+ "minicalc", "sxc", $convert_file, $merge_opt);
+ if ($rc != 0)
+ {
+ print "\nERROR, problem converting file(s) $list\n\n";
+ }
+
+ &pose_sleep(5);
+}
+
+# print_usage
+#
+# prints the usage for this program.
+#
+sub print_usage
+{
+ print "Usage : test_driver.pl\n";
+ print "\t-test=<file> \t\t: individual test case file to run\n";
+ print "\t-list=<file> \t\t: list of test case files\n";
+ print "\t-env=<file> \t\t: Properites like file defining env\n";
+ print "\t-pose-exe=<fullpath> \t: path to pose executable\n";
+ print "\t-pose-prc=<path> \t: path to directory holding prc files\n";
+ print "\t-pdb-orig=<path> \t: directory to hold original pdb files\n";
+ print "\t-pdb-new=<path> \t: directory to hold new pdb files\n";
+ print "\t-xml-orig=<path> \t: directory to hold original office documents\n";
+ print "\t-xml-new=<path> \t: directory to hold new office documents\n";
+ print "\t-merge \t: Invokes the merge option when converting\n";
+ print "\t \t from PDB back to XML.\n";
+}
+
+# print_env
+#
+# Prints the current environment.
+#
+sub print_env
+{
+ print "\nUsing the following environment:\n";
+ print "\tPOSE_EXE = $pose_exe\n";
+ print "\tPOSE_PRC = $pose_prc\n";
+ print "\tPDB_ORIG = $pdb_orig\n";
+ print "\tPDB_NEW = $pdb_new\n";
+ print "\tXML_ORIG = $xml_orig\n";
+ print "\tXML_NEW = $xml_new\n";
+}
+
+# process_cmdline
+#
+# command line options come in as key/value pairs.
+# read them and set the appropriate global variable
+#
+# Sets these globals: pose_exe, pose_prc, xml_orig, xml_new_dir,
+# xml_new, pdb_orig_dir, pdb_orig, pdb_new_dir, pdb_new.
+#
+sub process_cmdline
+{
+ my $lu_str = &get_date_string();
+
+ foreach $i (@_)
+ {
+ my @arg= split('=', $i);
+ @arg[0] =~ tr/A-Z/a-z/;
+
+ if (@arg[0] eq "-pose-exe")
+ {
+ $pose_exe=$arg[1];
+ }
+ elsif (@arg[0] eq "-pose-prc")
+ {
+ $pose_prc=$arg[1];
+ }
+ elsif (@arg[0] eq "-pdb-orig")
+ {
+ $pdb_orig_dir=$arg[1];
+ $pdb_orig=$arg[1];
+ $pdb_orig .= "/";
+ $pdb_orig .= "$lu_str";
+ }
+ elsif (@arg[0] eq "-pdb-new")
+ {
+ $pdb_new_dir=$arg[1];
+ $pdb_new=$arg[1];
+ $pdb_new .= "/";
+ $pdb_new .= "$lu_str";
+ }
+ elsif (@arg[0] eq "-xml-orig")
+ {
+ $xml_orig=$arg[1];
+ }
+ elsif (@arg[0] eq "-xml-new")
+ {
+ $xml_new_dir=$arg[1];
+ $xml_new=$arg[1];
+ $xml_new .= "/";
+ $xml_new .= "$lu_str";
+ }
+ elsif (@arg[0] eq "-env")
+ {
+ &set_env_from_props($arg[1]);
+ }
+ elsif (@arg[0] eq "-list")
+ {
+ $test_list = $arg[1];
+ }
+ elsif (@arg[0] eq "-test")
+ {
+ $infile = $arg[1];
+ }
+ elsif (@arg[0] eq "-merge")
+ {
+ $merge_opt = 1;
+ }
+ else
+ {
+ print_usage();
+ die "Incorrect command line";
+ }
+ }
+}
+
+# set_env_from_props
+# infile - property file
+#
+# Read the properties file, of the form key=value
+# Valid key values are :
+# POSE_EXE
+# POSE_PRC
+# POSE_PERL
+# TEST_HOME
+# PDB_ORIG
+# PDB_NEW
+# XML_ORIG
+# XML_NEW
+# If a value is found the appropriate global variable is set.
+#
+# Sets these globals: pose_exe, pose_prc, xml_orig, xml_new_dir,
+# xml_new, pdb_orig_dir, pdb_orig, pdb_new_dir, pdb_new.
+#
+sub set_env_from_props
+{
+ my $infile = $_[0];
+ my $lu_str = &get_date_string();
+
+ open(PROPSFILE, $infile) || die "Could not open properties file <$infile>";
+
+ while (<PROPSFILE>)
+ {
+ chomp $_;
+ my @arg = split('=', $_);
+ @arg[0] =~ tr/a-z/A-Z/;
+ my $len = @arg;
+ if ($len != 2)
+ {
+ die "Malformed property in $arg[0]";
+ }
+ if (@arg[0] eq "POSE_EXE")
+ {
+ $pose_exe=$arg[1];
+ }
+ elsif (@arg[0] eq "POSE_PRC")
+ {
+ $pose_prc=$arg[1];
+ }
+ elsif (@arg[0] eq "PDB_ORIG")
+ {
+ $pdb_orig_dir=$arg[1];
+ $pdb_orig=$arg[1];
+ $pdb_orig .= "/";
+ $pdb_orig .= "$lu_str";
+ }
+ elsif (@arg[0] eq "PDB_NEW")
+ {
+ $pdb_new_dir=$arg[1];
+ $pdb_new=$arg[1];
+ $pdb_new .= "/";
+ $pdb_new .= "$lu_str";
+ }
+ elsif (@arg[0] eq "XML_ORIG")
+ {
+ $xml_orig=$arg[1];
+ }
+ elsif (@arg[0] eq "XML_NEW")
+ {
+ $xml_new_dir=$arg[1];
+ $xml_new=$arg[1];
+ $xml_new .= "/";
+ $xml_new .= "$lu_str";
+ }
+
+ }
+ close PROPSFILE;
+}
+
+# verify_env_options
+#
+# Verify that input options are correctly set.
+# Assumes pose_exe, pose_prc, xml_orig, xml_new_dir,
+# pdb_orig_dir, and pdb_new_dir are already set.
+#
+sub verify_env_options
+{
+ if (!-e "$pose_exe")
+ {
+ die "The pose executable cannot be found at $pose_exe.";
+ }
+ if (!-x $pose_exe)
+ {
+ die "$pose_exe exists but is not executable.";
+ }
+
+ if (!-e "$pose_prc")
+ {
+ die "The PRC directory specified as $pose_prc does not exist.";
+ }
+ if (!-d "$pose_prc")
+ {
+ die "The PRC location specified as $pose_prc exists, but is not a directory.";
+ }
+
+ if (!-e "$pdb_orig_dir")
+ {
+ die "The original PDB directory specified as $pdb_orig_dir does not exist.";
+ }
+ if (!-d "$pdb_orig_dir")
+ {
+ die "The original PDB directory specified as $pdb_orig_dir exists but is not a directory.";
+ }
+
+ if (!-e "$pdb_new_dir")
+ {
+ die "The new PDB directory specified as $pdb_new_dir does not exist.";
+ }
+ if (!-d "$pdb_new_dir")
+ {
+ die "The new PDB directory specified as $pdb_new_dir exists but is not a directory.";
+ }
+
+ if (!-e "$xml_orig")
+ {
+ die "The original Office document directory specified as $xml_orig does not exist.";
+ }
+ if (!-d "$xml_orig")
+ {
+ die "The original Office document location specified as $xml_orig exists but is not a directory.";
+ }
+
+ if (!-e "$xml_new_dir")
+ {
+ die "The new Office document directory specified as $xml_new_dir does not exist.";
+ }
+ if (!-d "$xml_new_dir")
+ {
+ die "The new Office document location specified as $xml_new_dir exists but is not a directory.";
+ }
+}
+
+# verify_prcs_exist
+# prcfile - the PRC file to check
+#
+# Verifies that the specified PRC file exists.
+#
+sub verify_prcs_exist
+{
+ my $prcfile = $_[0];
+
+ if (!-e "$pose_prc/$prcfile")
+ {
+ die "The pose PRC directory ($pose_prc) is correct, but I can't find $prcfile there.";
+ }
+}
+