blob: 3b8f7ba481645fd893ff1af9089decec43ace707 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#!/bin/bash
#
# Copyright (C) 2026 Danilo M. <danix@danix.xyz>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# The one runnable check for statusctl. It points XDG_RUNTIME_DIR at a
# temporary directory, so nothing here touches the live modes.
#
# Usage: ./test-statusctl.sh (exit 0 = all passed)
set -u
here="$(cd "$(dirname "$0")" && pwd)"
ctl="$here/statusctl"
tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT
export XDG_RUNTIME_DIR="$tmp"
pass=0
fail=0
check() {
local label="$1" want="$2" got="$3"
if [[ "$want" == "$got" ]]; then
printf 'ok %s\n' "$label"
pass=$((pass + 1))
else
printf 'FAIL %s: want %q, got %q\n' "$label" "$want" "$got"
fail=$((fail + 1))
fi
}
# A mode with no file reads as off.
check "missing file reads 0" "0" "$("$ctl" dnd get)"
# set writes the file and get reads it back.
"$ctl" dnd set 1
check "set 1 writes the file" "1" "$(cat "$tmp/status.dnd" | tr -d '[:space:]')"
check "get after set 1" "1" "$("$ctl" dnd get)"
# toggle flips it.
"$ctl" dnd toggle
check "toggle from 1" "0" "$("$ctl" dnd get)"
"$ctl" dnd toggle
check "toggle from 0" "1" "$("$ctl" dnd get)"
# set 0 writes rather than removing, so a reader sees an explicit off.
"$ctl" dnd set 0
check "set 0 writes the file" "0" "$("$ctl" dnd get)"
# An unknown mode is an error, not a silent success: a typo must not look
# like a mode that is off.
"$ctl" nosuch get >/dev/null 2>&1
check "unknown mode exits non-zero" "1" "$?"
# watch prints a line on change, and the class reflects the value. The
# atomic write arrives as a rename, which is why the watch needs moved_to.
out="$tmp/watch.out"
"$ctl" presentation watch > "$out" 2>/dev/null &
watcher=$!
sleep 0.3
"$ctl" presentation set 1
sleep 0.5
kill "$watcher" 2>/dev/null
wait "$watcher" 2>/dev/null
check "watch reports activated" "1" "$(grep -c '"class": *"activated"' "$out")"
# A missing file is reported as down, distinct from a mode that is off.
rm -f "$tmp/status.presentation"
out2="$tmp/watch2.out"
"$ctl" presentation watch > "$out2" 2>/dev/null &
watcher2=$!
sleep 0.5
kill "$watcher2" 2>/dev/null
wait "$watcher2" 2>/dev/null
check "watch reports down when absent" "1" "$(grep -c '"class": *"down"' "$out2")"
printf '\n%d passed, %d failed\n' "$pass" "$fail"
[[ "$fail" -eq 0 ]]
|