Imported Upstream version 2.2.5
[platform/upstream/expat.git] / 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="${1:-`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 # Unicode-aware diff utility
35 DIFF="$TS/udiffer.py"
36
37
38 # RunXmlwfNotWF file reldir
39 # reldir includes trailing slash
40 RunXmlwfNotWF() {
41   file="$1"
42   reldir="$2"
43   $XMLWF -p "$file" > outfile || return $?
44   read outdata < outfile
45   if test "$outdata" = "" ; then
46       echo "Expected not well-formed: $reldir$file"
47       return 1
48   else
49       return 0
50   fi 
51 }
52
53 # RunXmlwfWF file reldir
54 # reldir includes trailing slash
55 RunXmlwfWF() {
56   file="$1"
57   reldir="$2"
58   $XMLWF -p -N -d "$OUTPUT$reldir" "$file" > outfile || return $?
59   read outdata < outfile 
60   if test "$outdata" = "" ; then 
61       if [ -f "out/$file" ] ; then 
62           $DIFF "$OUTPUT$reldir$file" "out/$file" > outfile 
63           if [ -s outfile ] ; then 
64               cp outfile "$OUTPUT$reldir$file.diff"
65               echo "Output differs: $reldir$file"
66               return 1
67           fi 
68       fi 
69       return 0
70   else 
71       echo "In $reldir: $outdata"
72       return 1
73   fi 
74 }
75
76 SUCCESS=0
77 ERROR=0
78
79 UpdateStatus() {
80   if [ "$1" -eq 0 ] ; then
81     SUCCESS=`expr $SUCCESS + 1`
82   else
83     ERROR=`expr $ERROR + 1`
84   fi
85 }
86
87 ##########################
88 # well-formed test cases #
89 ##########################
90
91 cd "$TS/xmlconf"
92 for xmldir in ibm/valid/P* \
93               ibm/invalid/P* \
94               xmltest/valid/ext-sa \
95               xmltest/valid/not-sa \
96               xmltest/invalid \
97               xmltest/invalid/not-sa \
98               xmltest/valid/sa \
99               sun/valid \
100               sun/invalid ; do
101   cd "$TS/xmlconf/$xmldir"
102   mkdir -p "$OUTPUT$xmldir"
103   for xmlfile in $(ls -1 *.xml | sort -d) ; do
104       [[ -f "$xmlfile" ]] || continue
105       RunXmlwfWF "$xmlfile" "$xmldir/"
106       UpdateStatus $?
107   done
108   rm -f outfile
109 done
110
111 cd "$TS/xmlconf/oasis"
112 mkdir -p "$OUTPUT"oasis
113 for xmlfile in *pass*.xml ; do
114     RunXmlwfWF "$xmlfile" "oasis/"
115     UpdateStatus $?
116 done
117 rm outfile
118
119 ##############################
120 # not well-formed test cases #
121 ##############################
122
123 cd "$TS/xmlconf"
124 for xmldir in ibm/not-wf/P* \
125               ibm/not-wf/p28a \
126               ibm/not-wf/misc \
127               xmltest/not-wf/ext-sa \
128               xmltest/not-wf/not-sa \
129               xmltest/not-wf/sa \
130               sun/not-wf ; do
131   cd "$TS/xmlconf/$xmldir"
132   for xmlfile in *.xml ; do
133       RunXmlwfNotWF "$xmlfile" "$xmldir/"
134       UpdateStatus $?
135   done
136   rm outfile
137 done
138
139 cd "$TS/xmlconf/oasis"
140 for xmlfile in *fail*.xml ; do
141     RunXmlwfNotWF "$xmlfile" "oasis/"
142     UpdateStatus $?
143 done
144 rm outfile
145
146 echo "Passed: $SUCCESS"
147 echo "Failed: $ERROR"