1*b1cdbd2cSJim Jagielski#!/usr/bin/perl 2*b1cdbd2cSJim Jagielski 3*b1cdbd2cSJim Jagielski######################################################################### 4*b1cdbd2cSJim Jagielski 5*b1cdbd2cSJim Jagielski #************************************************************** 6*b1cdbd2cSJim Jagielski# 7*b1cdbd2cSJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 8*b1cdbd2cSJim Jagielski# or more contributor license agreements. See the NOTICE file 9*b1cdbd2cSJim Jagielski# distributed with this work for additional information 10*b1cdbd2cSJim Jagielski# regarding copyright ownership. The ASF licenses this file 11*b1cdbd2cSJim Jagielski# to you under the Apache License, Version 2.0 (the 12*b1cdbd2cSJim Jagielski# "License"); you may not use this file except in compliance 13*b1cdbd2cSJim Jagielski# with the License. You may obtain a copy of the License at 14*b1cdbd2cSJim Jagielski# 15*b1cdbd2cSJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 16*b1cdbd2cSJim Jagielski# 17*b1cdbd2cSJim Jagielski# Unless required by applicable law or agreed to in writing, 18*b1cdbd2cSJim Jagielski# software distributed under the License is distributed on an 19*b1cdbd2cSJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 20*b1cdbd2cSJim Jagielski# KIND, either express or implied. See the License for the 21*b1cdbd2cSJim Jagielski# specific language governing permissions and limitations 22*b1cdbd2cSJim Jagielski# under the License. 23*b1cdbd2cSJim Jagielski# 24*b1cdbd2cSJim Jagielski#************************************************************** 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski$compare_home = "$ENV{QA_COMPARATOR_HOME}"; 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielskiif ($ENV{'CLASSPATH'}) 31*b1cdbd2cSJim Jagielski{ 32*b1cdbd2cSJim Jagielski $classpath_val = "$compare_home:$ENV{'CLASSPATH'}"; 33*b1cdbd2cSJim Jagielski} 34*b1cdbd2cSJim Jagielskielse 35*b1cdbd2cSJim Jagielski{ 36*b1cdbd2cSJim Jagielski $classpath_val = "$compare_home"; 37*b1cdbd2cSJim Jagielski} 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielskiprint "classpath is $classpath_val\n"; 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski$list_file=""; 42*b1cdbd2cSJim Jagielski$orig_dir=""; 43*b1cdbd2cSJim Jagielski$new_dir=""; 44*b1cdbd2cSJim Jagielski$diff_type=""; 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski####### BEGIN MAIN ############## 47*b1cdbd2cSJim Jagielski$cmdline_len = @ARGV; 48*b1cdbd2cSJim Jagielskiif ($cmdline_len <= 0) 49*b1cdbd2cSJim Jagielski{ 50*b1cdbd2cSJim Jagielski print_usage(); 51*b1cdbd2cSJim Jagielski exit (0); 52*b1cdbd2cSJim Jagielski} 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielskiprocess_cmdline(@ARGV); 55*b1cdbd2cSJim Jagielskiprint_env(); 56*b1cdbd2cSJim Jagielskiopen (LOGFILE, ">$logfile") || die "Cannot open log file $logfile"; 57*b1cdbd2cSJim Jagielskiif ($test_list ne "") 58*b1cdbd2cSJim Jagielski{ 59*b1cdbd2cSJim Jagielski open (TESTLIST, $test_list) || die "Couldn't open diff list file $test_list"; 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielski while (<TESTLIST>) 62*b1cdbd2cSJim Jagielski { 63*b1cdbd2cSJim Jagielski chomp $_; 64*b1cdbd2cSJim Jagielski process_diff(get_file_title($_)); 65*b1cdbd2cSJim Jagielski } 66*b1cdbd2cSJim Jagielski} 67*b1cdbd2cSJim Jagielskiclose TESTLIST; 68*b1cdbd2cSJim Jagielskiclose LOGFILE; 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski####### END MAIN ############## 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielskisub process_diff 73*b1cdbd2cSJim Jagielski{ 74*b1cdbd2cSJim Jagielski $_[0] =~ tr/A-Z/a-z/; 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski # chdir to the output directory so the temporary files created by 77*b1cdbd2cSJim Jagielski # the java programs are put in the right place. 78*b1cdbd2cSJim Jagielski # 79*b1cdbd2cSJim Jagielski chdir ($xml_new); 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski if ($diff_type eq "xml") 82*b1cdbd2cSJim Jagielski { 83*b1cdbd2cSJim Jagielski # Ugly hack, probably a way to tell xerces directly that the dtd's 84*b1cdbd2cSJim Jagielski # are in $compare_home/dtd. 85*b1cdbd2cSJim Jagielski # 86*b1cdbd2cSJim Jagielski `cp $compare_home/dtd/* $xml_new`; 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski $cmd = "java -classpath $classpath_val XmlWrapper $xml_orig/$_[0].sxw $xml_new/$_[0].sxw"; 89*b1cdbd2cSJim Jagielski $val = system($cmd)/256; 90*b1cdbd2cSJim Jagielski if ($val == 2) 91*b1cdbd2cSJim Jagielski { 92*b1cdbd2cSJim Jagielski print LOGFILE "$_[0]|TRUE|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n"; 93*b1cdbd2cSJim Jagielski } 94*b1cdbd2cSJim Jagielski elsif($val == 3) 95*b1cdbd2cSJim Jagielski { 96*b1cdbd2cSJim Jagielski print LOGFILE "$_[0]|FALSE|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n"; 97*b1cdbd2cSJim Jagielski } 98*b1cdbd2cSJim Jagielski else 99*b1cdbd2cSJim Jagielski { 100*b1cdbd2cSJim Jagielski print LOGFILE "$_[0]|ERROR|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n"; 101*b1cdbd2cSJim Jagielski } 102*b1cdbd2cSJim Jagielski } 103*b1cdbd2cSJim Jagielski elsif ($diff_type eq "pdb") 104*b1cdbd2cSJim Jagielski { 105*b1cdbd2cSJim Jagielski $cmd = "java -classpath $classpath_val SimplePdbCompare $pdb_orig/$_[0].pdb $pdb_new/$_[0].pdb\n"; 106*b1cdbd2cSJim Jagielski print "Executing: $cmd\n"; 107*b1cdbd2cSJim Jagielski $val = system($cmd)/256; 108*b1cdbd2cSJim Jagielski if ($val == 2) 109*b1cdbd2cSJim Jagielski { 110*b1cdbd2cSJim Jagielski print LOGFILE "$_[0]|TRUE|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n"; 111*b1cdbd2cSJim Jagielski } 112*b1cdbd2cSJim Jagielski elsif($val == 3) 113*b1cdbd2cSJim Jagielski { 114*b1cdbd2cSJim Jagielski print LOGFILE "$_[0]|FALSE|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n"; 115*b1cdbd2cSJim Jagielski } 116*b1cdbd2cSJim Jagielski else 117*b1cdbd2cSJim Jagielski { 118*b1cdbd2cSJim Jagielski print LOGFILE "$_[0]|ERROR|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n"; 119*b1cdbd2cSJim Jagielski } 120*b1cdbd2cSJim Jagielski } 121*b1cdbd2cSJim Jagielski else 122*b1cdbd2cSJim Jagielski { 123*b1cdbd2cSJim Jagielski die "Don't understand test type of $diff_type."; 124*b1cdbd2cSJim Jagielski } 125*b1cdbd2cSJim Jagielski} 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielskisub process_cmdline 128*b1cdbd2cSJim Jagielski{ 129*b1cdbd2cSJim Jagielski foreach $i (@_) 130*b1cdbd2cSJim Jagielski { 131*b1cdbd2cSJim Jagielski @arg= split('=', $i); 132*b1cdbd2cSJim Jagielski @arg[0] =~ tr/A-Z/a-z/; 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski if (@arg[0] eq "-pdb-orig") 135*b1cdbd2cSJim Jagielski { 136*b1cdbd2cSJim Jagielski $pdb_orig=$arg[1]; 137*b1cdbd2cSJim Jagielski } 138*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-pdb-new") 139*b1cdbd2cSJim Jagielski { 140*b1cdbd2cSJim Jagielski $pdb_new=$arg[1]; 141*b1cdbd2cSJim Jagielski } 142*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-xml-orig") 143*b1cdbd2cSJim Jagielski { 144*b1cdbd2cSJim Jagielski $xml_orig=$arg[1]; 145*b1cdbd2cSJim Jagielski } 146*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-xml-new") 147*b1cdbd2cSJim Jagielski { 148*b1cdbd2cSJim Jagielski $xml_new=$arg[1]; 149*b1cdbd2cSJim Jagielski } 150*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-env") 151*b1cdbd2cSJim Jagielski { 152*b1cdbd2cSJim Jagielski set_env_from_props($arg[1]); 153*b1cdbd2cSJim Jagielski } 154*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-list") 155*b1cdbd2cSJim Jagielski { 156*b1cdbd2cSJim Jagielski $test_list = $arg[1]; 157*b1cdbd2cSJim Jagielski } 158*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-one") 159*b1cdbd2cSJim Jagielski { 160*b1cdbd2cSJim Jagielski $infile = $arg[1]; 161*b1cdbd2cSJim Jagielski } 162*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-type") 163*b1cdbd2cSJim Jagielski { 164*b1cdbd2cSJim Jagielski $diff_type = $arg[1]; 165*b1cdbd2cSJim Jagielski chomp $diff_type; 166*b1cdbd2cSJim Jagielski } 167*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-log") 168*b1cdbd2cSJim Jagielski { 169*b1cdbd2cSJim Jagielski $logfile = $arg[1]; 170*b1cdbd2cSJim Jagielski } 171*b1cdbd2cSJim Jagielski else 172*b1cdbd2cSJim Jagielski { 173*b1cdbd2cSJim Jagielski print_usage(); 174*b1cdbd2cSJim Jagielski die "Incorrect command line. Don't understand $i"; 175*b1cdbd2cSJim Jagielski } 176*b1cdbd2cSJim Jagielski } 177*b1cdbd2cSJim Jagielski} 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielskisub set_env_from_props 180*b1cdbd2cSJim Jagielski{ 181*b1cdbd2cSJim Jagielski open(PROPSFILE, $_[0]) || die "Could not open properties file"; 182*b1cdbd2cSJim Jagielski 183*b1cdbd2cSJim Jagielski while (<PROPSFILE>) 184*b1cdbd2cSJim Jagielski { 185*b1cdbd2cSJim Jagielski chomp $_; 186*b1cdbd2cSJim Jagielski @arg = split('=', $_); 187*b1cdbd2cSJim Jagielski @arg[0] =~ tr/a-z/A-Z/; 188*b1cdbd2cSJim Jagielski $len = @arg; 189*b1cdbd2cSJim Jagielski if ($len != 2) 190*b1cdbd2cSJim Jagielski { 191*b1cdbd2cSJim Jagielski die "Malformed property in $ARGV[0]"; 192*b1cdbd2cSJim Jagielski } 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski if (@arg[0] eq "PDB_ORIG") 195*b1cdbd2cSJim Jagielski { 196*b1cdbd2cSJim Jagielski $pdb_orig=$arg[1]; 197*b1cdbd2cSJim Jagielski } 198*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "PDB_NEW") 199*b1cdbd2cSJim Jagielski { 200*b1cdbd2cSJim Jagielski $pdb_new=$arg[1]; 201*b1cdbd2cSJim Jagielski } 202*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "XML_ORIG") 203*b1cdbd2cSJim Jagielski { 204*b1cdbd2cSJim Jagielski $xml_orig=$arg[1]; 205*b1cdbd2cSJim Jagielski } 206*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "XML_NEW") 207*b1cdbd2cSJim Jagielski { 208*b1cdbd2cSJim Jagielski $xml_new=$arg[1]; 209*b1cdbd2cSJim Jagielski } 210*b1cdbd2cSJim Jagielski 211*b1cdbd2cSJim Jagielski } 212*b1cdbd2cSJim Jagielski close PROPSFILE; 213*b1cdbd2cSJim Jagielski} 214*b1cdbd2cSJim Jagielski 215*b1cdbd2cSJim Jagielskisub print_usage 216*b1cdbd2cSJim Jagielski{ 217*b1cdbd2cSJim Jagielski print "Usage : compartor.pl - compare Office or pdb files\n"; 218*b1cdbd2cSJim Jagielski print "\t-one=<file> :\t\t individual test case file to run\n"; 219*b1cdbd2cSJim Jagielski print "\t-list=<file> :\t\t list of test case files\n"; 220*b1cdbd2cSJim Jagielski print "\t-env=<file> :\t\t Properites like file defining env\n"; 221*b1cdbd2cSJim Jagielski print "\t-pdb-orig=<path> :\t directory to hold original pdb files\n"; 222*b1cdbd2cSJim Jagielski print "\t-pdb-new=<path> :\t directory to hold new pdb files\n"; 223*b1cdbd2cSJim Jagielski print "\t-xml-orig=<path> :\t directory to hold original office documents\n"; 224*b1cdbd2cSJim Jagielski print "\t-xml-new=<path> :\t directory to hold new office documents\n"; 225*b1cdbd2cSJim Jagielski print "\t-type=<xml|pdb> :\t Invokes the merge option when converting\n"; 226*b1cdbd2cSJim Jagielski print "\t-log=<logfile> :\t Save results to logfile.\n"; 227*b1cdbd2cSJim Jagielski} 228*b1cdbd2cSJim Jagielski 229*b1cdbd2cSJim Jagielskisub print_env 230*b1cdbd2cSJim Jagielski{ 231*b1cdbd2cSJim Jagielski print "Using the following environment:\n"; 232*b1cdbd2cSJim Jagielski print "\tPDB_ORIG = $pdb_orig\n"; 233*b1cdbd2cSJim Jagielski print "\tPDB_NEW = $pdb_new\n"; 234*b1cdbd2cSJim Jagielski print "\tXML_ORIG = $xml_orig\n"; 235*b1cdbd2cSJim Jagielski print "\tXML_NEW = $xml_new\n\n"; 236*b1cdbd2cSJim Jagielski} 237*b1cdbd2cSJim Jagielski 238*b1cdbd2cSJim Jagielskisub get_file_title 239*b1cdbd2cSJim Jagielski{ 240*b1cdbd2cSJim Jagielski @paths = split('\/', $_[0]); 241*b1cdbd2cSJim Jagielski $len = @paths; 242*b1cdbd2cSJim Jagielski @names = split('\.', @paths[$len-1]); 243*b1cdbd2cSJim Jagielski return $names[0]; 244*b1cdbd2cSJim Jagielski} 245