THRIFT-932. hs: Haskell tests need to be run through 'make check' (and probably 'cabal check') too

Tests are now self-contained and correctly exit after running. There's a single run script which has improved error messages and defaults to the thrift binary compiled in the current source directory instead of those in PATH. And as a bonus hooks both cabal check and running the tests to make check. 

Patch: Christian Lavoie

git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@1004861 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/test/hs/run-test.sh b/test/hs/run-test.sh
new file mode 100644
index 0000000..78df0a8
--- /dev/null
+++ b/test/hs/run-test.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+if [ "x" == "x$1" ]; then
+  printf "run-test.sh needs an argument, the name of the test to run. Try 'ThriftTest' or 'ProtoDebugTest'\n"
+  exit 2
+fi
+
+# Check some basics
+if [ -z $BASE ]; then
+    BASE=../..
+fi
+
+if [ -z $THRIFT_BIN ]; then
+    THRIFT_BIN=$BASE/compiler/cpp/thrift 
+fi
+
+if [ ! -x "$THRIFT_BIN" ]; then
+    printf "Could not find thrift binary; pass it as environment variable THRIFT_BIN\n"
+    exit 1
+fi
+
+# Figure out what file to generate bindings from
+if [ -z $THRIFT_FILE ]; then
+    THRIFT_FILE=$BASE/test/$1.thrift
+fi
+
+if [ ! -e $THRIFT_FILE ]; then
+    printf "Missing thrift file $THRIFT_FILE \n"
+    exit 2
+fi
+
+if [ ! -e "$THRIFT_FILE" ]; then
+    printf "Could not find thrift file to run; pass it as environment variable THRIFT_FILE\n"
+    exit 1
+fi
+
+# Figure out what file to run has a server
+if [ -z $TEST_SOURCE_FILE ]; then
+    TEST_SOURCE_FILE=$BASE/test/hs/$1_Main.hs
+fi
+
+if [ ! -e $TEST_SOURCE_FILE ]; then
+    printf "Missing server code file $TEST_SOURCE_FILE \n"
+    exit 3
+fi
+
+# Actually run the server bits
+printf "Generating bindings... \n"
+$THRIFT_BIN --gen hs $THRIFT_FILE
+
+printf "Running test... \n"
+runhaskell -Wall -Werror -i$BASE/lib/hs/src -igen-hs $TEST_SOURCE_FILE