1*c667dd47SPedro Giffuni#!/usr/bin/env perl
2cdf0e10cSrcweir#########################################################################
3cdf0e10cSrcweir
47e90fac2SAndrew Rist #**************************************************************
57e90fac2SAndrew Rist#
67e90fac2SAndrew Rist#  Licensed to the Apache Software Foundation (ASF) under one
77e90fac2SAndrew Rist#  or more contributor license agreements.  See the NOTICE file
87e90fac2SAndrew Rist#  distributed with this work for additional information
97e90fac2SAndrew Rist#  regarding copyright ownership.  The ASF licenses this file
107e90fac2SAndrew Rist#  to you under the Apache License, Version 2.0 (the
117e90fac2SAndrew Rist#  "License"); you may not use this file except in compliance
127e90fac2SAndrew Rist#  with the License.  You may obtain a copy of the License at
137e90fac2SAndrew Rist#
147e90fac2SAndrew Rist#    http://www.apache.org/licenses/LICENSE-2.0
157e90fac2SAndrew Rist#
167e90fac2SAndrew Rist#  Unless required by applicable law or agreed to in writing,
177e90fac2SAndrew Rist#  software distributed under the License is distributed on an
187e90fac2SAndrew Rist#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
197e90fac2SAndrew Rist#  KIND, either express or implied.  See the License for the
207e90fac2SAndrew Rist#  specific language governing permissions and limitations
217e90fac2SAndrew Rist#  under the License.
227e90fac2SAndrew Rist#
237e90fac2SAndrew Rist#**************************************************************
247e90fac2SAndrew Rist
257e90fac2SAndrew Rist
26cdf0e10cSrcweir
27cdf0e10cSrcweir####################################################################
28cdf0e10cSrcweir# File Name: test_driver.pl
29cdf0e10cSrcweir# Version  : 1.0
30cdf0e10cSrcweir# Project  : Xmerge
31cdf0e10cSrcweir# Author   : Brian Cameron
32cdf0e10cSrcweir# Date	   : 5th Sept. 2001
33cdf0e10cSrcweir#
34cdf0e10cSrcweir# This script does the following:
35cdf0e10cSrcweir#
36cdf0e10cSrcweir# Processes the input file, and runs the tests specified in that
37cdf0e10cSrcweir# file.  This will do the following for each test:
38cdf0e10cSrcweir#
39cdf0e10cSrcweir# 1. Convert a file from XML to PDB format
40cdf0e10cSrcweir# 2. Starts up the Palm OS emulator with the appropriate program
41cdf0e10cSrcweir#    running and the converted file loaded the program.
42cdf0e10cSrcweir# 3. Makes automated changes as specified in the inputfile to
43cdf0e10cSrcweir#    this script..
44cdf0e10cSrcweir# 4. Returns to the main applications window.
45cdf0e10cSrcweir#
46cdf0e10cSrcweir# Parameter
47cdf0e10cSrcweir#   Filename to convert and change
48cdf0e10cSrcweir#
49cdf0e10cSrcweir##########################################################################
50cdf0e10cSrcweir
51cdf0e10cSrcweir# Turn on auto-flushing
52cdf0e10cSrcweir#
53cdf0e10cSrcweir$|=1;
54cdf0e10cSrcweir
55cdf0e10cSrcweiruse EmRPC;
56cdf0e10cSrcweir
57cdf0e10cSrcweir# Directory where converterlib is located...
58cdf0e10cSrcweir#
59cdf0e10cSrcweiruse lib "$ENV{qa-dir}/lib";
60cdf0e10cSrcweiruse converterlib;
61cdf0e10cSrcweir
62cdf0e10cSrcweir#-------------------- Start of main script ------------------------------------
63cdf0e10cSrcweir
64cdf0e10cSrcweir# Environmental Settings
65cdf0e10cSrcweir
66cdf0e10cSrcweir$pose_exe = "$ENV{pose-dir}/pose/posedist/pose";
67cdf0e10cSrcweir$pose_prc = "$ENV{thirdpartyapps-dir}";
68cdf0e10cSrcweir$test_list = "";
69cdf0e10cSrcweir$infile = "";
70cdf0e10cSrcweir$merge_opt = 0;
71cdf0e10cSrcweir
72cdf0e10cSrcweir# You may need to change this from the default if your pose emulator
73cdf0e10cSrcweir# starts faster or slower than mine.
74cdf0e10cSrcweir#
75cdf0e10cSrcweirif ($ENV{'POSE_TIMEOUT'})
76cdf0e10cSrcweir{
77cdf0e10cSrcweir  $pose_timeout  = "$ENV{'POSE_TIMEOUT'}";
78cdf0e10cSrcweir}
79cdf0e10cSrcweirelse
80cdf0e10cSrcweir{
81cdf0e10cSrcweir  $pose_timeout = 15;
82cdf0e10cSrcweir}
83cdf0e10cSrcweir
84cdf0e10cSrcweir$cmdline_len = @ARGV;
85cdf0e10cSrcweirif ($cmdline_len <= 0)
86cdf0e10cSrcweir{
87cdf0e10cSrcweir	print_usage();
88cdf0e10cSrcweir	exit (0);
89cdf0e10cSrcweir}
90cdf0e10cSrcweir
91cdf0e10cSrcweir&process_cmdline(@ARGV);
92cdf0e10cSrcweir&print_env();
93cdf0e10cSrcweir&verify_env_options();
94cdf0e10cSrcweir
95cdf0e10cSrcweir# Make the output directories with timestamps included in the
96cdf0e10cSrcweir# directory names.
97cdf0e10cSrcweir#
98cdf0e10cSrcweirmkdir $pdb_orig, 0777 || die "can not create directory <$pdb_new>.";
99cdf0e10cSrcweir`chmod 777 $pdb_orig`;
100cdf0e10cSrcweirmkdir $pdb_new,  0777 || die "can not create directory <$pdb_new>.";
101cdf0e10cSrcweir`chmod 777 $pdb_new`;
102cdf0e10cSrcweirmkdir $xml_new,  0777 || die "can not create directory <$pdb_new>.";
103cdf0e10cSrcweir`chmod 777 $xml_new`;
104cdf0e10cSrcweir
105cdf0e10cSrcweir&verify_prcs_exist("DBExporter.prc");
106cdf0e10cSrcweir
107cdf0e10cSrcweirif ($test_list ne "")
108cdf0e10cSrcweir{
109cdf0e10cSrcweir	open (TESTLIST, $test_list) || die "Couldn't open testcase list file $test_list";
110cdf0e10cSrcweir
111cdf0e10cSrcweir	while (<TESTLIST>)
112cdf0e10cSrcweir	{
113cdf0e10cSrcweir		&process_testcase($_);
114cdf0e10cSrcweir	}
115cdf0e10cSrcweir}
116cdf0e10cSrcweirelsif ($infile ne "")
117cdf0e10cSrcweir{
118cdf0e10cSrcweir	&process_testcase($infile);
119cdf0e10cSrcweir}
120cdf0e10cSrcweirelse
121cdf0e10cSrcweir{
122cdf0e10cSrcweir	die ("You didn't supply any test cases to process");
123cdf0e10cSrcweir}
124cdf0e10cSrcweir
125cdf0e10cSrcweirprint "Finished.\n";
126cdf0e10cSrcweirexit(0);
127cdf0e10cSrcweir
128cdf0e10cSrcweir#-------------------- End of main script ----------------------------------------
129cdf0e10cSrcweir
130cdf0e10cSrcweir#--------------------------------------------------------------------------------
131cdf0e10cSrcweir# Various sub routines
132cdf0e10cSrcweir#--------------------------------------------------------------------------------
133cdf0e10cSrcweir
134cdf0e10cSrcweir# process_testcase
135cdf0e10cSrcweir# infile - test case file name
136cdf0e10cSrcweir#
137cdf0e10cSrcweir# This is the main driver function
138cdf0e10cSrcweir# Opens the infile, reads it in parses it, runs the appropriate conversion
139cdf0e10cSrcweir# starts pose and load the file into the emulator. It launches the
140cdf0e10cSrcweir# appropriate editor and then runs the commands specified in the test case.
141cdf0e10cSrcweir# It then exports the file and saves it locally. Finally it is converted
142cdf0e10cSrcweir# back to the original office format.
143cdf0e10cSrcweir#
144cdf0e10cSrcweirsub process_testcase
145cdf0e10cSrcweir{
146cdf0e10cSrcweir    my $infile = $_[0];
147cdf0e10cSrcweir    my $convert_file = "";
148cdf0e10cSrcweir    my $rc;
149cdf0e10cSrcweir
150cdf0e10cSrcweir	# Process the inputfile
151cdf0e10cSrcweir	#
152cdf0e10cSrcweir	open (INFILE, $infile) || die "Failed to open test case <$infile>";
153cdf0e10cSrcweir
154cdf0e10cSrcweir	$running_testtype = "";
155cdf0e10cSrcweir
156cdf0e10cSrcweir	# Process the input file.
157cdf0e10cSrcweir	#
158cdf0e10cSrcweir	while ($c_inline = <INFILE>)
159cdf0e10cSrcweir	{
160cdf0e10cSrcweir	   chomp $c_inline;
161cdf0e10cSrcweir	   @entry = split('\|', $c_inline);
162cdf0e10cSrcweir
163cdf0e10cSrcweir	   # Process TEST
164cdf0e10cSrcweir	   #
165cdf0e10cSrcweir	   if ($c_inline =~ /^ *#/ || $c_inline =~ /^[ \t]*$/)
166cdf0e10cSrcweir	   {
167cdf0e10cSrcweir	      # skip comments and blank lines.
168cdf0e10cSrcweir	      #
169cdf0e10cSrcweir	      next;
170cdf0e10cSrcweir	   }
171cdf0e10cSrcweir	   elsif ("$entry[0]" eq "TEST")
172cdf0e10cSrcweir	   {
173cdf0e10cSrcweir	      # Close the test if one is running.
174cdf0e10cSrcweir	      #
175cdf0e10cSrcweir	      &close_program($convert_file);
176cdf0e10cSrcweir	      $running_testtype = "";
177cdf0e10cSrcweir
178cdf0e10cSrcweir	      $valid_test = 0;
179cdf0e10cSrcweir
180cdf0e10cSrcweir	      if ($#entry != 3)
181cdf0e10cSrcweir	      {
182cdf0e10cSrcweir	         print "\nERROR, $entry[0] invalid number of arguments\n\n";
183cdf0e10cSrcweir	      }
184cdf0e10cSrcweir	      else
185cdf0e10cSrcweir	      {
186cdf0e10cSrcweir	         # Start the test.
187cdf0e10cSrcweir	         #
188cdf0e10cSrcweir	         print "\nStarting test: $entry[1]\n";
189cdf0e10cSrcweir	         $convert_file = $entry[3];
190cdf0e10cSrcweir
191cdf0e10cSrcweir	         if ("$entry[2]"  =~ /[Qq][Uu][Ii][Cc][Kk][Ww][Oo][Rr][Dd]/)
192cdf0e10cSrcweir	         {
193cdf0e10cSrcweir	            $xml_extension = "sxw";
194cdf0e10cSrcweir	            $convert_to = "doc";
195cdf0e10cSrcweir
196cdf0e10cSrcweir	            # Convert XML file to pdb format.
197cdf0e10cSrcweir	            #
198cdf0e10cSrcweir	            $rc = &convert_to_pdb("$xml_orig", $convert_file, $xml_extension ,
199cdf0e10cSrcweir	               $convert_to,"$pdb_orig");
200cdf0e10cSrcweir	            if ($rc != 0)
201cdf0e10cSrcweir	            {
202cdf0e10cSrcweir	               print "\nERROR, problem converting file $convert_file\n\n";
203cdf0e10cSrcweir	            }
204cdf0e10cSrcweir	            else
205cdf0e10cSrcweir	            {
206cdf0e10cSrcweir	               # Start pose
207cdf0e10cSrcweir	               #
208cdf0e10cSrcweir	               $rc = &start_pose("$pose_exe",
209cdf0e10cSrcweir                     "$pose_prc/Quickword.PRC,$pose_prc/DBExporter.prc,$pdb_orig/$convert_file.pdb",
210cdf0e10cSrcweir	                 "Quickword", $pose_timeout);
211cdf0e10cSrcweir
212cdf0e10cSrcweir	               if ($rc == 0)
213cdf0e10cSrcweir	               {
214cdf0e10cSrcweir	                  &start_quickword();
215cdf0e10cSrcweir	                  $valid_test = 1;
216cdf0e10cSrcweir	                  $running_testtype = "QUICKWORD";
217cdf0e10cSrcweir                      print "\npose launched, begin automated test sequence for QuickWord\n";
218cdf0e10cSrcweir	               }
219cdf0e10cSrcweir                   else
220cdf0e10cSrcweir                   {
221cdf0e10cSrcweir                      &kill_pose();
222cdf0e10cSrcweir	                  $running_testtype = "";
223cdf0e10cSrcweir                   }
224cdf0e10cSrcweir	            }
225cdf0e10cSrcweir	         }
226cdf0e10cSrcweir	         elsif ("$entry[2]"  =~ /[Mm][Ii][Nn][Ii][Cc][Aa][Ll][Cc]/)
227cdf0e10cSrcweir	         {
228cdf0e10cSrcweir	            $xml_extension = "sxc";
229cdf0e10cSrcweir	            $convert_to = "minicalc";
230cdf0e10cSrcweir
231cdf0e10cSrcweir	            # Convert XML file to pdb format.
232cdf0e10cSrcweir	            #
233cdf0e10cSrcweir	            $rc = &convert_to_pdb("$xml_orig", $convert_file,
234cdf0e10cSrcweir                  $xml_extension, $convert_to,"$pdb_orig");
235cdf0e10cSrcweir	            if ($rc != 0)
236cdf0e10cSrcweir	            {
237cdf0e10cSrcweir	               print "\nERROR, problem converting file $convert_file\n\n";
238cdf0e10cSrcweir	            }
239cdf0e10cSrcweir	            else
240cdf0e10cSrcweir	            {
241cdf0e10cSrcweir	               # Get minicalc PDB file names, since an SXC file can
242cdf0e10cSrcweir	               # be converted to more than one.
243cdf0e10cSrcweir	               #
244cdf0e10cSrcweir	               $pdb_files="";
245cdf0e10cSrcweir	               $i = 1;
246cdf0e10cSrcweir	               while (-f "$pdb_orig/$convert_file-Sheet$i.pdb")
247cdf0e10cSrcweir	               {
248cdf0e10cSrcweir	                 if ($i > 1)
249cdf0e10cSrcweir	                 {
250cdf0e10cSrcweir	                   $pdb_files .= ",";
251cdf0e10cSrcweir	                 }
252cdf0e10cSrcweir	                 $pdb_files .= "$pdb_orig/$convert_file-Sheet$i.pdb";
253cdf0e10cSrcweir	                 $i++;
254cdf0e10cSrcweir	               }
255cdf0e10cSrcweir	               $number = $i-1;
256cdf0e10cSrcweir
257cdf0e10cSrcweir	               # Start pose
258cdf0e10cSrcweir	               #
259cdf0e10cSrcweir	               $rc = &start_pose("$pose_exe",
260cdf0e10cSrcweir	                  "$pose_prc/MiniCalc.prc,$pose_prc/DBExporter.prc,$pdb_files",
261cdf0e10cSrcweir	                  "MiniCalc", $pose_timeout);
262cdf0e10cSrcweir
263cdf0e10cSrcweir	               if ($rc == 0)
264cdf0e10cSrcweir	               {
265cdf0e10cSrcweir	                  &start_minicalc();
266cdf0e10cSrcweir	                  $valid_test = 1;
267cdf0e10cSrcweir	                  $running_testtype = "MINICALC";
268cdf0e10cSrcweir                      print "pose launched, begin automated test sequence for MiniCalc\n";
269cdf0e10cSrcweir	               }
270cdf0e10cSrcweir                   else
271cdf0e10cSrcweir                   {
272cdf0e10cSrcweir                      &kill_pose();
273cdf0e10cSrcweir	                  $running_testtype = "";
274cdf0e10cSrcweir                   }
275cdf0e10cSrcweir	            }
276cdf0e10cSrcweir	         }
277cdf0e10cSrcweir	         else
278cdf0e10cSrcweir	         {
279cdf0e10cSrcweir	            print "\nERROR, invalid extension <$entry[2]>\n\n";
280cdf0e10cSrcweir	         }
281cdf0e10cSrcweir	      }
282cdf0e10cSrcweir	   }
283cdf0e10cSrcweir
284cdf0e10cSrcweir	   # Process DB_EXPORT
285cdf0e10cSrcweir	   #
286cdf0e10cSrcweir	   elsif ("$entry[0]" eq "DB_EXPORT")
287cdf0e10cSrcweir	   {
288cdf0e10cSrcweir	      if ($#entry != 1)
289cdf0e10cSrcweir	      {
290cdf0e10cSrcweir         	print "\nERROR, $entry[0] invalid number of arguments\n\n";
291cdf0e10cSrcweir	      }
292cdf0e10cSrcweir	      else
293cdf0e10cSrcweir	      {
294cdf0e10cSrcweir	         &db_export($entry[1]);
295cdf0e10cSrcweir	      }
296cdf0e10cSrcweir	   }
297cdf0e10cSrcweir
298cdf0e10cSrcweir	   # Process TAP_APPLICATIONS
299cdf0e10cSrcweir	   #
300cdf0e10cSrcweir	   elsif ("$entry[0]" eq "TAP_APPLICATIONS")
301cdf0e10cSrcweir	   {
302cdf0e10cSrcweir	      if ($#entry != 0)
303cdf0e10cSrcweir	      {
304cdf0e10cSrcweir         	print "\nERROR, $entry[0] invalid number of arguments\n\n";
305cdf0e10cSrcweir	      }
306cdf0e10cSrcweir	      else
307cdf0e10cSrcweir	      {
308cdf0e10cSrcweir	         &tap_applications(0);
309cdf0e10cSrcweir	      }
310cdf0e10cSrcweir	   }
311cdf0e10cSrcweir
312cdf0e10cSrcweir	   # Process ENTER_STRING_AT_LOCATION
313cdf0e10cSrcweir	   #
314cdf0e10cSrcweir	   elsif ("$entry[0]" eq "ENTER_STRING_AT_LOCATION")
315cdf0e10cSrcweir	   {
316cdf0e10cSrcweir	      if ($#entry != 3)
317cdf0e10cSrcweir	      {
318cdf0e10cSrcweir	         print "\nERROR, $entry[0] invalid number of arguments\n\n";
319cdf0e10cSrcweir	      }
320cdf0e10cSrcweir	      elsif ($valid_test == 0)
321cdf0e10cSrcweir	      {
322cdf0e10cSrcweir	         print "\nERROR, can not process $entry[0] for invalid test\n\n";
323cdf0e10cSrcweir	      }
324cdf0e10cSrcweir	      else
325cdf0e10cSrcweir	      {
326cdf0e10cSrcweir	         &enter_string_at_location($entry[1], $entry[2],
327cdf0e10cSrcweir               $entry[3], $running_testtype);
328cdf0e10cSrcweir	      }
329cdf0e10cSrcweir	   }
330cdf0e10cSrcweir
331cdf0e10cSrcweir	   # Process TAP_PEN
332cdf0e10cSrcweir	   #
333cdf0e10cSrcweir	   elsif ("$entry[0]" eq "TAP_PEN")
334cdf0e10cSrcweir	   {
335cdf0e10cSrcweir	      if ($#entry != 2)
336cdf0e10cSrcweir	      {
337cdf0e10cSrcweir	         print "\nERROR, $entry[0] invalid number of arguments\n\n";
338cdf0e10cSrcweir	      }
339cdf0e10cSrcweir	      elsif ($valid_test == 0)
340cdf0e10cSrcweir	      {
341cdf0e10cSrcweir	         print "\nERROR, can not process $entry[0] for invalid test\n\n";
342cdf0e10cSrcweir	      }
343cdf0e10cSrcweir	      else
344cdf0e10cSrcweir	      {
345cdf0e10cSrcweir	         &pose_tap_pen($entry[1], $entry[2], 0);
346cdf0e10cSrcweir	      }
347cdf0e10cSrcweir	   }
348cdf0e10cSrcweir
349cdf0e10cSrcweir	   # Process TAP_BUTTON
350cdf0e10cSrcweir	   #
351cdf0e10cSrcweir	   elsif ("$entry[0]" eq "TAP_BUTTON")
352cdf0e10cSrcweir	   {
353cdf0e10cSrcweir	      if ($#entry != 1)
354cdf0e10cSrcweir	      {
355cdf0e10cSrcweir	         print "\nERROR, $entry[0] invalid number of arguments\n\n";
356cdf0e10cSrcweir	      }
357cdf0e10cSrcweir	      elsif ($valid_test == 0)
358cdf0e10cSrcweir	      {
359cdf0e10cSrcweir	         print "\nERROR, can not process $entry[0] for invalid test\n\n";
360cdf0e10cSrcweir	      }
361cdf0e10cSrcweir	      else
362cdf0e10cSrcweir	      {
363cdf0e10cSrcweir	         &pose_tap_button($entry[1], 0);
364cdf0e10cSrcweir	      }
365cdf0e10cSrcweir	   }
366cdf0e10cSrcweir
367cdf0e10cSrcweir	   # Process SLEEP
368cdf0e10cSrcweir	   #
369cdf0e10cSrcweir	   elsif ("$entry[0]" eq "SLEEP")
370cdf0e10cSrcweir	   {
371cdf0e10cSrcweir	      if ($#entry != 1)
372cdf0e10cSrcweir	      {
373cdf0e10cSrcweir         	print "\nERROR, $entry[0] invalid number of arguments\n\n";
374cdf0e10cSrcweir	      }
375cdf0e10cSrcweir	      else
376cdf0e10cSrcweir	      {
377cdf0e10cSrcweir	         &pose_sleep($entry[1]);
378cdf0e10cSrcweir	      }
379cdf0e10cSrcweir	   }
380cdf0e10cSrcweir
381cdf0e10cSrcweir	   # Process MINICALC_ENTER_CELL
382cdf0e10cSrcweir	   #
383cdf0e10cSrcweir	   elsif ("$entry[0]" eq "MINICALC_ENTER_CELL")
384cdf0e10cSrcweir	   {
385cdf0e10cSrcweir	      if ($#entry != 3)
386cdf0e10cSrcweir	      {
387cdf0e10cSrcweir	         print "\nERROR, $entry[0] invalid number of arguments\n\n";
388cdf0e10cSrcweir	      }
389cdf0e10cSrcweir	      elsif ($valid_test == 0)
390cdf0e10cSrcweir	      {
391cdf0e10cSrcweir	         print "\nERROR, can not process $entry[0] for invalid test\n\n";
392cdf0e10cSrcweir	      }
393cdf0e10cSrcweir	      else
394cdf0e10cSrcweir	      {
395cdf0e10cSrcweir	         &minicalc_enter_cell($entry[1], $entry[2], $entry[3]);
396cdf0e10cSrcweir	      }
397cdf0e10cSrcweir	   }
398cdf0e10cSrcweir
399cdf0e10cSrcweir	   # Process QUICKWORD_FIND_REPLACE
400cdf0e10cSrcweir	   #
401cdf0e10cSrcweir	   elsif ("$entry[0]" eq "QUICKWORD_FIND_REPLACE")
402cdf0e10cSrcweir	   {
403cdf0e10cSrcweir	      if ($#entry != 2)
404cdf0e10cSrcweir	      {
405cdf0e10cSrcweir	         print "\nERROR, $entry[0] invalid number of arguments\n\n";
406cdf0e10cSrcweir	      }
407cdf0e10cSrcweir	      elsif ($valid_test == 0)
408cdf0e10cSrcweir	      {
409cdf0e10cSrcweir	         print "\nERROR, can not process $entry[0] for invalid test\n\n";
410cdf0e10cSrcweir	      }
411cdf0e10cSrcweir	      else
412cdf0e10cSrcweir	      {
413cdf0e10cSrcweir	         &quickword_find_replace($entry[1], $entry[2]);
414cdf0e10cSrcweir	      }
415cdf0e10cSrcweir	   }
416cdf0e10cSrcweir	   else
417cdf0e10cSrcweir	   {
418cdf0e10cSrcweir	      print "\nERROR, invalid line <$c_inline>\n";
419cdf0e10cSrcweir	   }
420cdf0e10cSrcweir	}
421cdf0e10cSrcweir
422cdf0e10cSrcweir	&close_program($convert_file);
423cdf0e10cSrcweir}
424cdf0e10cSrcweir
425cdf0e10cSrcweir# close_program
426cdf0e10cSrcweir# convert_file - file to export
427cdf0e10cSrcweir#
428cdf0e10cSrcweir# closes the program running in pose and kills pose
429cdf0e10cSrcweir#
430cdf0e10cSrcweirsub close_program
431cdf0e10cSrcweir{
432cdf0e10cSrcweir    my $convert_file = $_[0];
433cdf0e10cSrcweir
434cdf0e10cSrcweir	if ($running_testtype eq "QUICKWORD")
435cdf0e10cSrcweir    {
436cdf0e10cSrcweir        print "QuickWord test completed.\n";
437cdf0e10cSrcweir		&close_program_quickword($convert_file);
438cdf0e10cSrcweir    }
439cdf0e10cSrcweir	elsif ($running_testtype eq "MINICALC")
440cdf0e10cSrcweir    {
441cdf0e10cSrcweir        print "MiniCalc test completed.\n";
442cdf0e10cSrcweir		&close_program_minicalc($convert_file, $number);
443cdf0e10cSrcweir    }
444cdf0e10cSrcweir}
445cdf0e10cSrcweir
446cdf0e10cSrcweir# close_program_quickword
447cdf0e10cSrcweir# convert_file - file to export
448cdf0e10cSrcweir#
449cdf0e10cSrcweir# Closes quickword and kills pose
450cdf0e10cSrcweir#
451cdf0e10cSrcweirsub close_program_quickword
452cdf0e10cSrcweir{
453cdf0e10cSrcweir      my $convert_file = $_[0];
454cdf0e10cSrcweir      my $error_file = "./error.txt";
455cdf0e10cSrcweir      my $rc;
456cdf0e10cSrcweir
457cdf0e10cSrcweir      &close_quickword();
458cdf0e10cSrcweir
459cdf0e10cSrcweir      &db_export($convert_file);
460cdf0e10cSrcweir      print "Moving /tmp/$convert_file.pdb to $pdb_new\n";
461cdf0e10cSrcweir      `mv /tmp/$convert_file.pdb $pdb_new`;
462cdf0e10cSrcweir      `chmod 666 $pdb_new/$convert_file.pdb`;
463cdf0e10cSrcweir
464cdf0e10cSrcweir      &close_connection(1);
465cdf0e10cSrcweir      &kill_pose();
466cdf0e10cSrcweir      print "\nFinishing test...\n";
467cdf0e10cSrcweir
468cdf0e10cSrcweir      # The path of where to put the error file should be specified
469cdf0e10cSrcweir      # in the properties file.  Not sure if it is really necessary
470cdf0e10cSrcweir      # to put this out to a separate file.  STDOUT should be fine.
471cdf0e10cSrcweir      #
472cdf0e10cSrcweir      $rc = &convert_to_xml($xml_new, $xml_orig,
473cdf0e10cSrcweir        "$pdb_new/$convert_file.pdb", "doc" ,
474cdf0e10cSrcweir          "sxw", $convert_file, $merge_opt);
475cdf0e10cSrcweir      if ($rc != 0)
476cdf0e10cSrcweir      {
477cdf0e10cSrcweir        print "\nERROR, problem converting file $pdb_new/$convert_file.pdb\n\n";
478cdf0e10cSrcweir      }
479cdf0e10cSrcweir}
480cdf0e10cSrcweir
481cdf0e10cSrcweir# close_program_minicalc
482cdf0e10cSrcweir# convert_file - file to export
483cdf0e10cSrcweir#
484cdf0e10cSrcweir# Closes minicalc and kills pose
485cdf0e10cSrcweir#
486cdf0e10cSrcweirsub close_program_minicalc
487cdf0e10cSrcweir{
488cdf0e10cSrcweir	  my $convert_file = $_[0];
489cdf0e10cSrcweir	  my $num_files   = $_[1];
490cdf0e10cSrcweir	  my $list="";
491cdf0e10cSrcweir	  my $rc;
492cdf0e10cSrcweir
493cdf0e10cSrcweir	  &close_minicalc();
494cdf0e10cSrcweir
495cdf0e10cSrcweir	  for ($a=1; $a <= $num_files; $a++)
496cdf0e10cSrcweir	  {
497cdf0e10cSrcweir	    &db_export("$convert_file-Sheet$a");
498cdf0e10cSrcweir	    print "Moving /tmp/$convert_file-Sheet$a.pdb to $pdb_new/\n";
499cdf0e10cSrcweir	    `mv /tmp/$convert_file-Sheet$a.pdb $pdb_new/`;
500cdf0e10cSrcweir	    `chmod 666 $pdb_new/$convert_file-Sheet$a.pdb`;
501cdf0e10cSrcweir	  }
502cdf0e10cSrcweir
503cdf0e10cSrcweir	  &close_connection(1);
504cdf0e10cSrcweir	  &kill_pose();
505cdf0e10cSrcweir	  print "\nFinishing test...\n";
506cdf0e10cSrcweir
507cdf0e10cSrcweir	  for ($a=1; $a <= $num_files; $a++)
508cdf0e10cSrcweir	  {
509cdf0e10cSrcweir	    $list .="$pdb_new/$convert_file-Sheet$a.pdb "
510cdf0e10cSrcweir	  }
511cdf0e10cSrcweir
512cdf0e10cSrcweir	  $rc = &convert_to_xml($xml_new, $xml_orig, "$list",
513cdf0e10cSrcweir		  "minicalc", "sxc", $convert_file, $merge_opt);
514cdf0e10cSrcweir	  if ($rc != 0)
515cdf0e10cSrcweir	  {
516cdf0e10cSrcweir	    print "\nERROR, problem converting file(s) $list\n\n";
517cdf0e10cSrcweir	  }
518cdf0e10cSrcweir
519cdf0e10cSrcweir      &pose_sleep(5);
520cdf0e10cSrcweir}
521cdf0e10cSrcweir
522cdf0e10cSrcweir# print_usage
523cdf0e10cSrcweir#
524cdf0e10cSrcweir# prints the usage for this program.
525cdf0e10cSrcweir#
526cdf0e10cSrcweirsub print_usage
527cdf0e10cSrcweir{
528cdf0e10cSrcweir	print "Usage : test_driver.pl\n";
529cdf0e10cSrcweir	print "\t-test=<file> \t\t: individual test case file to run\n";
530cdf0e10cSrcweir	print "\t-list=<file> \t\t: list of test case files\n";
531cdf0e10cSrcweir	print "\t-env=<file> \t\t: Properites like file defining env\n";
532cdf0e10cSrcweir	print "\t-pose-exe=<fullpath> \t: path to pose executable\n";
533cdf0e10cSrcweir	print "\t-pose-prc=<path> \t: path to directory holding prc files\n";
534cdf0e10cSrcweir	print "\t-pdb-orig=<path> \t: directory to hold original pdb files\n";
535cdf0e10cSrcweir	print "\t-pdb-new=<path> \t: directory to hold new pdb files\n";
536cdf0e10cSrcweir	print "\t-xml-orig=<path> \t: directory to hold original office documents\n";
537cdf0e10cSrcweir	print "\t-xml-new=<path> \t: directory to hold new office documents\n";
538cdf0e10cSrcweir	print "\t-merge          \t: Invokes the merge option when converting\n";
539cdf0e10cSrcweir	print "\t                \t  from PDB back to XML.\n";
540cdf0e10cSrcweir}
541cdf0e10cSrcweir
542cdf0e10cSrcweir# print_env
543cdf0e10cSrcweir#
544cdf0e10cSrcweir# Prints the current environment.
545cdf0e10cSrcweir#
546cdf0e10cSrcweirsub print_env
547cdf0e10cSrcweir{
548cdf0e10cSrcweir	print "\nUsing the following environment:\n";
549cdf0e10cSrcweir	print "\tPOSE_EXE  = $pose_exe\n";
550cdf0e10cSrcweir	print "\tPOSE_PRC  = $pose_prc\n";
551cdf0e10cSrcweir	print "\tPDB_ORIG  = $pdb_orig\n";
552cdf0e10cSrcweir	print "\tPDB_NEW   = $pdb_new\n";
553cdf0e10cSrcweir	print "\tXML_ORIG  = $xml_orig\n";
554cdf0e10cSrcweir	print "\tXML_NEW   = $xml_new\n";
555cdf0e10cSrcweir}
556cdf0e10cSrcweir
557cdf0e10cSrcweir# process_cmdline
558cdf0e10cSrcweir#
559cdf0e10cSrcweir# command line options come in as key/value pairs.
560cdf0e10cSrcweir# read them and set the appropriate global variable
561cdf0e10cSrcweir#
562cdf0e10cSrcweir# Sets these globals: pose_exe, pose_prc, xml_orig, xml_new_dir,
563cdf0e10cSrcweir# xml_new, pdb_orig_dir, pdb_orig, pdb_new_dir, pdb_new.
564cdf0e10cSrcweir#
565cdf0e10cSrcweirsub process_cmdline
566cdf0e10cSrcweir{
567cdf0e10cSrcweir    my $lu_str = &get_date_string();
568cdf0e10cSrcweir
569cdf0e10cSrcweir	foreach $i (@_)
570cdf0e10cSrcweir	{
571cdf0e10cSrcweir		my @arg= split('=', $i);
572cdf0e10cSrcweir		@arg[0] =~ tr/A-Z/a-z/;
573cdf0e10cSrcweir
574cdf0e10cSrcweir		if (@arg[0] eq "-pose-exe")
575cdf0e10cSrcweir		{
576cdf0e10cSrcweir			$pose_exe=$arg[1];
577cdf0e10cSrcweir		}
578cdf0e10cSrcweir		elsif (@arg[0] eq "-pose-prc")
579cdf0e10cSrcweir		{
580cdf0e10cSrcweir			$pose_prc=$arg[1];
581cdf0e10cSrcweir		}
582cdf0e10cSrcweir		elsif (@arg[0] eq "-pdb-orig")
583cdf0e10cSrcweir		{
584cdf0e10cSrcweir			$pdb_orig_dir=$arg[1];
585cdf0e10cSrcweir			$pdb_orig=$arg[1];
586cdf0e10cSrcweir            $pdb_orig .= "/";
587cdf0e10cSrcweir            $pdb_orig .= "$lu_str";
588cdf0e10cSrcweir		}
589cdf0e10cSrcweir		elsif (@arg[0] eq "-pdb-new")
590cdf0e10cSrcweir		{
591cdf0e10cSrcweir			$pdb_new_dir=$arg[1];
592cdf0e10cSrcweir			$pdb_new=$arg[1];
593cdf0e10cSrcweir            $pdb_new .= "/";
594cdf0e10cSrcweir            $pdb_new .= "$lu_str";
595cdf0e10cSrcweir		}
596cdf0e10cSrcweir		elsif (@arg[0] eq "-xml-orig")
597cdf0e10cSrcweir		{
598cdf0e10cSrcweir			$xml_orig=$arg[1];
599cdf0e10cSrcweir		}
600cdf0e10cSrcweir		elsif (@arg[0] eq "-xml-new")
601cdf0e10cSrcweir		{
602cdf0e10cSrcweir			$xml_new_dir=$arg[1];
603cdf0e10cSrcweir			$xml_new=$arg[1];
604cdf0e10cSrcweir            $xml_new .= "/";
605cdf0e10cSrcweir            $xml_new .= "$lu_str";
606cdf0e10cSrcweir		}
607cdf0e10cSrcweir		elsif (@arg[0] eq "-env")
608cdf0e10cSrcweir		{
609cdf0e10cSrcweir			&set_env_from_props($arg[1]);
610cdf0e10cSrcweir		}
611cdf0e10cSrcweir		elsif (@arg[0] eq "-list")
612cdf0e10cSrcweir		{
613cdf0e10cSrcweir			$test_list = $arg[1];
614cdf0e10cSrcweir		}
615cdf0e10cSrcweir		elsif (@arg[0] eq "-test")
616cdf0e10cSrcweir		{
617cdf0e10cSrcweir			$infile = $arg[1];
618cdf0e10cSrcweir		}
619cdf0e10cSrcweir		elsif (@arg[0] eq "-merge")
620cdf0e10cSrcweir		{
621cdf0e10cSrcweir		     $merge_opt = 1;
622cdf0e10cSrcweir		}
623cdf0e10cSrcweir		else
624cdf0e10cSrcweir		{
625cdf0e10cSrcweir			print_usage();
626cdf0e10cSrcweir			die "Incorrect command line";
627cdf0e10cSrcweir		}
628cdf0e10cSrcweir	}
629cdf0e10cSrcweir}
630cdf0e10cSrcweir
631cdf0e10cSrcweir# set_env_from_props
632cdf0e10cSrcweir# infile - property file
633cdf0e10cSrcweir#
634cdf0e10cSrcweir# Read the properties file, of the form key=value
635cdf0e10cSrcweir# Valid key values are :
636cdf0e10cSrcweir#	POSE_EXE
637cdf0e10cSrcweir#	POSE_PRC
638cdf0e10cSrcweir#	POSE_PERL
639cdf0e10cSrcweir#	TEST_HOME
640cdf0e10cSrcweir#	PDB_ORIG
641cdf0e10cSrcweir#	PDB_NEW
642cdf0e10cSrcweir#	XML_ORIG
643cdf0e10cSrcweir#	XML_NEW
644cdf0e10cSrcweir# If a value is found the appropriate global variable is set.
645cdf0e10cSrcweir#
646cdf0e10cSrcweir# Sets these globals: pose_exe, pose_prc, xml_orig, xml_new_dir,
647cdf0e10cSrcweir# xml_new, pdb_orig_dir, pdb_orig, pdb_new_dir, pdb_new.
648cdf0e10cSrcweir#
649cdf0e10cSrcweirsub set_env_from_props
650cdf0e10cSrcweir{
651cdf0e10cSrcweir    my $infile = $_[0];
652cdf0e10cSrcweir    my $lu_str = &get_date_string();
653cdf0e10cSrcweir
654cdf0e10cSrcweir	open(PROPSFILE, $infile) || die "Could not open properties file <$infile>";
655cdf0e10cSrcweir
656cdf0e10cSrcweir	while (<PROPSFILE>)
657cdf0e10cSrcweir	{
658cdf0e10cSrcweir		chomp $_;
659cdf0e10cSrcweir		my @arg = split('=', $_);
660cdf0e10cSrcweir		@arg[0] =~ tr/a-z/A-Z/;
661cdf0e10cSrcweir		my $len = @arg;
662cdf0e10cSrcweir		if ($len != 2)
663cdf0e10cSrcweir		{
664cdf0e10cSrcweir			die "Malformed property in $arg[0]";
665cdf0e10cSrcweir		}
666cdf0e10cSrcweir		if (@arg[0] eq "POSE_EXE")
667cdf0e10cSrcweir		{
668cdf0e10cSrcweir			$pose_exe=$arg[1];
669cdf0e10cSrcweir		}
670cdf0e10cSrcweir		elsif (@arg[0] eq "POSE_PRC")
671cdf0e10cSrcweir		{
672cdf0e10cSrcweir			$pose_prc=$arg[1];
673cdf0e10cSrcweir		}
674cdf0e10cSrcweir		elsif (@arg[0] eq "PDB_ORIG")
675cdf0e10cSrcweir		{
676cdf0e10cSrcweir			$pdb_orig_dir=$arg[1];
677cdf0e10cSrcweir			$pdb_orig=$arg[1];
678cdf0e10cSrcweir            $pdb_orig .= "/";
679cdf0e10cSrcweir            $pdb_orig .= "$lu_str";
680cdf0e10cSrcweir		}
681cdf0e10cSrcweir		elsif (@arg[0] eq "PDB_NEW")
682cdf0e10cSrcweir		{
683cdf0e10cSrcweir			$pdb_new_dir=$arg[1];
684cdf0e10cSrcweir			$pdb_new=$arg[1];
685cdf0e10cSrcweir            $pdb_new .= "/";
686cdf0e10cSrcweir            $pdb_new .= "$lu_str";
687cdf0e10cSrcweir		}
688cdf0e10cSrcweir		elsif (@arg[0] eq "XML_ORIG")
689cdf0e10cSrcweir		{
690cdf0e10cSrcweir			$xml_orig=$arg[1];
691cdf0e10cSrcweir		}
692cdf0e10cSrcweir		elsif (@arg[0] eq "XML_NEW")
693cdf0e10cSrcweir		{
694cdf0e10cSrcweir			$xml_new_dir=$arg[1];
695cdf0e10cSrcweir			$xml_new=$arg[1];
696cdf0e10cSrcweir            $xml_new .= "/";
697cdf0e10cSrcweir            $xml_new .= "$lu_str";
698cdf0e10cSrcweir		}
699cdf0e10cSrcweir
700cdf0e10cSrcweir	}
701cdf0e10cSrcweir	close PROPSFILE;
702cdf0e10cSrcweir}
703cdf0e10cSrcweir
704cdf0e10cSrcweir# verify_env_options
705cdf0e10cSrcweir#
706cdf0e10cSrcweir# Verify that input options are correctly set.
707cdf0e10cSrcweir# Assumes pose_exe, pose_prc, xml_orig, xml_new_dir,
708cdf0e10cSrcweir# pdb_orig_dir, and pdb_new_dir are already set.
709cdf0e10cSrcweir#
710cdf0e10cSrcweirsub verify_env_options
711cdf0e10cSrcweir{
712cdf0e10cSrcweir	if (!-e "$pose_exe")
713cdf0e10cSrcweir	{
714cdf0e10cSrcweir		die "The pose executable cannot be found at $pose_exe.";
715cdf0e10cSrcweir	}
716cdf0e10cSrcweir	if (!-x $pose_exe)
717cdf0e10cSrcweir	{
718cdf0e10cSrcweir		die "$pose_exe exists but is not executable.";
719cdf0e10cSrcweir	}
720cdf0e10cSrcweir
721cdf0e10cSrcweir	if (!-e "$pose_prc")
722cdf0e10cSrcweir	{
723cdf0e10cSrcweir		die "The PRC directory specified as $pose_prc does not exist.";
724cdf0e10cSrcweir	}
725cdf0e10cSrcweir	if (!-d "$pose_prc")
726cdf0e10cSrcweir	{
727cdf0e10cSrcweir		die "The PRC location specified as $pose_prc exists, but is not a directory.";
728cdf0e10cSrcweir	}
729cdf0e10cSrcweir
730cdf0e10cSrcweir	if (!-e "$pdb_orig_dir")
731cdf0e10cSrcweir	{
732cdf0e10cSrcweir		die "The original PDB directory specified as $pdb_orig_dir does not exist.";
733cdf0e10cSrcweir	}
734cdf0e10cSrcweir	if (!-d "$pdb_orig_dir")
735cdf0e10cSrcweir	{
736cdf0e10cSrcweir		die "The original PDB directory specified as $pdb_orig_dir exists but is not a directory.";
737cdf0e10cSrcweir	}
738cdf0e10cSrcweir
739cdf0e10cSrcweir	if (!-e "$pdb_new_dir")
740cdf0e10cSrcweir	{
741cdf0e10cSrcweir		die "The new PDB directory specified as $pdb_new_dir does not exist.";
742cdf0e10cSrcweir	}
743cdf0e10cSrcweir	if (!-d "$pdb_new_dir")
744cdf0e10cSrcweir	{
745cdf0e10cSrcweir		die "The new PDB directory specified as $pdb_new_dir exists but is not a directory.";
746cdf0e10cSrcweir	}
747cdf0e10cSrcweir
748cdf0e10cSrcweir	if (!-e "$xml_orig")
749cdf0e10cSrcweir	{
750cdf0e10cSrcweir		die "The original Office document directory specified as $xml_orig does not exist.";
751cdf0e10cSrcweir	}
752cdf0e10cSrcweir	if (!-d "$xml_orig")
753cdf0e10cSrcweir	{
754cdf0e10cSrcweir		die "The original Office document location specified as $xml_orig exists but is not a directory.";
755cdf0e10cSrcweir	}
756cdf0e10cSrcweir
757cdf0e10cSrcweir	if (!-e "$xml_new_dir")
758cdf0e10cSrcweir	{
759cdf0e10cSrcweir		die "The new Office document directory specified as $xml_new_dir does not exist.";
760cdf0e10cSrcweir	}
761cdf0e10cSrcweir	if (!-d "$xml_new_dir")
762cdf0e10cSrcweir	{
763cdf0e10cSrcweir		die "The new Office document location specified as $xml_new_dir exists but is not a directory.";
764cdf0e10cSrcweir	}
765cdf0e10cSrcweir}
766cdf0e10cSrcweir
767cdf0e10cSrcweir# verify_prcs_exist
768cdf0e10cSrcweir# prcfile - the PRC file to check
769cdf0e10cSrcweir#
770cdf0e10cSrcweir# Verifies that the specified PRC file exists.
771cdf0e10cSrcweir#
772cdf0e10cSrcweirsub verify_prcs_exist
773cdf0e10cSrcweir{
774cdf0e10cSrcweir    my $prcfile = $_[0];
775cdf0e10cSrcweir
776cdf0e10cSrcweir	if (!-e "$pose_prc/$prcfile")
777cdf0e10cSrcweir	{
778cdf0e10cSrcweir		die "The pose PRC directory ($pose_prc) is correct, but I can't find $prcfile there.";
779cdf0e10cSrcweir	}
780cdf0e10cSrcweir}
781cdf0e10cSrcweir
782