#!/usr/bin/env bash
cd "${0%/*}" || exit 1
. ../run-tests

testArgs() {
    local args
    # shellcheck disable=SC2031
    args=$(declare -p MO_FUNCTION_ARGS)

    # The output from declare -p could look like these
    #     declare -a MO_FUNCTION_ARGS=([0]="one")
    #     declare -ax MO_FUNCTION_ARGS='([0]="one")'
    # Trim leading declare statement and variable name
    args="${args#*=}"

    # If there are any quotes, remove them. The function arguments will always
    # be an array.
    if [[ "${args:0:1}" == "'" ]]; then
        args=${args#\'}
        args=${args%\'}
    fi

    echo -n "$args"
}
template() {
    cat <<EOF
No args: {{testArgs}} - done
One arg: {{testArgs 'one'}} - done
Multiple arguments: {{testArgs 'aa' 'bb' 'cc' 'x' "" '!' '{[_.|' }} - done
Evil: {{testArgs bla; cat /etc/issue}} - done
EOF
}
expected() {
    cat <<EOF
No args: () - done
One arg: ([0]="one") - done
Multiple arguments: ([0]="aa" [1]="bb" [2]="cc" [3]="x" [4]="" [5]="!" [6]="{[_.|") - done
Evil: ([0]="" [1]="" [2]="") - done
EOF
}

runTest
