|
1 | 1 | """Test for libtmux Session object."""
|
2 | 2 | import logging
|
| 3 | +import shutil |
3 | 4 | import typing as t
|
4 | 5 |
|
5 | 6 | import pytest
|
6 | 7 |
|
7 | 8 | from libtmux import exc
|
8 |
| -from libtmux.common import has_gte_version |
| 9 | +from libtmux.common import has_gte_version, has_lt_version |
9 | 10 | from libtmux.pane import Pane
|
10 | 11 | from libtmux.server import Server
|
11 | 12 | from libtmux.session import Session
|
@@ -257,3 +258,57 @@ def test_cmd_inserts_sesion_id(session: Session) -> None:
|
257 | 258 | assert "-t" in cmd.cmd
|
258 | 259 | assert current_session_id in cmd.cmd
|
259 | 260 | assert cmd.cmd[-1] == last_arg
|
| 261 | + |
| 262 | + |
| 263 | +@pytest.mark.skipif( |
| 264 | + has_lt_version("3.0"), |
| 265 | + reason="needs -e flag for new-window which was introduced in 3.0", |
| 266 | +) |
| 267 | +@pytest.mark.parametrize( |
| 268 | + "environment", |
| 269 | + [ |
| 270 | + {"ENV_VAR": "window"}, |
| 271 | + {"ENV_VAR_1": "window_1", "ENV_VAR_2": "window_2"}, |
| 272 | + ], |
| 273 | +) |
| 274 | +def test_new_window_with_environment( |
| 275 | + session: Session, |
| 276 | + environment: t.Dict[str, str], |
| 277 | +) -> None: |
| 278 | + env = shutil.which("env") |
| 279 | + assert env is not None, "Cannot find usable `env` in PATH." |
| 280 | + |
| 281 | + window = session.new_window( |
| 282 | + attach=True, |
| 283 | + window_name="window_with_environment", |
| 284 | + window_shell=f"{env} PS1='$ ' sh", |
| 285 | + environment=environment, |
| 286 | + ) |
| 287 | + pane = window.attached_pane |
| 288 | + assert pane is not None |
| 289 | + for k, v in environment.items(): |
| 290 | + pane.send_keys(f"echo ${k}") |
| 291 | + assert pane.capture_pane()[-2] == v |
| 292 | + |
| 293 | + |
| 294 | +@pytest.mark.skipif( |
| 295 | + has_gte_version("3.0"), |
| 296 | + reason="3.0 has the -e flag on new-window", |
| 297 | +) |
| 298 | +def test_new_window_with_environment_logs_warning_for_old_tmux( |
| 299 | + session: Session, |
| 300 | + caplog: pytest.LogCaptureFixture, |
| 301 | +) -> None: |
| 302 | + env = shutil.which("env") |
| 303 | + assert env is not None, "Cannot find usable `env` in PATH." |
| 304 | + |
| 305 | + session.new_window( |
| 306 | + attach=True, |
| 307 | + window_name="window_with_environment", |
| 308 | + window_shell=f"{env} PS1='$ ' sh", |
| 309 | + environment={"ENV_VAR": "window"}, |
| 310 | + ) |
| 311 | + |
| 312 | + assert any( |
| 313 | + "Cannot set up environment" in record.msg for record in caplog.records |
| 314 | + ), "Warning missing" |
0 commit comments