Home | History | Annotate | Download | only in tests
      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