]> CyberLeo.Net >> Repos - FreeBSD/stable/9.git/blob - contrib/expat/tests/xmltest.sh
MFC r363988:
[FreeBSD/stable/9.git] / contrib / expat / tests / xmltest.sh
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
23 shopt -s nullglob
24
25 MYDIR="`dirname \"$0\"`"
26 cd "$MYDIR"
27 MYDIR="`pwd`"
28 XMLWF="`dirname \"$MYDIR\"`/xmlwf/xmlwf"
29 # XMLWF=/usr/local/bin/xmlwf
30 TS="$MYDIR"
31 # OUTPUT must terminate with the directory separator.
32 OUTPUT="$TS/out/"
33 # OUTPUT=/home/tmp/xml-testsuite-out/
34
35
36 # RunXmlwfNotWF file reldir
37 # reldir includes trailing slash
38 RunXmlwfNotWF() {
39   file="$1"
40   reldir="$2"
41   $XMLWF -p "$file" > outfile || return $?
42   read outdata < outfile
43   if test "$outdata" = "" ; 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
53 RunXmlwfWF() {
54   file="$1"
55   reldir="$2"
56   $XMLWF -p -d "$OUTPUT$reldir" "$file" > outfile || return $?
57   read outdata < outfile 
58   if test "$outdata" = "" ; then 
59       if [ -f "out/$file" ] ; then 
60           diff -u "$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
74 SUCCESS=0
75 ERROR=0
76
77 UpdateStatus() {
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
89 cd "$TS/xmlconf"
90 for 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 *.xml ; do
102       RunXmlwfWF "$xmlfile" "$xmldir/"
103       UpdateStatus $?
104   done
105   rm -f outfile
106 done
107
108 cd "$TS/xmlconf/oasis"
109 mkdir -p "$OUTPUT"oasis
110 for xmlfile in *pass*.xml ; do
111     RunXmlwfWF "$xmlfile" "oasis/"
112     UpdateStatus $?
113 done
114 rm outfile
115
116 ##############################
117 # not well-formed test cases #
118 ##############################
119
120 cd "$TS/xmlconf"
121 for xmldir in ibm/not-wf/P* \
122               ibm/not-wf/p28a \
123               ibm/not-wf/misc \
124               xmltest/not-wf/ext-sa \
125               xmltest/not-wf/not-sa \
126               xmltest/not-wf/sa \
127               sun/not-wf ; do
128   cd "$TS/xmlconf/$xmldir"
129   for xmlfile in *.xml ; do
130       RunXmlwfNotWF "$xmlfile" "$xmldir/"
131       UpdateStatus $?
132   done
133   rm outfile
134 done
135
136 cd "$TS/xmlconf/oasis"
137 for xmlfile in *fail*.xml ; do
138     RunXmlwfNotWF "$xmlfile" "oasis/"
139     UpdateStatus $?
140 done
141 rm outfile
142
143 echo "Passed: $SUCCESS"
144 echo "Failed: $ERROR"