1#!/bin/sh 2 3# Copyright (C) 2009 Michael Bell <michael.bell@opensync.org> 4 5# setup correct path for binaries if they are not in $PATH 6if [ "${CMAKE_CURRENT_BINARY_DIR}" ] 7then 8 WBXML2XML="${CMAKE_CURRENT_BINARY_DIR}/../../tools/wbxml2xml" 9 XML2WBXML="${CMAKE_CURRENT_BINARY_DIR}/../../tools/xml2wbxml" 10else 11 WBXML2XML=`which wbxml2xml` 12 XML2WBXML=`which xml2wbxml` 13fi 14 15if [ " ${PERL_PROGRAM}" != " " ] 16then 17 PERL_BIN="${PERL_PROGRAM}" 18else 19 PERL_BIN=`which perl` 20fi 21 22NORMALIZE_SCRIPT="${CMAKE_CURRENT_BINARY_DIR}/normalize_xml.pl" 23 24if [ " ${DIFF_PROGRAM}" != " " ] 25then 26 DIFF_BIN="${DIFF_PROGRAM}" 27else 28 DIFF_BIN=`which diff` 29fi 30 31if [ ! -x "$WBXML2XML" ] 32then 33 echo Set WBXML2XML to the binary executable of wbxml2xml tool in order to use that script. 34 exit 1 35fi 36 37if [ ! -x "$XML2WBXML" ] 38then 39 echo Set XML2XWBML to the binary executable of xml2wbxml tool in order to use that script. 40 exit 1 41fi 42 43# if somebody enabled CMAKE_SKIP_RPATH 44# then it is necessary to specify the path to the library 45# Debian does this by default 46if [ "${CMAKE_SKIP_RPATH}" ] 47then 48 LD_LIBRARY_PATH="${CMAKE_CURRENT_BINARY_DIR}/../../src:$LD_LIBRARY_PATH" 49 export LD_LIBRARY_PATH 50fi 51 52# Go to test suite directory 53if [ " $1" != " " -a -d "$1" ] 54then 55 TEST_SUITE_DIR="$1" 56else 57 TEST_SUITE_DIR=`dirname $0` 58fi 59 60cd "$TEST_SUITE_DIR" || exit 1 61PWD=`pwd` 62 63echo Test suite directory is $PWD 64 65# Create temporary directory 66TMP_DIR=`mktemp -d -t LibWBXMLTestSuite.XXX` 67 68# execute only a special test directory 69if [ " $2" != " " ] 70then 71 DIRLIST=`find $PWD/. \( -type d -a -name $2 -a ! -name . -prune \) -print | sort` 72 if [ ! "$DIRLIST" ] 73 then 74 DIRLIST=`find $PWD/. \( -type d -a ! -name "*svn*" -a ! -name . -prune \) -print | sort` 75 COUNTER=0 76 for ITEM in $DIRLIST 77 do 78 if [ "$COUNTER" -eq "$2" ] 79 then 80 RESULT=$ITEM 81 fi 82 COUNTER=`expr $COUNTER + 1` 83 done 84 DIRLIST=$RESULT 85 fi 86else 87 DIRLIST=`find $PWD/. \( -type d -a ! -name "*svn*" -a ! -name . -prune \) -print | sort` 88fi 89 90# For each directory 91RESULT="SUCCEEDED" 92for i in $DIRLIST 93do 94 if [ $i != `pwd` ]; then 95 96 echo ---------------------------- 97 echo Entering into: `basename $i` 98 echo ---------------------------- 99 100 # execute only a special test in a directory 101 if [ `basename $i` != 'ddf' ]; then 102 TESTLIST=`find $i/. \( -type f -name "*.xml" -a ! -name . -prune \) -print | sort` 103 else 104 TESTLIST=`find $i/. \( -type f \( -name "*.ddf" -or -name "*.xml" \) -a ! -name . -prune \) -print | sort` 105 fi 106 if [ " $3" != " " ] 107 then 108 COUNTER=0 109 for ITEM in $TESTLIST 110 do 111 COUNTER=`expr $COUNTER + 1` 112 if [ "$COUNTER" -eq "$3" ] 113 then 114 TESTCASE=$ITEM 115 fi 116 done 117 TESTLIST=$TESTCASE 118 fi 119 120 # For each directory 121 for j in $TESTLIST 122 do 123 echo . `basename $j` 124 125 OUT_WBXML="$TMP_DIR/`basename $i`/`basename $j .xml`.wbxml" 126 OUT_XML="$TMP_DIR/`basename $i`/`basename $j`" 127 128 # Create output directory if they don't exist 129 if [ ! -d "$TMP_DIR/`basename $i`" ]; then 130 mkdir -p "$TMP_DIR/`basename $i`" 131 fi 132 133 # XML ==> WBXML 134 echo Converting into: $OUT_WBXML 135 if [ "$TESTDIR" != "ota" -a "$TESTDIR" != "airsync" ]; then 136 # disable string tables if they are not really necessary 137 NO_STR_TBL="-n"; 138 fi 139 CMD="$XML2WBXML $NO_STR_TBL -o $OUT_WBXML $j" 140 $CMD 141 if [ $? != 0 ]; then RESULT="FAILED"; fi 142 143 # WBXML ==> XML 144 echo Converting back: $OUT_XML 145 TESTDIR=`basename $i` 146 if [ "$TESTDIR" = "ota" ]; 147 then 148 PARAMS="-l OTA" 149 else if [ "$TESTDIR" = "airsync" ]; 150 then 151 PARAMS="-l AIRSYNC" 152 else if [ "$TESTDIR" = "ddf" -a `basename $j` != `basename $j ddf` ]; 153 then 154 # only pure DDF documents need this option 155 # embedded DDF documents do not need this option 156 PARAMS="-l DMDDF12" 157 else 158 PARAMS="" 159 fi fi fi 160 CMD="$WBXML2XML $PARAMS -o $OUT_XML $OUT_WBXML" 161 $CMD 162 if [ $? != 0 ]; then RESULT="FAILED"; fi 163 164 # compare original and generated XML 165 echo -n "Comparing the original and the generated XML ... " 166 if [ " $PERL_BIN" = " " -o " $DIFF_BIN" = " " ] 167 then 168 echo UNSUPPORTED 169 else if [ `basename $j` = "syncml-012.xml" -o `basename $j` = "syncml-013.xml" -o `basename $j` = "activesync-032-formatted-base64.xml" ] 170 then 171 # SyncML CDATA fix makes comparing sometimes impossible 172 echo CDATA_ENCAPSULATION 173 else 174 $PERL_BIN $NORMALIZE_SCRIPT --delete-attribute xmlns $j $OUT_XML.org 175 $PERL_BIN $NORMALIZE_SCRIPT --delete-attribute xmlns $OUT_XML $OUT_XML.new 176 DIFF_RESULT=`$DIFF_BIN -b $OUT_XML.org $OUT_XML.new` 177 if [ " $DIFF_RESULT" != " " ]; 178 then 179 echo FAILED 180 RESULT="FAILED"; 181 else 182 echo SUCCEEDED 183 fi 184 fi fi 185 done 186 187 fi 188done 189 190# Cleanup 191if [ "$RESULT" == "SUCCEEDED" ]; 192then 193 rm -rf "$TMP_DIR"; 194fi 195 196echo --------------------------- 197echo \\o/ Finished ! Yeah ! \\o/ 198echo --------------------------- 199 200echo $RESULT 201if [ "$RESULT" != "SUCCEEDED" ]; 202then 203 exit 1; 204else 205 exit 0; 206fi 207