From f2f2713e6b9c746a3089f0e83e265b14f15917ac Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 24 Jan 2021 00:53:32 -0300 Subject: Add tests/cli-opts.sh tests --- .gitignore | 1 + Makefile | 1 + remembering | 4 +-- tests/cli-opts.sh | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 108 insertions(+), 2 deletions(-) create mode 100755 tests/cli-opts.sh diff --git a/.gitignore b/.gitignore index 87174b6..e456bd1 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /public/ +/tests/test-profiles/ diff --git a/Makefile b/Makefile index 5e26a5b..71cb676 100644 --- a/Makefile +++ b/Makefile @@ -28,6 +28,7 @@ uninstall: check: sh tests/all.sh + sh tests/cli-opts.sh if [ -d .git ]; then \ echo 'Assuming Git repository, running development checks.'; \ diff --git a/remembering b/remembering index 9210309..b31924e 100755 --- a/remembering +++ b/remembering @@ -2,11 +2,11 @@ set -eu usage() { - printf 'Usage: %s: -p PROFILE -c "COMMAND"\n' "$0" + printf 'Usage: %s: -p PROFILE -c "COMMAND"\n' "$0" >&2 } missing() { - printf 'Missing option: %s\n' "$1" + printf 'Missing option: %s\n' "$1" >&2 } COMMANDFLAG= diff --git a/tests/cli-opts.sh b/tests/cli-opts.sh new file mode 100755 index 0000000..a6be446 --- /dev/null +++ b/tests/cli-opts.sh @@ -0,0 +1,104 @@ +#!/bin/sh +set -u + +export XDG_DATA_HOME="$PWD/tests/test-profiles" +OUT= +ERR= +STATUS= + +assert_status() { + if [ "$STATUS" != "$1" ]; then + echo "Unexpected status: $STATUS, expected: $1" + exit 1 + fi +} + +assert_usage() { + if ! grep -Fq 'Usage' "$ERR"; then + echo 'Expected to find "Usage" text, it was missing. STDERR was:' + cat "$ERR" + exit 1 + fi +} + +test_unsupported_long_flags() { + OUT="$(mktemp)" + ERR="$(mktemp)" + sh remembering --unknown-long-flag 1>"$OUT" 2>"$ERR" + STATUS=$? + assert_status 2 + assert_usage +} + +test_missing_required_flags() { + OUT="$(mktemp)" + ERR="$(mktemp)" + sh remembering -a something -b else 1>"$OUT" 2>"$ERR" + STATUS=$? + assert_status 2 + assert_usage +} + +test_single_required_flag() { + OUT="$(mktemp)" + ERR="$(mktemp)" + sh remembering -p valid-test-profile 1>"$OUT" 2>"$ERR" + STATUS=$? + assert_status 2 + assert_usage + + OUT="$(mktemp)" + ERR="$(mktemp)" + sh remembering -c 'head -n' 1>"$OUT" 2>"$ERR" + STATUS=$? + assert_status 2 + assert_usage +} + +test_flags_without_required_argument() { + OUT="$(mktemp)" + ERR="$(mktemp)" + sh remembering -pc 1>"$OUT" 2>"$ERR" + STATUS=$? + assert_status 2 + assert_usage + + OUT="$(mktemp)" + ERR="$(mktemp)" + sh remembering -cp 1>"$OUT" 2>"$ERR" + STATUS=$? + assert_status 2 + assert_usage + + OUT="$(mktemp)" + ERR="$(mktemp)" + sh remembering -p -c 1>"$OUT" 2>"$ERR" + STATUS=$? + assert_status 2 + assert_usage +} + +test_valid_options() { + OUT="$(mktemp)" + ERR="$(mktemp)" + printf 'a\nb\nc\n' | sh remembering -p "always-unique-$(uuidgen)" -c 'head -n1' 1>"$OUT" 2>"$ERR" + STATUS=$? + assert_status 0 + if [ "$(cat "$OUT")" != 'a' ]; then + echo "Expected STDOUT ($OUT) to be 'a', but was:" + cat "$OUT" + exit 1 + fi + if [ "$(cat "$ERR")" != '' ]; then + echo "Expected STDERR ($ERR) to be empty, but has content:" + cat "$ERR" + exit 1 + fi +} + +test_unsupported_long_flags +test_missing_required_flags +test_missing_required_flags +test_single_required_flag +test_flags_without_required_argument +test_valid_options -- cgit v1.2.3