#!/bin/sh
# Basic command-line interface checks.  They do not need a display or an
# audio device, and they catch accidental breakage of the options documented
# in the manual page.
#
# AI-assisted code, reviewed and tested by snd@debian.org.

set -eu

work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT HUP INT TERM

# Keep the test out of the user's real configuration directory.
export HOME="$work/home"
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_STATE_HOME="$HOME/.local/state"
mkdir -p "$HOME"

fail() {
    echo "FAIL: $*" >&2
    exit 1
}

echo "== schismtracker --version =="
version_output=$(schismtracker --version)
printf '%s\n' "$version_output"
printf '%s\n' "$version_output" | grep -q 'Schism Tracker' \
    || fail "--version did not identify Schism Tracker"

echo "== schismtracker --help =="
help_output=$(schismtracker --help)
printf '%s\n' "$help_output"
printf '%s\n' "$help_output" | grep -q -- '--headless' \
    || fail "--help does not document --headless"
printf '%s\n' "$help_output" | grep -q -- '--diskwrite' \
    || fail "--help does not document --diskwrite"

echo "== invalid option is rejected =="
if schismtracker --this-option-does-not-exist >/dev/null 2>&1; then
    fail "schismtracker accepted an unknown option"
fi

echo "== --headless without --diskwrite is rejected =="
if schismtracker --headless >/dev/null 2>&1; then
    fail "schismtracker accepted --headless without --diskwrite"
fi

echo "== --headless without an input song is rejected =="
if schismtracker --headless --diskwrite="$work/out.wav" >/dev/null 2>&1; then
    fail "schismtracker accepted --headless without an input song"
fi

echo "PASS: command-line interface"
