#!/bin/sh
set -eu

assert_njs()
{
    engine=njs

    while getopts 'n:' opt; do
        case "$opt" in
            n) engine=$OPTARG ;;
            *) return 2 ;;
        esac
    done
    shift $((OPTIND - 1))
    OPTIND=1

    expression=$1
    expected=$2

    case "$engine" in
        njs|QuickJS) ;;
        *)
            echo "assert_njs: invalid engine: $engine" >&2
            return 2
            ;;
    esac

    if [ "$engine" = "njs" ]; then
        cmd='njs'
    else
        cmd="njs -n $engine"
    fi

    output=$(
        printf '%s\n' "$expression" |
        script -qec "$cmd" /dev/null |
        tr -d '\r'
    )

    if printf '%s\n' "$output" | grep -Fqx "$expected"; then
        echo "PASS [$engine]: $expression"
    else
        echo "FAIL [$engine]: $expression" >&2
        echo "expected: $expected" >&2
        echo "output:" >&2
        printf '%s\n' "$output" >&2
        return 1
    fi
}

assert_njs '1 + 2' '3'
assert_njs -n QuickJS '1 + 2' '3'
