From f45a6f8519b3f0f006a6afa5553cefb8bf65a1ca Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 10 Sep 2022 12:28:12 -0500 Subject: [PATCH] tests: Add regression for v1.13.1 pane spacing issue --- .../issue_800_default_size_many_windows.yaml | 12 ++++++ tests/test_workspacebuilder.py | 43 ++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 tests/fixtures/regressions/issue_800_default_size_many_windows.yaml diff --git a/tests/fixtures/regressions/issue_800_default_size_many_windows.yaml b/tests/fixtures/regressions/issue_800_default_size_many_windows.yaml new file mode 100644 index 00000000000..e18607b3806 --- /dev/null +++ b/tests/fixtures/regressions/issue_800_default_size_many_windows.yaml @@ -0,0 +1,12 @@ +session_name: many-windows-issue +windows: +- window_name: moo + layout: main-horizontal + panes: + - echo hello + - echo hello + - echo hello + - echo hello + - echo hello + - echo hello + - echo hello diff --git a/tests/test_workspacebuilder.py b/tests/test_workspacebuilder.py index 048dd7e5c7b..a6d0e53123c 100644 --- a/tests/test_workspacebuilder.py +++ b/tests/test_workspacebuilder.py @@ -3,15 +3,16 @@ import pathlib import textwrap import time +import typing as t import pytest import kaptan import libtmux -from libtmux import Window from libtmux.common import has_gte_version, has_lt_version from libtmux.test import retry_until, temp_session +from libtmux.window import Window from tmuxp import config, exc from tmuxp.cli.load import load_plugins from tmuxp.workspacebuilder import WorkspaceBuilder @@ -19,6 +20,9 @@ from .constants import EXAMPLE_PATH, FIXTURE_PATH from .fixtures import utils as test_utils +if t.TYPE_CHECKING: + from libtmux.server import Server + def test_split_windows(session): yaml_config = test_utils.read_config_file("workspacebuilder/two_pane.yaml") @@ -1217,3 +1221,40 @@ def is_almost_equal(x, y): assert is_almost_equal(height(panes[0]), height(panes[1])) assert is_almost_equal(width(panes[0]), width(panes[1])) + + +def test_issue_800_default_size_many_windows( + server: "Server", monkeypatch: pytest.MonkeyPatch +) -> None: + """Recreate default-size issue. + + v1.13.1 added a default-size, but this can break building workspaces with + a lot of panes. + + See also: https://github.com/tmux-python/tmuxp/issues/800 + """ + yaml_config = test_utils.read_config_file( + "regressions/issue_800_default_size_many_windows.yaml" + ) + sconfig = kaptan.Kaptan(handler="yaml") + sconfig = sconfig.import_config(yaml_config).get() + sconfig = config.expand(sconfig) + sconfig = config.trickle(sconfig) + + builder = WorkspaceBuilder(sconf=sconfig, server=server) + + with pytest.raises(libtmux.exc.LibTmuxException, match="no space for new pane"): + builder.build() + + assert len(server.list_sessions()) == 1 + + # Assign an active pane to the session + second_session = server.list_sessions()[0] + first_pane_on_second_session_id = second_session.list_windows()[0].list_panes()[0][ + "pane_id" + ] + monkeypatch.setenv("TMUX_PANE", first_pane_on_second_session_id) + + builder = WorkspaceBuilder(sconf=sconfig, server=server) + + assert builder.find_current_attached_session() == second_session