summaryrefslogtreecommitdiff
path: root/tests/cli-opts.sh
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2026-06-12 09:19:28 -0300
committerEuAndreh <eu@euandre.org>2026-06-12 09:19:28 -0300
commit46fd0362bce11d709e5efe6d540358533985d363 (patch)
treef77d2ed33c4f3fb6e85353e436efca4e19028f73 /tests/cli-opts.sh
parentrm .tdrc COPYING (diff)
downloadremembering-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-xtests/cli-opts.sh106
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