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