1b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#! /bin/sh 2b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# EXPAT TEST SCRIPT FOR W3C XML TEST SUITE 4b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# This script can be used to exercise Expat against the 6b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# w3c.org xml test suite, available from 7b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# http://www.w3.org/XML/Test/xmlts20020606.zip. 8b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes# To run this script, first set XMLWF below so that xmlwf can be 10b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# found, then set the output directory with OUTPUT. 11b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 12b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# The script lists all test cases where Expat shows a discrepancy 13b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# from the expected result. Test cases where only the canonical 14b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# output differs are prefixed with "Output differs:", and a diff file 15b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# is generated in the appropriate subdirectory under $OUTPUT. 16b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 17b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# If there are output files provided, the script will use 18b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# output from xmlwf and compare the desired output against it. 19b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# However, one has to take into account that the canonical output 20b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# produced by xmlwf conforms to an older definition of canonical XML 21b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# and does not generate notation declarations. 22b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 23b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectMYDIR="`dirname \"$0\"`" 24b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectcd "$MYDIR" 25b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectMYDIR="`pwd`" 26b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXMLWF="`dirname \"$MYDIR\"`/xmlwf/xmlwf" 27b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# XMLWF=/usr/local/bin/xmlwf 28b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectTS="$MYDIR/XML-Test-Suite" 29b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# OUTPUT must terminate with the directory separator. 30b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectOUTPUT="$TS/out/" 31b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# OUTPUT=/home/tmp/xml-testsuite-out/ 32b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 33b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 34b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# RunXmlwfNotWF file reldir 35b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# reldir includes trailing slash 36b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectRunXmlwfNotWF() { 37b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project file="$1" 38b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reldir="$2" 39b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project $XMLWF -p "$file" > outfile || return $? 40b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project read outdata < outfile 41b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if test "$outdata" = "" ; then 4235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes echo "Expected not well-formed: $reldir$file" 43b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 1 44b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 45b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0 46b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project fi 47b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 48b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 49b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# RunXmlwfWF file reldir 50b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# reldir includes trailing slash 51b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectRunXmlwfWF() { 52b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project file="$1" 53b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reldir="$2" 54b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project $XMLWF -p -d "$OUTPUT$reldir" "$file" > outfile || return $? 55b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project read outdata < outfile 56b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if test "$outdata" = "" ; then 57b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if [ -f "out/$file" ] ; then 5835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes diff -u "$OUTPUT$reldir$file" "out/$file" > outfile 59b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if [ -s outfile ] ; then 60b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project cp outfile "$OUTPUT$reldir$file.diff" 61b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project echo "Output differs: $reldir$file" 62b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 1 63b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project fi 64b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project fi 65b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0 66b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 67b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project echo "In $reldir: $outdata" 68b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 1 69b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project fi 70b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 71b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 72b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectSUCCESS=0 73b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectERROR=0 74b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 75b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectUpdateStatus() { 76b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if [ "$1" -eq 0 ] ; then 77b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project SUCCESS=`expr $SUCCESS + 1` 78b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 79b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ERROR=`expr $ERROR + 1` 80b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project fi 81b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 82b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 83b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project########################## 84b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# well-formed test cases # 85b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project########################## 86b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 87b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectcd "$TS/xmlconf" 88b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectfor xmldir in ibm/valid/P* \ 89b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ibm/invalid/P* \ 90b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project xmltest/valid/ext-sa \ 91b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project xmltest/valid/not-sa \ 92b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project xmltest/invalid \ 93b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project xmltest/invalid/not-sa \ 94b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project xmltest/valid/sa \ 95b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sun/valid \ 96b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sun/invalid ; do 97b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project cd "$TS/xmlconf/$xmldir" 98b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project mkdir -p "$OUTPUT$xmldir" 99b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for xmlfile in *.xml ; do 100b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project RunXmlwfWF "$xmlfile" "$xmldir/" 101b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project UpdateStatus $? 102b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project done 103b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project rm outfile 104b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectdone 105b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 106b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectcd "$TS/xmlconf/oasis" 107b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectmkdir -p "$OUTPUT"oasis 108b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectfor xmlfile in *pass*.xml ; do 109b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project RunXmlwfWF "$xmlfile" "oasis/" 110b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project UpdateStatus $? 111b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectdone 112b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectrm outfile 113b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 114b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project############################## 115b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project# not well-formed test cases # 116b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project############################## 117b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 118b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectcd "$TS/xmlconf" 119b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectfor xmldir in ibm/not-wf/P* \ 12035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes ibm/not-wf/p28a \ 121b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ibm/not-wf/misc \ 122b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project xmltest/not-wf/ext-sa \ 123b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project xmltest/not-wf/not-sa \ 124b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project xmltest/not-wf/sa \ 125b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sun/not-wf ; do 126b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project cd "$TS/xmlconf/$xmldir" 127b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for xmlfile in *.xml ; do 128b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project RunXmlwfNotWF "$xmlfile" "$xmldir/" 129b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project UpdateStatus $? 130b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project done 131b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project rm outfile 132b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectdone 133b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 134b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectcd "$TS/xmlconf/oasis" 135b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectfor xmlfile in *fail*.xml ; do 136b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project RunXmlwfNotWF "$xmlfile" "oasis/" 137b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project UpdateStatus $? 138b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectdone 139b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectrm outfile 140b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 141b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectecho "Passed: $SUCCESS" 142b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectecho "Failed: $ERROR" 143