# source this file in a bash

XUNIT_TESTSUITE_START=0
XUNIT_START=0
XUNIT_TOTAL=0
XUNIT_FAILED=0
XUNIT_SUCCESS=0
XUNIT_TESTCASES_XML=""

## Call this at the start of a testcase. 
# \sa xUnit_fail()
# \sa xUnit_success()
xUnit_start() {
  XUNIT_START=$(date +%s.%N)
  if [ $XUNIT_TESTSUITE_START == 0 ]; then
    # very first call: start of a testsuite
    XUNIT_TESTSUITE_START=$XUNIT_START
  fi
}

## Call this after the testcase finished with a failure.
# \sa xUnit_success()
# \pre xUnit_start() must have been called before
# \param $1 classname
# \param $2 testcase name
# \param $3 testcase result
# \param $4 run result
# \param $5 XML file local to test case for storing its own results
# \param $6 proper description
xUnit_fail() {
  class=$1
  test_case=$2
  result=$3
  run_result=$4
  xmlfile_testcase=$5
  desc=$6
  currtime=$(date +%s.%N)
  time=$(echo "$currtime - $XUNIT_START" | bc -l)
  xml="<testcase classname='$class' name='$test_case' description='$desc' Run_result='$run_result' time='$time s' RESULT='$result'></testcase>"
  echo  -e "$xml" >> "$xmlfile_testcase"
  XUNIT_TESTCASES_XML="$XUNIT_TESTCASES_XML \n$xml"
  XUNIT_FAILED=$((XUNIT_FAILED+1))
}

## Call this after the testcase finished successfully.
# \sa xUnit_success()
# \pre xUnit_start() must have been called before
# \param $1 classname
# \param $2 testcase name
# \param $3 testcase result
# \param $4 run result
# \param $5 XML file local to test case for storing its own results
# \param $6 proper description
xUnit_success() {
  class=$1
  test_case=$2
  result=$3
  run_result=$4
  xmlfile_testcase=$5
  desc=$6
  currtime=$(date +%s.%N)
  time=$(echo "$currtime - $XUNIT_START" | bc -l)
  xml="<testcase classname='$class' name='$test_case' description='$desc' Run_result='$run_result' time='$time s' RESULT='$result'></testcase>"
  echo  -e $xml >> $xmlfile_testcase
  XUNIT_TESTCASES_XML="$XUNIT_TESTCASES_XML \n$xml"
  XUNIT_SUCCESS=$((XUNIT_SUCCESS+1))
}

## Call this after all testcases have been completed.
# This functions writes out the test report.
# \param $1 filename
xUnit_write() {
  filename=$1
  tests=$((XUNIT_FAILED+XUNIT_SUCCESS))
  timestamp=$(date --iso-8601=seconds)
  time=$(echo "$currtime - $XUNIT_TESTSUITE_START" | bc -l)
  xml_header="<testsuites><testsuite errors='0' failures='$XUNIT_FAILED' hostname='$(hostname)' name='OAI' skipped='0' tests='$tests' time='$time' timestamp='$timestamp'>"
  echo $xml_header > $filename
  echo -e $XUNIT_TESTCASES_XML >> $filename
  echo "</testsuite></testsuites>" >> $filename
  XUNIT_TESTSUITE_START=0
  XUNIT_START=0
  XUNIT_TOTAL=0
  XUNIT_FAILED=0
  XUNIT_SUCCESS=0
  XUNIT_TESTCASES_XML=""
}
