#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
# 
#      http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#

#
# $Id$
#


#  Author(s):   Mike Strosaker
#
#  Verify that a Xerces-C build is successful.
#  Command-Line Parameter:
#      The OS type ("win" or "unix")
#
#  Prerequisites:
#      Set the path to include the appropriate executables
#      and the library path to include the libraries

$os     = $ARGV[0];

# flush output
$| = 1;

if (lc($os) eq "win") {
    $pathsep = "\\";
}
else {
    $pathsep = "/";
}

chdir "samples".$pathsep."data";

#
#  Run the samples
#

#  Run SAXCount
system ("SAXCount");
system ("SAXCount -v=never personal.xml");
system ("SAXCount personal.xml");
system ("SAXCount -n -s personal-schema.xml");

#  Run SAXPrint
system ("SAXPrint");
system ("SAXPrint -v=never personal.xml");
system ("SAXPrint personal.xml");
system ("SAXPrint -n -s personal-schema.xml");

#  Run SAX2Count
system ("SAX2Count");
system ("SAX2Count -v=never personal.xml");
system ("SAX2Count personal.xml");
system ("SAX2Count -p personal-schema.xml");

#  Run SAX2Print
system ("SAX2Print");
system ("SAX2Print -v=never personal.xml");
system ("SAX2Print personal.xml");
system ("SAX2Print -p personal-schema.xml");
system ("SAX2Print personal.xsd");
system ("SAX2Print -sa personal.xsd");

#  Run MemParse
system ("MemParse");
system ("MemParse -v=never");

#  Run Redirect
system ("Redirect");
system ("Redirect personal.xml");

#  Run DOMCount
system ("DOMCount");
system ("DOMCount -v=never personal.xml");
system ("DOMCount personal.xml");
system ("DOMCount -n -s personal-schema.xml");

#  Run DOMPrint
system ("DOMPrint");
system ("DOMPrint -wfpp=on -wddc=off -v=never personal.xml");
system ("DOMPrint -wfpp=on -wddc=off personal.xml");
system ("DOMPrint -wfpp=on -wddc=on  personal.xml");
system ("DOMPrint -wfpp=on -wddc=off -n -s personal-schema.xml");
system ("DOMPrint -v=never -xpath=//name personal.xml");

#  Run StdInParse
system ("StdInParse < personal.xml");
system ("StdInParse -v=never < personal.xml");
system ("StdInParse -n -s < personal-schema.xml");

#  Run PParse
system ("PParse");
system ("PParse personal.xml");
system ("PParse -n -s personal-schema.xml");

#  Run EnumVal
system ("EnumVal");
system ("EnumVal personal.xml");

#  Run SEnumVal
system ("SEnumVal");
system ("SEnumVal personal-schema.xml");

#  Run CreateDOMDocument
system ("CreateDOMDocument");

#  Run SAXPrint.  This tests long element names.
print  ("\nTest of a long element name.\n");
system ("SAXPrint -v=never long.xml");
print  ("\n\n");

#
#  Run the test cases
#

#  Run DOMMemTest
print  ("DOMMemTest\n");
system ("DOMMemTest");

#  Run DOMTest
print  ("DOMTest\n");
system ("DOMTest");

#  Run RangeTest
print  ("RangeTest\n");
system ("RangeTest");

#  Run DOMTraversalTest
print  ("DOMTraversalTest\n");
system ("DOMTraversalTest");

#  Run XSerializerTest
system ("XSerializerTest");
system ("XSerializerTest -v=never  personal.xml");
system ("XSerializerTest -v=always personal.xml");
system ("XSerializerTest -v=never  personal-schema.xml");
system ("XSerializerTest -v=always personal-schema.xml");
system ("XSerializerTest -v=always -f personal-schema.xml");

#  Run XSValueTest
system ("XSValueTest");

#  Run InitTestTerm
system ("InitTermTest");
print  ("1");
system ("InitTermTest personal.xml");
print  ("2");
system ("InitTermTest -n -s personal-schema.xml");
print  ("3");
system ("InitTermTest -n -s -f personal-schema.xml");

#  Run ThreadTest
system ("ThreadTest");
print  ("1");
system ("ThreadTest -parser=sax -v=never -quiet -threads 10 -time 20 personal.xml");
print  ("2");
system ("ThreadTest -parser=dom -v=never -quiet -threads 10 -time 20 personal.xml");
print  ("3");
system ("ThreadTest -parser=sax2 -v=never -quiet -threads 10 -time 20 personal.xml");
print  ("4");
system ("ThreadTest -parser=sax -v=always -quiet -threads 10 -time 20 personal.xml");
print  ("5");
system ("ThreadTest -parser=dom -v=always -quiet -threads 10 -time 20 personal.xml");
print  ("6");
system ("ThreadTest -parser=sax2 -v=always -quiet -threads 10 -time 20 personal.xml");
print  ("7");
system ("ThreadTest -parser=sax -gc -v=always -quiet -threads 10 -time 20 personal.xml");
print  ("8");
system ("ThreadTest -parser=dom -gc -v=always -quiet -threads 10 -time 20 personal.xml");
print  ("9");
system ("ThreadTest -parser=sax2 -gc -v=always -quiet -threads 10 -time 20 personal.xml");
print  ("10");
system ("ThreadTest -parser=sax -n -s -f -v=always -quiet -threads 10 -time 20 personal-schema.xml");
print  ("11");
system ("ThreadTest -parser=dom -n -s -f -v=always -quiet -threads 10 -time 20 personal-schema.xml");
print  ("12");
system ("ThreadTest -parser=sax2 -n -s -f -v=always -quiet -threads 10 -time 20 personal-schema.xml");
print  ("13");
system ("ThreadTest -parser=sax -gc -n -s -f -v=always -quiet -threads 10 -time 20 personal-schema.xml");
print  ("14");
system ("ThreadTest -parser=dom -gc -n -s -f -v=always -quiet -threads 10 -time 20 personal-schema.xml");
print  ("15");
system ("ThreadTest -parser=sax2 -gc -n -s -f -v=always -quiet -threads 10 -time 20 personal-schema.xml");

#  Run MemHandlerTest
system ("MemHandlerTest");
system ("MemHandlerTest -v=always -n -r=2 personal.xml");
system ("MemHandlerTest -v=always -n -r=2 -s -f personal-schema.xml");

chdir "..".$pathsep."..";

chdir "tests".$pathsep."src".$pathsep."DOM".$pathsep."TypeInfo";
system ("DOMTypeInfoTest");

chdir "..".$pathsep."..";

