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" |