Skip to content

Commit 6260ec2

Browse files
committed
fix(tests): handle tmux version differences in options tests
Based on examination of tmux source code: 1. terminal-overrides defaults: - tmux 3.0a-3.1b: Have default values (xterm*, screen*) - tmux 3.2+: Defaults removed (commit 527f66ed, April 2020) 2. terminal-overrides parsing: - Fix split("=") to split("=", 1) to handle values containing "=" - Example: "RGB=\E[...=%p1%d...]" was failing to parse 3. Style option behavior: - When bg=default is set, tmux stores bg as color 8 (default) - When converting to string, color 8 is omitted from output - Test was incorrectly expecting "bg=default" in output - This behavior is consistent across all tmux versions References: - /home/d/study/c/tmux-3.0a/options-table.c:219-223 - /home/d/study/c/tmux-3.2a/options-table.c:314-318 - /home/d/study/c/tmux-3.0a/style.c:174-245 - /home/d/study/c/tmux-3.2a/style.c:189-270
1 parent 6d1b4f6 commit 6260ec2

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

src/libtmux/options.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ def explode_complex(
510510
if term not in new_overrides:
511511
new_overrides[term] = {}
512512
if features and "=" in features:
513-
k, v = features.split("=")
513+
k, v = features.split("=", 1)
514514

515515
if v.isdigit():
516516
v = int(v)

tests/test_options.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -489,12 +489,16 @@ def test_stable_baseline_options_and_hooks(server: Server) -> None:
489489
assert terminal_features["rxvt*"] == ["ignorefkeys"]
490490

491491
# Terminal overrides differ by version
492-
# In tmux 3.5+, terminal-overrides has a default value
493-
if has_gte_version("3.5"):
492+
# tmux 3.0a-3.1b: has default values (xterm*, screen*)
493+
# tmux 3.2+: defaults removed, returns None unless explicitly set
494+
if has_gte_version("3.2"):
494495
terminal_overrides = server.show_option("terminal-overrides")
495496
assert isinstance(terminal_overrides, (dict, type(None)))
496497
elif has_gte_version("3.0"):
497-
assert server.show_option("terminal-overrides") is None
498+
# tmux 3.0a/3.1b have defaults like "xterm*:XT:Ms=...,screen*:XT"
499+
terminal_overrides = server.show_option("terminal-overrides")
500+
assert isinstance(terminal_overrides, dict)
501+
assert "screen*" in terminal_overrides or "xterm*" in terminal_overrides
498502
else:
499503
terminal_overrides = server.show_option("terminal-overrides")
500504
assert isinstance(terminal_overrides, dict)
@@ -573,12 +577,14 @@ def test_style_option_validation(server: Server) -> None:
573577
session = server.new_session(session_name="test")
574578

575579
# Valid style (format differs between tmux versions)
580+
# Note: when you set bg=default, tmux internally sets bg to 8 (default color)
581+
# and when converting to string, it omits the bg property entirely
576582
session.set_option("status-style", "fg=red,bg=default,bold")
577583
style = session.show_option("status-style")
578584
assert isinstance(style, str)
579585
assert "fg=red" in str(style)
586+
# bg=default is NOT included in output (tmux omits it when bg is default)
580587
if has_gte_version("3.0"):
581-
assert "bg=default" in str(style)
582588
assert "bold" in str(style)
583589
else:
584590
assert "bright" in str(style)

0 commit comments

Comments
 (0)