#!/bin/bash
#shellcheck disable=SC2016,SC1090

. "$TF_DIR/include/subtest.sh"
. "$TF_DIR/include/tools.sh"

. "$(sfpath)" || tf_exit_error "failed to init shellfu"
shellfu import jat  || tf_exit_error "failed to import jat"

tf_enum_subtests() {
    echo ylog_pass
    echo ylog_fail
    echo ylog_both
}

rndtoken() {
    head -c 100 /dev/urandom | md5sum | head -c 7
}

mkhacks() {
    echo '__JAT__SELF_VERSION=0.0.0+TESTED_VERSION'
    echo '__JAT__DETERMINISTIC=true'
    echo ''
}

mkhead() {
    echo '#!/bin/bash'
    echo ''
    echo '. "$(sfpath)" || exit 3'
    echo 'shellfu import jat'
    echo ''
    mkhacks
    echo ''
    echo "JAT__DIR=$PWD/result/$name/dir"
    echo "JAT__YLOG=$PWD/result/$name/ylog"
    echo ''
    echo 'jat__sinit'
    echo ''
}

mkbody() {
    #shellcheck disable=SC1003
    case $name in
        ylog_pass)
            echo '    jat__pstartt'
            echo '        jat__cmd -h "true is true" \'
            echo '            true'
            echo '        jat__cmd -h "false is false" -S 1 \'
            echo '            false'
            echo '    jat__pend'
            ;;
        ylog_fail)
            echo '    jat__pstartt'
            echo '        jat__cmd -h "true is false" -S 1 \'
            echo '            true'
            echo '        jat__cmd -h "false is true" -S 0 \'
            echo '            false'
            echo '    jat__pend'
            ;;
        ylog_both)
            echo '    jat__pstartt'
            echo '        jat__cmd -h "true is true" -S 0 \'
            echo '            true'
            echo '        jat__cmd -h "false is true" -S 0 \'
            echo '            false'
            echo '    jat__pend'
            ;;
    esac
}

mktail() {
    echo ''
    echo 'jat__sfinish'
}

unveil() {
    #
    # Remove arbitrary values
    #
    sed "
        s/^jat_version: .*$/jat_version: JAT_VERSION/
    "
}

runtest() {
    mkdir -p "test" "result/$name"
    {
        mkhead
        mkbody
        mktail
    } > "test/$name.sh"
    bash "test/$name.sh" 2>/dev/null
    < "result/$name/ylog" unveil
}


tf_do_subtest() {
    local name=$1
    local o_out=oracle/$name.stdout
    local o_err=oracle/$name.stderr
    tf_testflt -n "$name" -E "$o_err" -O "$o_out" runtest
}

tf_do_subtests