mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-07-04 16:43:05 +02:00
- music_parallelism.sh + thesis_work_tracker.sh: tighter state-output and error paths; expanded regression tests. - hosts-file-monitor.sh + shutdown-timer-monitor.sh: harden against partial failures, matching new test branches. - i3blocks persist_common.sh helper improved (consumed by activitywatch / warp status blocks). - setup_midnight_shutdown.sh + thesis_work_status.sh: state parsing tuned. - pacman_blocked_keywords.txt: drop one obsolete entry. - New test_thesis_work_status.sh regression script. All six bash regression tests pass.
89 lines
2.3 KiB
Bash
Executable File
89 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Regression tests for thesis_work_status.sh state-parsing helper behavior.
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
|
|
REPO_DIR=$(cd -- "$SCRIPT_DIR/.." && pwd)
|
|
TARGET_SCRIPT="$REPO_DIR/scripts/digital_wellbeing/thesis_work_status.sh"
|
|
|
|
fail() {
|
|
printf 'FAIL: %s\n' "$1" >&2
|
|
exit 1
|
|
}
|
|
|
|
assert_equals() {
|
|
local expected="$1"
|
|
local actual="$2"
|
|
local context="$3"
|
|
if [[ "$expected" != "$actual" ]]; then
|
|
fail "$context (expected: '$expected', actual: '$actual')"
|
|
fi
|
|
}
|
|
|
|
TMP_DIR=$(mktemp -d)
|
|
cleanup() {
|
|
rm -rf "$TMP_DIR"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
WORKTREE="$TMP_DIR/worktree"
|
|
BIN_DIR="$TMP_DIR/bin"
|
|
mkdir -p "$WORKTREE/scripts/digital_wellbeing" "$BIN_DIR"
|
|
cp "$TARGET_SCRIPT" "$WORKTREE/scripts/digital_wellbeing/thesis_work_status.sh"
|
|
|
|
# sudo stub — passes through all commands
|
|
cat >"$BIN_DIR/sudo" <<'EOF'
|
|
#!/bin/bash
|
|
"$@"
|
|
EOF
|
|
chmod +x "$BIN_DIR/sudo"
|
|
|
|
# chattr stub
|
|
cat >"$BIN_DIR/chattr" <<'EOF'
|
|
#!/bin/bash
|
|
exit 0
|
|
EOF
|
|
chmod +x "$BIN_DIR/chattr"
|
|
|
|
# grep stub — must NOT be called by state parsing
|
|
cat >"$BIN_DIR/grep" <<'EOF'
|
|
#!/bin/bash
|
|
printf 'grep should not be called\n' >&2
|
|
exit 1
|
|
EOF
|
|
chmod +x "$BIN_DIR/grep"
|
|
|
|
# cut stub — must NOT be called by state parsing
|
|
cat >"$BIN_DIR/cut" <<'EOF'
|
|
#!/bin/bash
|
|
printf 'cut should not be called\n' >&2
|
|
exit 1
|
|
EOF
|
|
chmod +x "$BIN_DIR/cut"
|
|
|
|
STATE_PATH="$TMP_DIR/work-time.state"
|
|
cat >"$STATE_PATH" <<'EOF'
|
|
# Thesis Work Tracker State File
|
|
TOTAL_WORK_SECONDS=3600
|
|
LAST_UPDATE_TIMESTAMP=1715400000
|
|
STEAM_ACCESS_GRANTED=1
|
|
LAST_WORK_SESSION_START=42
|
|
CURRENT_SESSION_SECONDS=90
|
|
EOF
|
|
|
|
printf 'Checking state parsing does not depend on grep/cut...\n'
|
|
# THESIS_STATUS_SKIP_SUDO=1 prevents exec sudo re-exec
|
|
# THESIS_STATUS_SKIP_OUTPUT=1 prevents display output; script returns after parsing
|
|
parsed_vals=$(PATH="$BIN_DIR:$PATH" THESIS_STATUS_SKIP_SUDO=1 THESIS_STATUS_SKIP_OUTPUT=1 \
|
|
bash -lc \
|
|
"STATE_FILE='$STATE_PATH'; \
|
|
source '$WORKTREE/scripts/digital_wellbeing/thesis_work_status.sh'; \
|
|
printf '%s|%s|%s|%s' \"\$TOTAL_WORK_SECONDS\" \"\$STEAM_ACCESS_GRANTED\" \"\$CURRENT_SESSION_SECONDS\" \"\$LAST_WORK_SESSION_START\"" \
|
|
2>/dev/null)
|
|
|
|
assert_equals '3600|1|90|42' "$parsed_vals" \
|
|
'thesis_work_status state parsing should work without grep/cut dependency'
|
|
|
|
printf 'thesis_work_status.sh regression checks passed.\n'
|