#!/bin/bash set -euo pipefail ROOT=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd) CLI="$ROOT/bin/omarchy" TMPDIR="" export PATH="$ROOT/bin:$PATH" pass() { printf 'ok - %s\n' "$1" } fail() { printf 'not ok - %s\n' "$1" >&2 exit 1 } assert_output_contains() { local description="$1" local output="$2" local expected="$3" if [[ $output != *"$expected"* ]]; then printf 'Expected output to contain: %s\n' "$expected" >&2 printf 'Actual output:\n%s\n' "$output" >&2 fail "$description" fi pass "$description" } cleanup() { [[ -n $TMPDIR && -d $TMPDIR ]] && rm -rf "$TMPDIR" } trap cleanup EXIT output=$("$CLI" --help) assert_output_contains "main help renders" "$output" "Omarchy command center" assert_output_contains "main help includes hardware group" "$output" "hw" assert_output_contains "main help includes package group" "$output" "pkg" if grep -Eq '^ [a-z0-9-]+[[:space:]].*\([0-9]+\)$' <<<"$output"; then fail "main help does not show group counts" fi pass "main help does not show group counts" output=$("$CLI" commands) assert_output_contains "commands lists documented commands" "$output" "omarchy theme set " "$CLI" commands --json | jq -e '.ok == true and (.commands | length >= 200)' >/dev/null pass "commands --json is valid JSON with full bin coverage" "$CLI" commands --json | jq -e 'all(.commands[]; .summary != "undocumented")' >/dev/null pass "all included commands have summaries" "$CLI" commands --json | jq -e 'all(.commands[]; has("binary") and has("filename_route") and has("routes") and (has("legacy") | not) and (has("usage") | not) and (has("visibility") | not) and (has("mutates") | not) and (has("interactive") | not))' >/dev/null pass "JSON uses binary/routes and omits legacy/usage/extra metadata" "$CLI" commands --check >/dev/null pass "commands --check passes" "$CLI" commands --all >/dev/null pass "commands --all does not crash" "$CLI" commands --all --json | jq -e '.commands[] | select(.route == "omarchy hyprland window gaps toggle" and .summary != "undocumented")' >/dev/null pass "fallback commands are inferred and documented" "$CLI" commands --all --json | jq -e '.commands[] | select(.route == "omarchy dev benchmark")' >/dev/null pass "benchmark command is discoverable in all commands" "$CLI" commands --json | jq -e '.commands[] | select(.binary == "omarchy-pkg-add" and .route == "omarchy pkg add" and .filename_route == "omarchy pkg add" and (.routes | index("omarchy pkg add")))' >/dev/null pass "JSON exposes direct pkg add route" "$CLI" commands --json | jq -e '.commands[] | select(.binary == "omarchy-refresh-pacman" and .requires_sudo == true)' >/dev/null pass "sudo metadata marks sudo commands" output=$("$CLI" theme --help) assert_output_contains "group help renders" "$output" "Theme commands" output=$("$CLI" install --help) assert_output_contains "install group help renders" "$output" "Install commands" assert_output_contains "install group includes browser route" "$output" "omarchy install browser" output=$("$CLI" install) assert_output_contains "bare group renders help instead of picker" "$output" "Install commands" assert_output_contains "bare group includes browser route" "$output" "omarchy install browser" output=$("$CLI" toggle) assert_output_contains "bare root command with children renders help" "$output" "Toggle commands" assert_output_contains "bare toggle help includes child route" "$output" "omarchy toggle waybar" output=$("$CLI" pkg --help) assert_output_contains "package group includes pkg add fallback route" "$output" "omarchy pkg add " output=$("$CLI" restart --help) assert_output_contains "restart group includes inferred commands" "$output" "omarchy restart btop" assert_output_contains "restart group includes all restart commands" "$output" "omarchy restart wifi" output=$("$CLI" hw --help) assert_output_contains "hardware group help renders" "$output" "omarchy hw asus rog" assert_output_contains "hardware group includes touchpad" "$output" "omarchy hw touchpad" output=$("$CLI" hw asus) assert_output_contains "partial hardware prefix renders matching commands" "$output" "omarchy hw asus rog" assert_output_contains "partial hardware prefix includes nested match" "$output" "omarchy hw asus zenbook ux5406aa" output=$("$CLI" menu --help) assert_output_contains "menu group includes share fallback route" "$output" "omarchy menu share" output=$("$CLI" share) assert_output_contains "bare required-arg alias renders CLI help" "$output" "Usage:" assert_output_contains "bare share help uses canonical route" "$output" "omarchy share [path...]" output=$("$CLI" menu share) assert_output_contains "bare required-arg filename route renders CLI help" "$output" "omarchy share [path...]" output=$("$CLI" branch set) assert_output_contains "bare required-choice route renders CLI help" "$output" "omarchy branch set " CLI="$CLI" python3 <<'PY' import json import os import subprocess import sys cli = os.environ['CLI'] commands = json.loads(subprocess.check_output([cli, 'commands', '--json'], text=True))['commands'] by_group = {} for command in commands: binary = command['binary'] stem = binary.removeprefix('omarchy-') group = stem.split('-', 1)[0] filename_route = 'omarchy ' + stem.replace('-', ' ') by_group.setdefault(group, []).append((binary, filename_route, command['route'])) missing = [] for group, rows in sorted(by_group.items()): proc = subprocess.run([cli, group, '--help'], text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) output = proc.stdout + proc.stderr if proc.returncode != 0: missing.append((group, '', f'exit {proc.returncode}')) continue for binary, filename_route, canonical_route in rows: if filename_route not in output and canonical_route not in output and binary not in output: missing.append((group, binary, filename_route)) if missing: for row in missing: print('\t'.join(row), file=sys.stderr) sys.exit(1) PY pass "every filename-derived group help represents its bins" output=$(timeout 5 "$CLI" theme set --help) assert_output_contains "command help renders without executing" "$output" "Binary:" assert_output_contains "theme set help names binary" "$output" "omarchy-theme-set" output=$(timeout 5 "$CLI" update --help) assert_output_contains "mutating command help does not execute target" "$output" "omarchy-update" assert_output_contains "root command help shows related child commands" "$output" "omarchy update perform" output=$("$CLI" screenshot --help) assert_output_contains "root alias resolves to command help" "$output" "omarchy-capture-screenshot" "$CLI" commands --json | jq -e '.commands[] | select(.binary == "omarchy-capture-screenshot") | .aliases | index("omarchy screenshot")' >/dev/null pass "aliases are included in JSON metadata" output=$("$CLI" pkg add --help) assert_output_contains "pkg add help resolves" "$output" "omarchy-pkg-add" assert_output_contains "pkg add help shows direct route" "$output" "omarchy pkg add " output=$("$CLI" system reboot --help) assert_output_contains "system command help is safe" "$output" "omarchy-system-reboot" output=$("$CLI" dev benchmark --repeat=1) assert_output_contains "benchmark command runs" "$output" "Omarchy CLI benchmark" "$CLI" theme list >/dev/null pass "safe dispatch works for theme list" "$CLI" theme current >/dev/null pass "safe dispatch works for theme current" "$CLI" font list >/dev/null pass "safe dispatch works for font list" "$CLI" font current >/dev/null pass "safe dispatch works for font current" for binary in \ omarchy-update \ omarchy-theme-set \ omarchy-capture-screenshot \ omarchy-system-reboot \ omarchy-pkg-add; do [[ -x $ROOT/bin/$binary ]] || fail "binary is executable: $binary" pass "binary is executable: $binary" done while IFS= read -r binary_path; do header=$(awk ' NR == 1 && /^#!/ { next } /^[[:space:]]*$/ { if (seen) print; next } /^[[:space:]]*#/ { seen=1; print; next } { exit } ' "$binary_path") grep -q '^# omarchy:summary=' <<<"$header" || fail "metadata summary is present: $binary_path" ! grep -q '^# omarchy:binary=' <<<"$header" || fail "metadata does not repeat inferred binary: $binary_path" ! grep -q '^# omarchy:args=$' <<<"$header" || fail "metadata does not include empty args: $binary_path" ! grep -Eq '^# omarchy:(legacy|usage|visibility|mutates|interactive)=' <<<"$header" || fail "metadata avoids removed fields: $binary_path" ! grep -Eq '^# omarchy:requires-sudo=false$' <<<"$header" || fail "metadata omits false booleans: $binary_path" done < <(find "$ROOT/bin" -maxdepth 1 -type f -executable -name 'omarchy-*' | sort) pass "all executable bins have slim self-documenting metadata" TMPDIR=$(mktemp -d) ln -s "$CLI" "$TMPDIR/omarchy" { printf '#!/bin/bash\n\n' printf '# ordinary comments are fine\n' printf '# omarchy:this malformed line should be ignored\n' printf '# omarchy:group=weird\n' printf '# omarchy:name=test\n' printf '# omarchy:summary=Survives malformed metadata comments\n' printf '# omarchy:made-up=value\n' printf 'echo weird-ok\n' } >"$TMPDIR/omarchy-weird-test" chmod +x "$TMPDIR/omarchy-weird-test" { printf '#!/bin/bash\n\n' printf '# a partial metadata header should not destroy fallback routing\n' printf '# omarchy:summary=Partial metadata keeps inferred route\n' printf '# omarchy:made-up=value\n' printf 'echo partial-ok\n' } >"$TMPDIR/omarchy-partial-meta-test" chmod +x "$TMPDIR/omarchy-partial-meta-test" { printf '#!/bin/bash\n\n' printf 'echo body-metadata-ok\n' printf '# omarchy:group=wrong\n' printf '# omarchy:name=wrong\n' } >"$TMPDIR/omarchy-body-metadata-test" chmod +x "$TMPDIR/omarchy-body-metadata-test" "$TMPDIR/omarchy" commands --all --json | jq -e '.commands[] | select(.route == "omarchy weird test" and .summary == "Survives malformed metadata comments")' >/dev/null pass "unknown metadata values are non-fatal" "$TMPDIR/omarchy" commands --all --json | jq -e '.commands[] | select(.route == "omarchy partial meta test" and .summary == "Partial metadata keeps inferred route")' >/dev/null pass "partial metadata keeps inferred fallback route" "$TMPDIR/omarchy" commands --all --json | jq -e '.commands[] | select(.route == "omarchy body metadata test" and .summary == "Run the body metadata test command")' >/dev/null pass "metadata-looking comments after script body are ignored" output=$("$TMPDIR/omarchy" weird test) assert_output_contains "temporary metadata command dispatches" "$output" "weird-ok" output=$("$TMPDIR/omarchy" partial meta test) assert_output_contains "partial metadata command dispatches" "$output" "partial-ok" output=$("$TMPDIR/omarchy" body metadata test) assert_output_contains "body metadata command dispatches by filename" "$output" "body-metadata-ok"