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