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