1b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#! /bin/sh
2b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
3b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#   EXPAT TEST SCRIPT FOR W3C XML TEST SUITE
4b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
5b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# This script can be used to exercise Expat against the
6b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# w3c.org xml test suite, available from
7b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# http://www.w3.org/XML/Test/xmlts20020606.zip.
8b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes# To run this script, first set XMLWF below so that xmlwf can be
10b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# found, then set the output directory with OUTPUT.
11b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
12b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# The script lists all test cases where Expat shows a discrepancy
13b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# from the expected result. Test cases where only the canonical
14b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# output differs are prefixed with "Output differs:", and a diff file
15b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# is generated in the appropriate subdirectory under $OUTPUT.
16b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
17b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# If there are output files provided, the script will use
18b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# output from xmlwf and compare the desired output against it.
19b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# However, one has to take into account that the canonical output
20b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# produced by xmlwf conforms to an older definition of canonical XML
21b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# and does not generate notation declarations.
22b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
23b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectMYDIR="`dirname \"$0\"`"
24b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectcd "$MYDIR"
25b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectMYDIR="`pwd`"
26b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXMLWF="`dirname \"$MYDIR\"`/xmlwf/xmlwf"
27b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# XMLWF=/usr/local/bin/xmlwf
28b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectTS="$MYDIR/XML-Test-Suite"
29b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# OUTPUT must terminate with the directory separator.
30b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectOUTPUT="$TS/out/"
31b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# OUTPUT=/home/tmp/xml-testsuite-out/
32b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
33b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
34b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# RunXmlwfNotWF file reldir
35b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# reldir includes trailing slash
36b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectRunXmlwfNotWF() {
37b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  file="$1"
38b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  reldir="$2"
39b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  $XMLWF -p "$file" > outfile || return $?
40b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  read outdata < outfile
41b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  if test "$outdata" = "" ; then
4235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes      echo "Expected not well-formed: $reldir$file"
43b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project      return 1
44b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  else
45b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project      return 0
46b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  fi 
47b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project}
48b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
49b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# RunXmlwfWF file reldir
50b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# reldir includes trailing slash
51b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectRunXmlwfWF() {
52b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  file="$1"
53b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  reldir="$2"
54b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  $XMLWF -p -d "$OUTPUT$reldir" "$file" > outfile || return $?
55b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  read outdata < outfile 
56b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  if test "$outdata" = "" ; then 
57b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project      if [ -f "out/$file" ] ; then 
5835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes          diff -u "$OUTPUT$reldir$file" "out/$file" > outfile 
59b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project          if [ -s outfile ] ; then 
60b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              cp outfile "$OUTPUT$reldir$file.diff"
61b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              echo "Output differs: $reldir$file"
62b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              return 1
63b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project          fi 
64b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project      fi 
65b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project      return 0
66b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  else 
67b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project      echo "In $reldir: $outdata"
68b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project      return 1
69b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  fi 
70b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project}
71b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
72b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectSUCCESS=0
73b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectERROR=0
74b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
75b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectUpdateStatus() {
76b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  if [ "$1" -eq 0 ] ; then
77b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project    SUCCESS=`expr $SUCCESS + 1`
78b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  else
79b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project    ERROR=`expr $ERROR + 1`
80b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  fi
81b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project}
82b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
83b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project##########################
84b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# well-formed test cases #
85b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project##########################
86b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
87b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectcd "$TS/xmlconf"
88b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectfor xmldir in ibm/valid/P* \
89b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              ibm/invalid/P* \
90b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              xmltest/valid/ext-sa \
91b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              xmltest/valid/not-sa \
92b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              xmltest/invalid \
93b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              xmltest/invalid/not-sa \
94b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              xmltest/valid/sa \
95b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              sun/valid \
96b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              sun/invalid ; do
97b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  cd "$TS/xmlconf/$xmldir"
98b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  mkdir -p "$OUTPUT$xmldir"
99b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  for xmlfile in *.xml ; do
100b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project      RunXmlwfWF "$xmlfile" "$xmldir/"
101b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project      UpdateStatus $?
102b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  done
103b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  rm outfile
104b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectdone
105b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
106b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectcd "$TS/xmlconf/oasis"
107b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectmkdir -p "$OUTPUT"oasis
108b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectfor xmlfile in *pass*.xml ; do
109b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project    RunXmlwfWF "$xmlfile" "oasis/"
110b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project    UpdateStatus $?
111b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectdone
112b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectrm outfile
113b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
114b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project##############################
115b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# not well-formed test cases #
116b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project##############################
117b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
118b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectcd "$TS/xmlconf"
119b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectfor xmldir in ibm/not-wf/P* \
12035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes              ibm/not-wf/p28a \
121b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              ibm/not-wf/misc \
122b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              xmltest/not-wf/ext-sa \
123b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              xmltest/not-wf/not-sa \
124b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              xmltest/not-wf/sa \
125b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project              sun/not-wf ; do
126b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  cd "$TS/xmlconf/$xmldir"
127b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  for xmlfile in *.xml ; do
128b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project      RunXmlwfNotWF "$xmlfile" "$xmldir/"
129b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project      UpdateStatus $?
130b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  done
131b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project  rm outfile
132b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectdone
133b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
134b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectcd "$TS/xmlconf/oasis"
135b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectfor xmlfile in *fail*.xml ; do
136b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project    RunXmlwfNotWF "$xmlfile" "oasis/"
137b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project    UpdateStatus $?
138b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectdone
139b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectrm outfile
140b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project
141b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectecho "Passed: $SUCCESS"
142b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectecho "Failed: $ERROR"
143