Import expat-2.0.1
[dragonfly.git] / contrib / expat / tests / xmltest.sh
1 #! /bin/sh
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 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
23 MYDIR="`dirname \"$0\"`"
24 cd "$MYDIR"
25 MYDIR="`pwd`"
26 XMLWF="`dirname \"$MYDIR\"`/xmlwf/xmlwf"
27 # XMLWF=/usr/local/bin/xmlwf
28 TS="$MYDIR/XML-Test-Suite"
29 # OUTPUT must terminate with the directory separator.
30 OUTPUT="$TS/out/"
31 # OUTPUT=/home/tmp/xml-testsuite-out/
32
33
34 # RunXmlwfNotWF file reldir
35 # reldir includes trailing slash
36 RunXmlwfNotWF() {
37   file="$1"
38   reldir="$2"
39   $XMLWF -p "$file" > outfile || return $?
40   read outdata < outfile
41   if test "$outdata" = "" ; then
42       echo "Expected well-formed: $reldir$file"
43       return 1
44   else
45       return 0
46   fi 
47 }
48
49 # RunXmlwfWF file reldir
50 # reldir includes trailing slash
51 RunXmlwfWF() {
52   file="$1"
53   reldir="$2"
54   $XMLWF -p -d "$OUTPUT$reldir" "$file" > outfile || return $?
55   read outdata < outfile 
56   if test "$outdata" = "" ; then 
57       if [ -f "out/$file" ] ; then 
58           diff "$OUTPUT$reldir$file" "out/$file" > outfile 
59           if [ -s outfile ] ; then 
60               cp outfile "$OUTPUT$reldir$file.diff"
61               echo "Output differs: $reldir$file"
62               return 1
63           fi 
64       fi 
65       return 0
66   else 
67       echo "In $reldir: $outdata"
68       return 1
69   fi 
70 }
71
72 SUCCESS=0
73 ERROR=0
74
75 UpdateStatus() {
76   if [ "$1" -eq 0 ] ; then
77     SUCCESS=`expr $SUCCESS + 1`
78   else
79     ERROR=`expr $ERROR + 1`
80   fi
81 }
82
83 ##########################
84 # well-formed test cases #
85 ##########################
86
87 cd "$TS/xmlconf"
88 for xmldir in ibm/valid/P* \
89               ibm/invalid/P* \
90               xmltest/valid/ext-sa \
91               xmltest/valid/not-sa \
92               xmltest/invalid \
93               xmltest/invalid/not-sa \
94               xmltest/valid/sa \
95               sun/valid \
96               sun/invalid ; do
97   cd "$TS/xmlconf/$xmldir"
98   mkdir -p "$OUTPUT$xmldir"
99   for xmlfile in *.xml ; do
100       RunXmlwfWF "$xmlfile" "$xmldir/"
101       UpdateStatus $?
102   done
103   rm outfile
104 done
105
106 cd "$TS/xmlconf/oasis"
107 mkdir -p "$OUTPUT"oasis
108 for xmlfile in *pass*.xml ; do
109     RunXmlwfWF "$xmlfile" "oasis/"
110     UpdateStatus $?
111 done
112 rm outfile
113
114 ##############################
115 # not well-formed test cases #
116 ##############################
117
118 cd "$TS/xmlconf"
119 for xmldir in ibm/not-wf/P* \
120               ibm/not-wf/misc \
121               xmltest/not-wf/ext-sa \
122               xmltest/not-wf/not-sa \
123               xmltest/not-wf/sa \
124               sun/not-wf ; do
125   cd "$TS/xmlconf/$xmldir"
126   for xmlfile in *.xml ; do
127       RunXmlwfNotWF "$xmlfile" "$xmldir/"
128       UpdateStatus $?
129   done
130   rm outfile
131 done
132
133 cd "$TS/xmlconf/oasis"
134 for xmlfile in *fail*.xml ; do
135     RunXmlwfNotWF "$xmlfile" "oasis/"
136     UpdateStatus $?
137 done
138 rm outfile
139
140 echo "Passed: $SUCCESS"
141 echo "Failed: $ERROR"