#!/bin/sh set -u . aux/utils.sh . tests/lib.sh assert_usage() { if ! grep -Fq 'Usage' "$1"; then echo 'Expected to find "Usage" text, it was missing:' >&2 cat "$ERR" >&2 exit 1 fi } test_unsupported_long_flags() { testing 'unsupported long flags' OUT="$(mktemp)" ERR="$(mktemp)" ./remembering --unknown-long-flag 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" test_ok } test_missing_required_flags() { testing 'missing required flags' OUT="$(mktemp)" ERR="$(mktemp)" ./remembering -a something -b else 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" test_ok } test_single_required_flag() { testing 'single required flag' OUT="$(mktemp)" ERR="$(mktemp)" ./remembering -p valid-test-profile 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" OUT="$(mktemp)" ERR="$(mktemp)" ./remembering -c 'head -n' 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" test_ok } test_flags_without_required_argument() { testing 'flags without required argument' OUT="$(mktemp)" ERR="$(mktemp)" ./remembering -pc 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" OUT="$(mktemp)" ERR="$(mktemp)" ./remembering -cp 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" OUT="$(mktemp)" ERR="$(mktemp)" ./remembering -p -c 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" test_ok } test_valid_options() { testing 'valid options' OUT="$(mktemp)" ERR="$(mktemp)" printf 'a\nb\nc\n' | \ ./remembering \ -p "always-unique-$(uuid)" \ -c 'head -n1' \ 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_stdout 'a' test_ok } test_help_flags() { testing 'help flags' OUT="$(mktemp)" ERR="$(mktemp)" ./remembering -h 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_usage "$OUT" OUT="$(mktemp)" ERR="$(mktemp)" ./remembering --help 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_usage "$OUT" test_ok } test_version_flags() { testing 'version flags' OUT="$(mktemp)" ERR="$(mktemp)" ./remembering -V 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr if ! grep -Eq '^remembering-.+$' "$OUT"; then printf '\nERR: Bad STDOUT (%s)\n\nexpected: %s\ngot: %s\n' \ "$OUT" '^remembering-.+$' "$(cat "$OUT")" >&2 exit 1 fi test_ok } test_unsupported_long_flags test_missing_required_flags test_missing_required_flags test_single_required_flag test_flags_without_required_argument test_valid_options test_help_flags test_version_flags