Skip to content

Commit 301d90a

Browse files
authored
test: capture environment of tmux calls (#50)
1 parent e398113 commit 301d90a

23 files changed

+646
-160
lines changed

run_tests.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,18 @@
33
set -euo pipefail
44
CURRENT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
55

6+
# Supported environments:
7+
#
8+
# - TEST_OVERWRITE: set to 1 to overwrite snapshots
9+
# - TEST_VERBOSE: set to 1 enable verbose test output
10+
# - TEST_FILTER: set to a regex to filter test cases
11+
#
12+
# TEST_FILTER can also be specified through CLI.
13+
14+
if [[ $# == 1 ]]; then
15+
export TEST_FILTER="$1"
16+
fi
17+
618
while read -r test; do
719
echo "[test] $(basename "$test")"
820
command "$test"

src/helpers.sh

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,12 @@ assert_eq() {
113113
begin_test() {
114114
local source
115115
source=$(basename "${BASH_SOURCE[1]}")
116-
echo "[test] ${source%.*}::${1}"
116+
if [[ -z $TEST_FILTER || $1 =~ $TEST_FILTER ]]; then
117+
echo "[test] ${source%.*}::${1}"
118+
else
119+
echo "[skip] ${source%.*}::${1}"
120+
return 1
121+
fi
117122
}
118123

119124
# Simulates the response of `batch_get_options`. It accepts arguments in the

src/helpers_tests.sh

Lines changed: 78 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
#!/usr/bin/env bash
2+
# shellcheck disable=SC2030
3+
# shellcheck disable=SC2031
4+
# shellcheck disable=SC2034
25

36
set -eo pipefail
47
CURRENT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
@@ -27,31 +30,39 @@ test_parse_commands() {
2730
done
2831
}
2932

30-
begin_test "delimited_by_semis"
31-
test_parse_commands \
32-
'set status off ; set exit-empty off' \
33-
'set' 'status' 'off' ';' \
34-
'set' 'exit-empty' 'off'
35-
36-
begin_test "delimited_by_line_breaks"
37-
test_parse_commands \
38-
'set status off
33+
(
34+
begin_test "delimited_by_semis" || exit 0
35+
test_parse_commands \
36+
'set status off ; set exit-empty off' \
37+
'set' 'status' 'off' ';' \
38+
'set' 'exit-empty' 'off'
39+
) || exit 1 || exit 1
40+
41+
(
42+
begin_test "delimited_by_line_breaks" || exit 0
43+
test_parse_commands \
44+
'set status off
3945
set exit-empty off' \
40-
'set' 'status' 'off' \
41-
'set' 'exit-empty' 'off'
42-
43-
begin_test "escaped_multiple_commands"
44-
test_parse_commands \
45-
'bind -n M-1 display random\ text \\; display and\ more' \
46-
'bind' '-n' 'M-1' \
47-
'display' 'random text' '\;' \
48-
'display' 'and more'
49-
50-
begin_test "quoted_multiple_commands"
51-
test_parse_commands \
52-
"bind -n M-2 \"display 'random text' ; display 'and more'\"" \
53-
'bind' '-n' 'M-2' \
54-
"display 'random text' ; display 'and more'"
46+
'set' 'status' 'off' \
47+
'set' 'exit-empty' 'off'
48+
) || exit 1 || exit 1
49+
50+
(
51+
begin_test "escaped_multiple_commands" || exit 0
52+
test_parse_commands \
53+
'bind -n M-1 display random\ text \\; display and\ more' \
54+
'bind' '-n' 'M-1' \
55+
'display' 'random text' '\;' \
56+
'display' 'and more'
57+
) || exit 1
58+
59+
(
60+
begin_test "quoted_multiple_commands" || exit 0
61+
test_parse_commands \
62+
"bind -n M-2 \"display 'random text' ; display 'and more'\"" \
63+
'bind' '-n' 'M-2' \
64+
"display 'random text' ; display 'and more'"
65+
) || exit 1
5566

5667
#=== test:interpolate ===#
5768

@@ -61,20 +72,26 @@ test_interpolate() {
6172
assert_eq "$expected" "$input"
6273
}
6374

64-
begin_test "no_interpolate_of_unknown"
65-
format="{session}/{project}/{popup_name}"
66-
expected="working/{project}/default"
67-
test_interpolate session="working" popup_name="default"
68-
69-
begin_test "interpolate_multi"
70-
format="{var1}/{var2}/{var2}/{var1}"
71-
expected="value1/value2/value2/value1"
72-
test_interpolate var1="value1" var2="value2"
73-
74-
begin_test "interpolate_with_equals"
75-
format="{var1}/{var2}/{var2}/{var1}"
76-
expected="var1=value1/var2=value2/var2=value2/var1=value1"
77-
test_interpolate var1="var1=value1" var2="var2=value2"
75+
(
76+
begin_test "no_interpolate_of_unknown" || exit 0
77+
format="{session}/{project}/{popup_name}"
78+
expected="working/{project}/default"
79+
test_interpolate session="working" popup_name="default"
80+
) || exit 1
81+
82+
(
83+
begin_test "interpolate_multi" || exit 0
84+
format="{var1}/{var2}/{var2}/{var1}"
85+
expected="value1/value2/value2/value1"
86+
test_interpolate var1="value1" var2="value2"
87+
) || exit 1
88+
89+
(
90+
begin_test "interpolate_with_equals" || exit 0
91+
format="{var1}/{var2}/{var2}/{var1}"
92+
expected="var1=value1/var2=value2/var2=value2/var1=value1"
93+
test_interpolate var1="var1=value1" var2="var2=value2"
94+
) || exit 1
7895

7996
#=== test:batch_get_options ===#
8097

@@ -85,22 +102,26 @@ tmux() {
85102
printf "%s\n$delimiter\n" "${input[@]}"
86103
}
87104

88-
begin_test "batch_get_options"
89-
input=("value1" "value2" "value3")
90-
batch_get_options var1= var2= var3=
91-
assert_eq "$var1" "value1"
92-
assert_eq "$var2" "value2"
93-
assert_eq "$var3" "value3"
94-
95-
begin_test "batch_get_multiline_options"
96-
input=(
97-
$'\nline1\n'
98-
$'line1\nline2'
99-
$'line1\n\nline2'
100-
$'\nline1\n\nline2\nline3\n\n'
101-
)
102-
batch_get_options var1= var2= var3= var4=
103-
assert_eq "$var1" "line1"
104-
assert_eq "$var2" "line1 line2"
105-
assert_eq "$var3" "line1 line2"
106-
assert_eq "$var4" "line1 line2 line3"
105+
(
106+
begin_test "batch_get_options" || exit 0
107+
input=("value1" "value2" "value3")
108+
batch_get_options var1= var2= var3=
109+
assert_eq "$var1" "value1"
110+
assert_eq "$var2" "value2"
111+
assert_eq "$var3" "value3"
112+
) || exit 1
113+
114+
(
115+
begin_test "batch_get_multiline_options" || exit 0
116+
input=(
117+
$'\nline1\n'
118+
$'line1\nline2'
119+
$'line1\n\nline2'
120+
$'\nline1\n\nline2\nline3\n\n'
121+
)
122+
batch_get_options var1= var2= var3= var4=
123+
assert_eq "$var1" "line1"
124+
assert_eq "$var2" "line1 line2"
125+
assert_eq "$var3" "line1 line2"
126+
assert_eq "$var4" "line1 line2 line3"
127+
) || exit 1

src/toggle.sh

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,16 @@ prepare_init() {
5151
popup_id=$(escape_session_name "$popup_id")
5252
if [[ -n $open_dir ]]; then
5353
# Interpolate `{popup_caller_path}`, `{popup_caller_pane_path}`.
54-
open_args+=(-c "$(interpolate popup_caller_path="$caller_path" \
54+
init_args+=(-c "$(interpolate popup_caller_path="$caller_path" \
5555
popup_caller_pane_path="$caller_pane_path" "$open_dir")")
5656
fi
5757

5858
init_cmds=()
5959
if [[ $1 == "open" ]]; then
60-
init_cmds+=(new -As "$popup_id" "${open_args[@]}" "${program[@]}" \;)
60+
init_cmds+=(new -As "$popup_id" "${init_args[@]}" "${program[@]}" \;)
6161
else
6262
if ! tmux has -t "$popup_id" 2>/dev/null; then
63-
init_cmds+=(new -ds "$popup_id" "${open_args[@]}" "${program[@]}" \;)
63+
init_cmds+=(new -ds "$popup_id" "${init_args[@]}" "${program[@]}" \;)
6464
fi
6565
init_cmds+=(switch -t "$popup_id" \;)
6666
fi
@@ -83,7 +83,7 @@ prepare_init() {
8383
fi
8484
}
8585

86-
declare name id id_format toggle_keys=() open_args=() open_dir program=() display_args=()
86+
declare name id id_format toggle_keys=() init_args=() open_dir program=() display_args=()
8787
declare on_init before_open after_close toggle_mode socket_name socket_path
8888
declare opened_name caller_id_format caller_path caller_pane_path
8989
declare default_id_format default_shell session_path pane_path
@@ -120,7 +120,7 @@ main() {
120120
# Forward working directory to popup sessions
121121
d) open_dir=$OPTARG ;;
122122
# Forward environment overrides to popup sessions
123-
e) open_args+=("-e" "$OPTARG") ;;
123+
e) init_args+=(-e "$OPTARG") ;;
124124
name | id | id-format | toggle-key | \
125125
on-init | before-open | after-close | \
126126
toggle-mode | socket-name | socket-path)

0 commit comments

Comments
 (0)