|
1 | 1 | """Test for libtmux Window object."""
|
2 | 2 | import logging
|
| 3 | +import shutil |
| 4 | +import time |
3 | 5 | import typing as t
|
4 | 6 |
|
5 | 7 | import pytest
|
@@ -310,3 +312,56 @@ def test_empty_window_name(session: Session) -> None:
|
310 | 312 | "#{==:#{session_name}," + session.name + "}",
|
311 | 313 | )
|
312 | 314 | assert "''" in cmd.stdout
|
| 315 | + |
| 316 | + |
| 317 | +@pytest.mark.skipif( |
| 318 | + has_lt_version("3.0"), |
| 319 | + reason="needs -e flag for split-window which was introduced in 3.0", |
| 320 | +) |
| 321 | +@pytest.mark.parametrize( |
| 322 | + "environment", |
| 323 | + [ |
| 324 | + {"ENV_VAR": "pane"}, |
| 325 | + {"ENV_VAR_1": "pane_1", "ENV_VAR_2": "pane_2"}, |
| 326 | + ], |
| 327 | +) |
| 328 | +def test_split_window_with_environment( |
| 329 | + session: Session, |
| 330 | + environment: t.Dict[str, str], |
| 331 | +) -> None: |
| 332 | + env = shutil.which("env") |
| 333 | + assert env is not None, "Cannot find usable `env` in Path." |
| 334 | + |
| 335 | + window = session.new_window(window_name="split_window_with_environment") |
| 336 | + pane = window.split_window( |
| 337 | + shell=f"{env} PS1='$ ' sh", |
| 338 | + environment=environment, |
| 339 | + ) |
| 340 | + assert pane is not None |
| 341 | + # wait a bit for the prompt to be ready as the test gets flaky otherwise |
| 342 | + time.sleep(0.05) |
| 343 | + for k, v in environment.items(): |
| 344 | + pane.send_keys(f"echo ${k}") |
| 345 | + assert pane.capture_pane()[-2] == v |
| 346 | + |
| 347 | + |
| 348 | +@pytest.mark.skipif( |
| 349 | + has_gte_version("3.0"), |
| 350 | + reason="3.0 has the -e flag on split-window", |
| 351 | +) |
| 352 | +def test_split_window_with_environment_logs_warning_for_old_tmux( |
| 353 | + session: Session, |
| 354 | + caplog: pytest.LogCaptureFixture, |
| 355 | +) -> None: |
| 356 | + env = shutil.which("env") |
| 357 | + assert env is not None, "Cannot find usable `env` in Path." |
| 358 | + |
| 359 | + window = session.new_window(window_name="split_window_with_environment") |
| 360 | + window.split_window( |
| 361 | + shell=f"{env} PS1='$ ' sh", |
| 362 | + environment={"ENV_VAR": "pane"}, |
| 363 | + ) |
| 364 | + |
| 365 | + assert any( |
| 366 | + "Cannot set up environment" in record.msg for record in caplog.records |
| 367 | + ), "Warning missing" |
0 commit comments