diff options
| author | EuAndreh <eu@euandre.org> | 2026-06-12 09:19:28 -0300 |
|---|---|---|
| committer | EuAndreh <eu@euandre.org> | 2026-06-12 09:19:28 -0300 |
| commit | 46fd0362bce11d709e5efe6d540358533985d363 (patch) | |
| tree | f77d2ed33c4f3fb6e85353e436efca4e19028f73 /tests/cli-opts.sh | |
| parent | rm .tdrc COPYING (diff) | |
| download | remembering-46fd0362bce11d709e5efe6d540358533985d363.tar.gz remembering-46fd0362bce11d709e5efe6d540358533985d363.tar.xz | |
Rewrite remembering in Go
The shell pipeline (sed | sort | tee | awk | sort | cut | "$@"
plus the cut | uniq | awk profile rewrite) becomes a single static
binary with the same observable behaviour, pinned by the original
ranking.sh, signals.sh and cli-opts.sh suites, now aimed at
remembering.bin:
- the profile keeps the exact on-disk format, COUNT profile TEXT,
byte-sorted with new picks appended at 1 and offered-but-never-
picked entries persisted at 0;
- the menu stays count-descending with byte-order ties, stdin
alone defines what is offered, and duplicate profile lines sum
for ranking but collapse to the highest count on rewrite, as
sort | uniq -f1 did;
- the wrapped command's exit status is forwarded as-is (128+sig
for signal deaths), its stderr passes through, and an empty pick
learns nothing;
- the profile rewrite stays atomic via .tmp plus rename.
Per the house CLI conventions, -h/-V/--help/--version are gone
(the manpage is the documentation; bad options print the usage on
stderr and exit 2), and getopts-style attached option arguments
(-pNAME) are not accepted any more --- no script in the wild used
them.
The project layout follows rot: raw go tool compile/link Makefile,
mkdeps.sh-generated deps.mk, white-box unit suite, fuzz target
over the profile parse/serialize roundtrip, functional pick
roundtrip, a 1M-line ranking benchmark, and a single English
asciidoc manpage absorbing the old .5 page; the po4a/aux release
machinery goes away.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Diffstat (limited to 'tests/cli-opts.sh')
| -rwxr-xr-x | tests/cli-opts.sh | 106 |
1 files changed, 57 insertions, 49 deletions
diff --git a/tests/cli-opts.sh b/tests/cli-opts.sh index 83a5bfc..0ce4eef 100755 --- a/tests/cli-opts.sh +++ b/tests/cli-opts.sh @@ -3,6 +3,8 @@ set -u . tests/lib.sh +REMEMBERING="$PWD/remembering.bin" + export XDG_DATA_HOME="$PWD/tests/test-profiles" test_unsupported_long_flags() { @@ -10,32 +12,40 @@ test_unsupported_long_flags() { N="$LINENO" OUT="$(mkstemp)" ERR="$(mkstemp)" - ./src/remembering --unknown-long-flag 1>"$OUT" 2>"$ERR" + "$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' +test_unknown_flags() { + testing 'unknown flags' N="$LINENO" OUT="$(mkstemp)" ERR="$(mkstemp)" - ./src/remembering -a something -b else 1>"$OUT" 2>"$ERR" + "$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' +test_missing_command() { + testing 'missing command' + + N="$LINENO" + OUT="$(mkstemp)" + ERR="$(mkstemp)" + "$REMEMBERING" 1>"$OUT" 2>"$ERR" + STATUS=$? + assert_status 2 + assert_usage "$ERR" N="$LINENO" OUT="$(mkstemp)" ERR="$(mkstemp)" - ./src/remembering -p valid-test-profile 1>"$OUT" 2>"$ERR" + "$REMEMBERING" -p valid-test-profile 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" @@ -43,7 +53,7 @@ test_single_required_flag() { N="$LINENO" OUT="$(mkstemp)" ERR="$(mkstemp)" - ./src/remembering -c 'head -n' 1>"$OUT" 2>"$ERR" + "$REMEMBERING" -c 'head -n' 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" @@ -57,7 +67,7 @@ test_flags_without_required_argument() { N="$LINENO" OUT="$(mkstemp)" ERR="$(mkstemp)" - ./src/remembering -pc 1>"$OUT" 2>"$ERR" + "$REMEMBERING" -pc 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" @@ -65,7 +75,7 @@ test_flags_without_required_argument() { N="$LINENO" OUT="$(mkstemp)" ERR="$(mkstemp)" - ./src/remembering -cp 1>"$OUT" 2>"$ERR" + "$REMEMBERING" -cp 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" @@ -73,7 +83,7 @@ test_flags_without_required_argument() { N="$LINENO" OUT="$(mkstemp)" ERR="$(mkstemp)" - ./src/remembering -p -c 1>"$OUT" 2>"$ERR" + "$REMEMBERING" -p -c 1>"$OUT" 2>"$ERR" STATUS=$? assert_status 2 assert_usage "$ERR" @@ -87,7 +97,7 @@ test_valid_options() { OUT="$(mkstemp)" ERR="$(mkstemp)" printf 'a\nb\nc\n' | \ - ./src/remembering \ + "$REMEMBERING" \ -p "always-unique-$(uuid)" \ -- head -n1 \ 1>"$OUT" 2>"$ERR" @@ -98,69 +108,68 @@ test_valid_options() { test_ok } -test_help_flags() { - testing 'help flags' +test_rejected_help_flags() { + testing 'help flags are rejected' N="$LINENO" OUT="$(mkstemp)" ERR="$(mkstemp)" - ./src/remembering -h 1>"$OUT" 2>"$ERR" + "$REMEMBERING" -h 1>"$OUT" 2>"$ERR" STATUS=$? - assert_status 0 - assert_empty_stderr - assert_usage "$OUT" + assert_status 2 + assert_empty_stdout + assert_usage "$ERR" N="$LINENO" OUT="$(mkstemp)" ERR="$(mkstemp)" - ./src/remembering --help 1>"$OUT" 2>"$ERR" + "$REMEMBERING" --help 1>"$OUT" 2>"$ERR" STATUS=$? - assert_status 0 - assert_empty_stderr - assert_usage "$OUT" + assert_status 2 + assert_empty_stdout + assert_usage "$ERR" N="$LINENO" OUT="$(mkstemp)" ERR="$(mkstemp)" - ./src/remembering -p profile -c command --help 1>"$OUT" 2>"$ERR" + "$REMEMBERING" -p profile --help -- head -n1 1>"$OUT" 2>"$ERR" STATUS=$? - assert_status 0 - assert_empty_stderr - assert_usage "$OUT" + assert_status 2 + assert_empty_stdout + assert_usage "$ERR" N="$LINENO" OUT="$(mkstemp)" ERR="$(mkstemp)" - ./src/remembering --help -p profile -c command 1>"$OUT" 2>"$ERR" + "$REMEMBERING" --help -p profile -- head -n1 1>"$OUT" 2>"$ERR" STATUS=$? - assert_status 0 - assert_empty_stderr - assert_usage "$OUT" + assert_status 2 + assert_empty_stdout + assert_usage "$ERR" test_ok } -test_version_flags() { - testing 'version flags' - REGEX='^remembering [0-9\.]+ [0-9-]+$' +test_rejected_version_flags() { + testing 'version flags are rejected' N="$LINENO" OUT="$(mkstemp)" ERR="$(mkstemp)" - ./src/remembering -V 1>"$OUT" 2>"$ERR" + "$REMEMBERING" -V 1>"$OUT" 2>"$ERR" STATUS=$? - assert_status 0 - assert_empty_stderr - assert_grep_stdout "$REGEX" + assert_status 2 + assert_empty_stdout + assert_usage "$ERR" N="$LINENO" OUT="$(mkstemp)" ERR="$(mkstemp)" - ./src/remembering --version 1>"$OUT" 2>"$ERR" + "$REMEMBERING" --version 1>"$OUT" 2>"$ERR" STATUS=$? - assert_status 0 - assert_empty_stderr - assert_grep_stdout "$REGEX" + assert_status 2 + assert_empty_stdout + assert_usage "$ERR" test_ok } @@ -174,7 +183,7 @@ test_environment_variables_and_precedence() { PROFILE='environment-variables-xdg' XDG="$PWD/tests/test-profiles/xdg-test-$(uuid)" printf 'a\n' | \ - XDG_DATA_HOME="$XDG" ./src/remembering \ + XDG_DATA_HOME="$XDG" "$REMEMBERING" \ -p "$PROFILE" \ -- head -n1 \ 1>"$OUT" 2>"$ERR" @@ -190,7 +199,7 @@ test_environment_variables_and_precedence() { PROFILE='environment-variables-home' HHOME="$PWD/tests/test-profiles/home-test-$(uuid)" printf 'b\n' | \ - HOME="$HHOME" XDG_DATA_HOME='' ./src/remembering \ + HOME="$HHOME" XDG_DATA_HOME='' "$REMEMBERING" \ -p "$PROFILE" \ -- head -n1 \ 1>"$OUT" 2>"$ERR" @@ -207,7 +216,7 @@ test_environment_variables_and_precedence() { 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 \ + HOME="$HHOME" XDG_DATA_HOME="$XDG" "$REMEMBERING" \ -p "$PROFILE" \ -- head -n1 \ 1>"$OUT" 2>"$ERR" @@ -227,11 +236,10 @@ test_environment_variables_and_precedence() { } test_unsupported_long_flags -test_missing_required_flags -test_missing_required_flags -test_single_required_flag +test_unknown_flags +test_missing_command test_flags_without_required_argument test_valid_options -test_help_flags -test_version_flags +test_rejected_help_flags +test_rejected_version_flags test_environment_variables_and_precedence |
