blob: b5c9ff7f4e9178e03dd47079062e963cf95be795 (
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
#!/usr/bin/env bats
setup() {
SCRIPT_DIR="$(cd "$BATS_TEST_DIRNAME/.." && pwd)"
TMP_HOME="$(mktemp -d)"
export HOME="$TMP_HOME"
STUB_DIR="$TMP_HOME/stubs"
mkdir -p "$STUB_DIR"
export PATH="$STUB_DIR:$PATH"
local bin
for bin in swaybg wal qarma notify-send pkill kill; do
cat > "$STUB_DIR/$bin" <<EOF
#!/bin/bash
echo "$bin \$*" >> "$TMP_HOME/calls.log"
exit 0
EOF
chmod +x "$STUB_DIR/$bin"
done
source "$SCRIPT_DIR/wallp"
}
teardown() {
rm -rf "$TMP_HOME"
}
@test "harness sanity" {
[ "x" = "x" ]
}
@test "expand_tilde expands leading tilde" {
run expand_tilde '~/pics/a.png'
[ "$status" -eq 0 ]
[ "$output" = "$HOME/pics/a.png" ]
}
@test "expand_tilde leaves absolute path untouched" {
run expand_tilde '/abs/b.png'
[ "$output" = "/abs/b.png" ]
}
@test "parse_conf reads keys and expands tilde in paths" {
conf="$HOME/c.conf"
printf '%s\n' \
'# comment' '' \
'THEME=mytheme' \
'OUTPUT_H=DP-1' \
'OUTPUT_V=DP-3' \
'DEFAULT_H=~/p/h.png' \
'DEFAULT_V=/abs/v.png' > "$conf"
parse_conf "$conf"
[ "$CONF_THEME" = "mytheme" ]
[ "$CONF_OUTPUT_H" = "DP-1" ]
[ "$CONF_OUTPUT_V" = "DP-3" ]
[ "$CONF_DEFAULT_H" = "$HOME/p/h.png" ]
[ "$CONF_DEFAULT_V" = "/abs/v.png" ]
}
@test "load_conf bootstraps template when conf missing" {
run load_conf
[ "$status" -eq 10 ]
[ -f "$HOME/.config/wallp/wallp.conf" ]
[[ "$output" == *"fill it in"* ]]
}
@test "load_conf hard-errors on missing required key" {
mkdir -p "$HOME/.config/wallp"
printf '%s\n' 'OUTPUT_H=DP-1' 'OUTPUT_V=DP-3' 'DEFAULT_H=/a.png' \
> "$HOME/.config/wallp/wallp.conf"
run load_conf
[ "$status" -eq 1 ]
[[ "$output" == *"DEFAULT_V"* ]]
}
@test "load_conf ok with THEME fallback" {
mkdir -p "$HOME/.config/wallp"
printf '%s\n' 'OUTPUT_H=DP-1' 'OUTPUT_V=DP-3' \
'DEFAULT_H=/a.png' 'DEFAULT_V=/b.png' \
> "$HOME/.config/wallp/wallp.conf"
load_conf
[ "$?" -eq 0 ]
[ "$CONF_THEME" = "sexy-splurge" ]
}
@test "resolve_theme flag wins over all" {
CONF_THEME="conf"; mkdir -p "$HOME/.config/wallp"
echo persisted > "$HOME/.config/wallp/theme"
run resolve_theme flagged
[ "$output" = "flagged" ]
}
@test "resolve_theme persisted beats conf" {
CONF_THEME="conf"; mkdir -p "$HOME/.config/wallp"
echo persisted > "$HOME/.config/wallp/theme"
run resolve_theme ''
[ "$output" = "persisted" ]
}
@test "resolve_theme uses conf when no persisted" {
CONF_THEME="conf"
run resolve_theme ''
[ "$output" = "conf" ]
}
@test "persist_theme writes the file" {
persist_theme "abc"
[ "$(cat "$HOME/.config/wallp/theme")" = "abc" ]
}
@test "output_for maps logical to physical" {
CONF_OUTPUT_H="DP-1"; CONF_OUTPUT_V="DP-3"
run output_for H
[ "$output" = "DP-1" ]
run output_for V
[ "$output" = "DP-3" ]
}
@test "wall_file_for returns config paths" {
run wall_file_for H
[ "$output" = "$HOME/.config/wallp/wall_h" ]
run wall_file_for V
[ "$output" = "$HOME/.config/wallp/wall_v" ]
}
@test "pid_file_for returns cache paths" {
run pid_file_for H
[ "$output" = "$HOME/.cache/wallp/H.pid" ]
run pid_file_for V
[ "$output" = "$HOME/.cache/wallp/V.pid" ]
}
|