#!/system/bin/sh
#
# Copyright 2015 Nest Labs, Inc. All rights reserved.
#
# This script essentially ports the test cases defined in
# test/CMakeLists.txt (which use CTest as the test runner).

###
### Detect where the tests are installed,
### typically /data/nativetest/google-gflags
###
TEST_ROOT="$(dirname $0)"
grep -vE "^/" "$TEST_ROOT" &> /dev/null
if [ $? -eq 0 ] ; then
    TEST_ROOT="$(pwd)/${TEST_ROOT}"
fi

###
### GLOBAL VARIABLES
###
### only export variables that mutate
###

# Increment when a test passes
export GLOBAL_PASS=0
# Increment when a test fails
export GLOBAL_FAIL=0
# The os path separator, used to make copy/paste with CMakeLists.txt work
SLASH="/"
# The directory where helper test programs are installed
TEST_BIN="${TEST_ROOT}/bin"
# The directory where helper test data is installed
TEST_DATA="${TEST_ROOT}/data"
# The temporary directory where raw program output is placed
TMPDIR=/storage
# The log file with all raw program output
LOGFILE=$(mktemp --tmpdir="${TMPDIR}" google-gflags-unit-tests-log.XXXXXXXX)
# A temporary file, usually used for staging raw program output for grep
TMPFILE=$(mktemp --tmpdir="${TMPDIR}" google-gflags-unit-tests-tmp.XXXXXXXX)

PATH="${TEST_BIN}:${PATH}"

# run_test
#
# This is a /bin/sh port of add_gflags_test that is implemented by
# cmake/utils.cmake and cmake/execute_test.cmake
#
# Usage: run_test <test-name> <expected-return-code> <expected-text-output> <unexpected-text-output> <cmd> [args...]
#
# test-name: A symbolic name for the test for logging
#
# expected-return-code: the number passed back to the operating system. default: 0
# if a blank string is given.
#
# expected-text-output: if a non-empty string, it is expected that the command will
# output this string. It must be seen in order to pass.
#
# unexpected-text-output: if a non-empty string, it is expected that the command
# will NOT output this string. If it is seen, the test will fail.
#
# cmd: executable to run (full path or in $PATH)
#
# args: all arguments that need to be passed on to the executable.
#
run_test()
{
    TEST_NAME="$1"
    shift
    EXPECTED_RC="$1"
    shift
    EXPECTED_OUTPUT="$1"
    shift
    UNEXPECTED_OUTPUT="$1"
    shift

    if [ $# -eq 0 ] ; then
	GLOBAL_RETURN_CODE=1
	echo "FATAL ERROR: invalid arguments passed to run_test for test='$TEST_NAME'"
	return 1
    fi

    if [ -z "$EXPECTED_RC" ] ; then
	EXPECTED_RC="0"
    fi

    VERDICT="pass"
    REASON="default"

    echo "RUNNING TEST '${TEST_NAME}' >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" > "$TMPFILE"
    echo "CMDLINE: $@" >> "$TMPFILE"
    "$@" &>> "$TMPFILE"
    RC=$?
    echo "RC=$RC" >> "$TMPFILE"
    echo "END OF TEST '${TEST_NAME}' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" >> "$TMPFILE"

    EXPECTED_FOUND=1
    UNEXPECTED_FOUND=0

    if [ -n "$EXPECTED_OUTPUT" ] ; then
	grep -- "$EXPECTED_OUTPUT" "$TMPFILE" &> /dev/null
	if [ $? -ne 0 ] ; then
	    EXPECTED_FOUND=0
	fi
    fi

    if [ -n "$UNEXPECTED_OUTPUT" ] ; then
	grep -- "$UNEXPECTED_OUTPUT" "$TMPFILE" &> /dev/null
	if [ $? -eq 0 ] ; then
	    UNEXPECTED_FOUND=1
	fi
    fi

    if [ "$RC" != "$EXPECTED_RC" ] ; then
	VERDICT="fail"
	REASON="unexpected return code (got ${RC}, expected ${EXPECTED_RC})"
    elif [ "$EXPECTED_FOUND" = "0" ] ; then
	VERDICT="fail"
	REASON="missing expected output, expected '${EXPECTED_OUTPUT}', see '$LOGFILE'"
    elif [ "$UNEXPECTED_FOUND" = "1" ] ; then
	VERDICT="fail"
	REASON="Unexpected output detected: '${UNEXPECTED_OUTPUT}', see '$LOGFILE'"
    fi

    cat "$TMPFILE" >> "$LOGFILE"

    if [ "$VERDICT" = "pass" ] ; then
	echo "${TEST_NAME}: pass"
	GLOBAL_PASS=$(($GLOBAL_PASS + 1))
	return 0
    else
	echo "${TEST_NAME}: fail ($REASON)"
	GLOBAL_FAIL=$(($GLOBAL_FAIL + 1))
	return 1
    fi
}

###
### TEST CASES
###
### These are mostly taken from test/CMakeLists.txt
###

cd "$TEST_ROOT"

# Clear out the log file, add time
date > $LOGFILE

echo LOGFILE=$LOGFILE | tee -a "$LOGFILE"
echo TMPFILE=$TMPFILE | tee -a "$LOGFILE"

echo "SETTING ENVIRONMENT VARIABLES:" >> $LOGFILE
for N in FLAGS_undefok=foo,bar FLAGS_weirdo="" FLAGS_version="true" FLAGS_help="false" ; do
    echo "$N" >> $LOGFILE
    export $N
done

# Test this script
run_test "the_truth" 0 "" "" true
run_test "the_lie" 1 "" "" false
run_test "the_word" "" "really unlikely" "" echo "really unlikely"

# Make sure the --help output doesn't print the stripped text
run_test "strip_flags_help" 1 "" "This text should be stripped out" gflags_strip_flags_test --help

# Make sure the stripped text isn't in the binary at all
strings "${TEST_BIN}/gflags_strip_flags_test" | grep "This text should be stripped out"
if [ $? -eq 0 ] ; then
    echo "strip_flags_binary: fail (poison string detected)"
else
    echo "strip_flags_binary: pass"
fi

# First, just make sure the gflags_unittest works as-is
run_test "unittest" 0 "" "" gflags_unittest --test_tmpdir="${TMPDIR}"

# --help should show all flags, including flags from gflags_reporting
run_test "help-reporting" 1 "${SLASH}gflags_reporting.cc:" ""  gflags_unittest  --help

# Make sure that --help prints even very long helpstrings.
run_test long-helpstring 1 "end of a long helpstring" ""  gflags_unittest  --help

# Make sure --help reflects flag changes made before flag-parsing
run_test changed_bool1 1 "-changed_bool1 (changed) type: bool default: true" ""  gflags_unittest  --help
run_test changed_bool2 1 "-changed_bool2 (changed) type: bool default: false currently: true" ""  gflags_unittest  --help

# And on the command-line, too
run_test changeable_string_var 1 "-changeable_string_var () type: string default: \"1\" currently: \"2\"" ""  gflags_unittest  --changeable_string_var 2 --help

# --nohelp and --help=false should be as if we didn't say anything
run_test nohelp     0 "PASS" ""  gflags_unittest  --nohelp
run_test help=false 0 "PASS" ""  gflags_unittest  --help=false

# --helpfull is the same as help
run_test helpfull 1 "${SLASH}gflags_reporting.cc:" ""  gflags_unittest  --helpfull

# --helpshort should show only flags from the  gflags_unittest  itself
run_test helpshort 1 "${SLASH}gflags_unittest.cc:" "${SLASH}gflags_reporting.cc:"  gflags_unittest  --helpshort

# --helpshort should show the tldflag we created in the  gflags_unittest  dir
run_test helpshort-tldflag1 1 "tldflag1" "${SLASH}google.cc:"  gflags_unittest  --helpshort
run_test helpshort-tldflag2 1 "tldflag2" "${SLASH}google.cc:"  gflags_unittest  --helpshort

# --helpshort should work if the main source file is suffixed with [_-]main
run_test helpshort-main 1 "${SLASH}gflags_unittest-main.cc:" "${SLASH}gflags_reporting.cc:" gflags_unittest-main --helpshort
run_test helpshort_main 1 "${SLASH}gflags_unittest_main.cc:" "${SLASH}gflags_reporting.cc:" gflags_unittest_main --helpshort

# --helpon needs an argument
run_test helpon 1 "'--helpon' is missing its argument; flag description: show help on" ""  gflags_unittest  --helpon
# --helpon argument indicates what file we'll show args from
run_test helpon=gflags 1 "${SLASH}gflags.cc:" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --helpon=gflags
# another way of specifying the argument
run_test helpon_gflags 1 "${SLASH}gflags.cc:" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --helpon gflags
# test another argument
run_test helpon=gflags_unittest 1 "${SLASH}gflags_unittest.cc:" "${SLASH}gflags.cc:"  gflags_unittest  --helpon=gflags_unittest

# helpmatch is like helpon but takes substrings
run_test helpmatch_reporting 1 "${SLASH}gflags_reporting.cc:" "${SLASH}gflags_unittest.cc:"  gflags_unittest  -helpmatch reporting
run_test helpmatch=unittest  1 "${SLASH}gflags_unittest.cc:" "${SLASH}gflags.cc:"  gflags_unittest  -helpmatch=unittest

# if no flags are found with helpmatch or helpon, suggest --help
run_test helpmatch=nosuchsubstring 1 "No modules matched" "${SLASH}gflags_unittest.cc:"  gflags_unittest  -helpmatch=nosuchsubstring
run_test helpon=nosuchmodule       1 "No modules matched" "${SLASH}gflags_unittest.cc:"  gflags_unittest  -helpon=nosuchmodule

# helppackage shows all the flags in the same dir as this unittest
# --help should show all flags, including flags from google.cc
run_test helppackage 1 "${SLASH}gflags_reporting.cc:" ""  gflags_unittest  --helppackage

# xml!
run_test helpxml 1 "${SLASH}gflags_unittest.cc</file>" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --helpxml

# just print the version info and exit
run_test version-1 0 "gflags_unittest"      "${SLASH}gflags_unittest.cc:"  gflags_unittest  --version
run_test version-2 0 "version test_version" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --version

# --undefok is a fun flag...
run_test undefok-1 1 "unknown command line flag 'foo'" ""  gflags_unittest  --undefok= --foo --unused_bool
run_test undefok-2 0 "PASS" ""  gflags_unittest  --undefok=foo --foo --unused_bool
# If you say foo is ok to be undefined, we'll accept --nofoo as well
run_test undefok-3 0 "PASS" ""  gflags_unittest  --undefok=foo --nofoo --unused_bool
# It's ok if the foo is in the middle
run_test undefok-4 0 "PASS" ""  gflags_unittest  --undefok=fee,fi,foo,fum --foo --unused_bool
# But the spelling has to be just right...
run_test undefok-5 1 "unknown command line flag 'foo'" ""  gflags_unittest  --undefok=fo --foo --unused_bool
run_test undefok-6 1 "unknown command line flag 'foo'" ""  gflags_unittest  --undefok=foot --foo --unused_bool

# See if we can successfully load our flags from the flagfile
run_test flagfile.1 0 "gflags_unittest" "${SLASH}gflags_unittest.cc:"  gflags_unittest  "--flagfile=data/flagfile.1"
run_test flagfile.2 0 "PASS" ""  gflags_unittest  "--flagfile=data/flagfile.2"
run_test flagfile.3 0 "PASS" ""  gflags_unittest  "--flagfile=data/flagfile.3"

# Also try to load flags from the environment
run_test fromenv=version      0 "gflags_unittest" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --fromenv=version
run_test tryfromenv=version   0 "gflags_unittest" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --tryfromenv=version
run_test fromenv=help         0 "PASS" ""  gflags_unittest  --fromenv=help
run_test tryfromenv=help      0 "PASS" ""  gflags_unittest  --tryfromenv=help
run_test fromenv=helpfull     1 "helpfull not found in environment" ""  gflags_unittest  --fromenv=helpfull
run_test tryfromenv=helpfull  0 "PASS" ""  gflags_unittest  --tryfromenv=helpfull
run_test tryfromenv=undefok   0 "PASS" ""  gflags_unittest  --tryfromenv=undefok --foo
run_test tryfromenv=weirdo    1 "unknown command line flag" ""  gflags_unittest  --tryfromenv=weirdo
run_test tryfromenv-multiple  0 "gflags_unittest" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --tryfromenv=test_bool,version,unused_bool
run_test fromenv=test_bool    1 "not found in environment" ""  gflags_unittest  --fromenv=test_bool
run_test fromenv=test_bool-ok 1 "unknown command line flag" ""  gflags_unittest  --fromenv=test_bool,ok
# Here, the --version overrides the fromenv
run_test version-overrides-fromenv 0 "gflags_unittest" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --fromenv=test_bool,version,ok

# Make sure -- by itself stops argv processing
run_test dashdash 0 "PASS" ""  gflags_unittest  -- --help

# And we should die if the flag value doesn't pass the validator
run_test always_fail 1 "ERROR: failed validation of new value 'true' for flag 'always_fail'" ""  gflags_unittest  --always_fail

run_test gflags_declare 0 "Hello gflags!" "" gflags_declare_test --message "Hello gflags!"

if [ $GLOBAL_FAIL -ne 0 ] ; then
    RETURN_CODE=1
else
    RETURN_CODE=0
fi
TOTAL_TESTS=$(($GLOBAL_PASS + $GLOBAL_FAIL))

echo "${GLOBAL_PASS}/${TOTAL_TESTS} passed. See '$LOGFILE'"
rm "$TMPFILE"

exit $RETURN_CODE
