#!/bin/sh set -u . tests/tests-lib.sh export XDG_DATA_HOME="$PWD/tests/test-profiles" test_unsupported_long_flags() { testing 'unsupported long flags' N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" ./src/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' N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" ./src/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' N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" ./src/remembering -p valid-test-profile 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" ./src/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' N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" ./src/remembering -pc 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" ./src/remembering -cp 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" ./src/remembering -p -c 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" test_ok } test_valid_options() { testing 'valid options' N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" printf 'a\nb\nc\n' | \ ./src/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' N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" ./src/remembering -h 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_usage "$OUT" N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" ./src/remembering --help 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_usage "$OUT" N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" ./src/remembering -p profile -c command --help 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_usage "$OUT" N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" ./src/remembering --help -p profile -c command 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_usage "$OUT" test_ok } test_version_flags() { testing 'version flags' REGEX='^remembering-[0-9\.]+ [0-9-]+$' N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" ./src/remembering -V 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_grep_stdout "$REGEX" N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" ./src/remembering --version 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_grep_stdout "$REGEX" test_ok } test_environment_variables_and_precedence() { testing 'environment variables and precedence' N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" PROFILE='environment-variables-xdg' XDG="$PWD/tests/test-profiles/xdg-test-$(uuid)" printf 'a\n' | \ XDG_DATA_HOME="$XDG" ./src/remembering \ -p "$PROFILE" \ -c 'head -n1' \ 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_stdout 'a' assert_stream "\$XDG PROFILE" "$XDG/$PROFILE" '1:a' N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" PROFILE='environment-variables-home' HHOME="$PWD/tests/test-profiles/home-test-$(uuid)" printf 'b\n' | \ HOME="$HHOME" XDG_DATA_HOME='' ./src/remembering \ -p "$PROFILE" \ -c 'head -n1' \ 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_stdout 'b' assert_stream "\$HHOME PROFILE" "$HHOME/.local/share/remembering/$PROFILE" '1:b' N="$LINENO" OUT="$(mktemp)" ERR="$(mktemp)" PROFILE='xdg-supersedes-home' HHOME="$PWD/tests/test-profiles/home-wins-over-xdg-test-$(uuid)" XDG="$PWD/tests/test-profiles/xdg-wins-over-home-test-$(uuid)" printf 'c\n' | \ HOME="$HHOME" XDG_DATA_HOME="$XDG" ./src/remembering \ -p "$PROFILE" \ -c 'head -n1' \ 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 0 assert_empty_stderr assert_stdout 'c' assert_stream "\$XDG and \$HOME PROFILE" "$XDG/$PROFILE" '1:c' if [ -e "$HHOME/.local/share/remembering/$PROFILE" ]; then printf "\nERR: The file in \$HHOME/.local should't exist\n" >&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 test_environment_variables_and_precedence