Merge test suite.
diff --git a/testsuite/runtest b/testsuite/runtest
new file mode 100755
index 0000000..b19be3d
--- /dev/null
+++ b/testsuite/runtest
@@ -0,0 +1,97 @@
+#!/bin/sh
+
+PATH=$(dirname $(pwd)):$PATH
+
+run_applet_testcase ()
+{
+	local applet=$1
+	local testcase=$2
+
+	local status=0
+	local U=
+	local X=
+
+	local uc_applet=$(echo $applet | tr a-z A-Z)
+	local testname=$(basename $testcase)
+
+	if grep -q "^# CONFIG_${uc_applet} is not set$" ../.config; then
+		echo "UNSUPPORTED: $testname"
+		return 0
+	fi
+
+	if grep -q "^# UNSUPPORTED: " $testcase; then
+		local feature=`sed -ne 's/.*UNSUPPORTED: //p' $testcase`
+
+		if grep -q "^# ${feature} is not set$" ../.config; then
+			echo "UNSUPPORTED: $testname"
+			return 0
+		fi
+	fi
+
+	if grep -q "^# XFAIL$" $testcase; then
+		U=U
+		X=X
+	fi
+
+	mkdir tmp
+	pushd tmp >/dev/null
+
+	if . ../$testcase >/dev/null 2>&1; then
+		echo "${U}PASS: $testname"
+		if [ "$U" ]; then
+			status=1
+		fi
+	else
+		echo "${X}FAIL: $testname"
+		if [ ! "$X" ]; then
+			status=1
+		fi
+	fi
+
+	popd >/dev/null
+	rm -rf tmp
+
+	return $status
+}
+
+run_applet_tests ()
+{
+	local applet=$1
+
+	local status=0
+
+	for testcase in $applet/*; do
+		if [ "$testcase" = "$applet/CVS" ]; then
+			continue
+		fi
+
+		if run_applet_testcase $applet $testcase; then
+			:
+		else
+			status=1
+		fi
+	done
+
+	return $status
+}
+
+
+status=0
+
+if [ $# -ne 0 ]; then
+	applets="$@"
+else
+	applets="*"
+fi
+
+for applet in $applets; do
+	if [ "$applet" != CVS -a -d "$applet" ]; then
+		if run_applet_tests $applet; then
+			:
+		else
+			status=1
+		fi
+	fi
+done
+
+exit $status