#!/bin/sh

# Script to setup environment correctly and run test suites
#

# setting environment variables for testing
DBNAME=v3db
VERSION=3.4.3
ARCHLIB=lib64
PKGROOT=/opt/lsb/test/share/qmtest_libstdcpp_$VERSION
EXECROOT=/opt/lsb/test/$ARCHLIB/qmtest_libstdcpp_$VERSION
QMTEST_CLASS_PATH=$PKGROOT/qm-classes/qmtc:$PKGROOT/qm-classes/qmtest_gcc
PATH=/opt/lsb/bin:/opt/lsb/appbat/bin:$PATH

# Set env variables for testing
export PKGROOT EXECROOT QMTEST_CLASS_PATH PATH

# Config param
function config_arg()
{
  DEFAULT=$3

  printf "$2 ("
  if [ -n "$DEFAULT" ];
  then
    printf "$DEFAULT"
  fi

  printf ")? "
  read cmd

  if [ -z "$cmd" ];
  then
    cmd=$DEFAULT
  fi

  export "$1=$cmd"
}

# Create the test database
function create_tdb()
{
  config_arg DBROOT "Where do you want to create the test database" "$HOME/qmtest_libstdcpp_$VERSION"
  echo $DBROOT | grep "^/" > /dev/null  2>&1 
  if [ $? -ne 0 ];
  then
    export DBROOT=$PWD/$DBROOT
  fi

  if test ! -d $DBROOT
  then
    mkdir $DBROOT
  fi
  
  qmtest -D $DBROOT/$DBNAME create-tdb -c v3_database.V3Database -a srcdir=$PKGROOT/testsuite

  printf "\n"
}

# Do run time configuration
function config_run()
{
  DEFAULT_TRIPLET=`grep "^DejaGNUTest.target=" $PKGROOT/context | cut -d= -f2` 
  config_arg TRIPLET "What is the GNU triplet for your operating system" "$DEFAULT_TRIPLET"

  DEFAULT_OPER=`grep "^VSX_OPER=" $PKGROOT/context | cut -d= -f2` 
  config_arg VSX_OPER "Name of person running tests" "$DEFAULT_OPER"

  DEFAULT_ORG=`grep "^VSX_ORG=" $PKGROOT/context | cut -d= -f2` 
  config_arg VSX_ORG "Organisation" "$DEFAULT_ORG"

  DEFAULT_SYS=`grep "^VSX_SYS=" $PKGROOT/context | cut -d= -f2` 
  config_arg VSX_SYS "Test System" "$DEFAULT_SYS"

}

# Save current locale settings
function save_current_locale()
{
  export OLD_TZ=$TZ
  export OLD_LANG=$LANG
  export OLD_LC_CTYPE=$LC_CTYPE
  export OLD_LC_NUMERIC=$LC_NUMERIC
  export OLD_LC_TIME=$LC_TIME
  export OLD_LC_COLLATE=$LC_COLLATE
  export OLD_LC_MONETARY=$LC_MONETARY
  export OLD_LC_MESSAGES=$LC_MESSAGES
  export OLD_LC_PAPER=$LC_PAPER
  export OLD_LC_NAME=$LC_NAME
  export OLD_LC_ADDRESS=$LC_ADDRESS
  export OLD_LC_TELEPHONE=$LC_TELEPHONE
  export OLD_LC_MEASUREMENT=$LC_MEASUREMENT
  export OLD_LC_IDENTIFICATION=$LC_IDENTIFICATION
  export OLD_LC_ALL=$LC_ALL
}

# Restore current locale settings
function restore_current_locale()
{
  export TZ=$OLD_TZ
  export LC_ALL=$OLD_LC_ALL
  export LANG=$OLD_LANG
  export LC_CTYPE=$OLD_LC_CTYPE
  export LC_NUMERIC=$OLD_LC_NUMERIC
  export LC_TIME=$OLD_LC_TIME
  export LC_COLLATE=$OLD_LC_COLLATE
  export LC_MONETARY=$OLD_LC_MONETARY
  export LC_MESSAGES=$OLD_LC_MESSAGES
  export LC_PAPER=$OLD_LC_PAPER
  export LC_NAME=$OLD_LC_NAME
  export LC_ADDRESS=$OLD_LC_ADDRESS
  export LC_TELEPHONE=$OLD_LC_TELEPHONE
  export LC_MEASUREMENT=$OLD_LC_MEASUREMENT
  export LC_IDENTIFICATION=$OLD_LC_IDENTIFICATION
}

#----------------------------------------------------------------------
# Main bit

# Check whether the necessary locales have been setup up
# (it_IT en_US de_DE en_HK de_DE@euro es_MX fr_FR en_PH fr_FR@euro)
save_current_locale
export TZ=UTC
for Locale in it_IT en_US de_DE en_HK de_DE@euro es_MX fr_FR en_PH fr_FR@euro 
do
  export LC_ALL=$Locale
  date -f $PKGROOT/locale/designdate > $PKGROOT/.date.$Locale

  diff $PKGROOT/.date.$Locale $PKGROOT/locale/date.$Locale
  if [ $? -ne 0 ]
  then
    echo "Warning: the $Locale locale may not be set up up correctly in your system,"
    #echo "Please check and rerun run_test again."

    rm -f $PKGROOT/.date.$Locale 
    restore_current_locale

    #exit 1
  fi

  rm -f $PKGROOT/.date.$Locale 
done
restore_current_locale

create_tdb
config_run

# Run the test suites
echo "----------------------------------------------------------------------"
echo "Executing the test suites"
echo

cd $DBROOT/$DBNAME
REPORT_NAME=journal.`date  +"%Y%m%d%H%M"` 

# If the user provides triplet, then use it
qmtest run -C $PKGROOT/context -c DejaGNUTest.target="$TRIPLET" -c VSX_OPER="$VSX_OPER" -c VSX_ORG="$VSX_ORG" -c VSX_SYS="$VSX_SYS"  --result-stream="tet_stream.TETStream(filename='$REPORT_NAME')"

echo ""

echo "Finished."
echo "A report has been created in the file: " $DBROOT/$DBNAME/$REPORT_NAME
echo

