|
9 | 9 |
|
10 | 10 | import libtmux
|
11 | 11 | from libtmux.common import has_gte_version, has_lt_version
|
| 12 | +from libtmux.session import Session |
12 | 13 | from libtmux.test import retry_until, temp_session
|
13 | 14 | from libtmux.window import Window
|
14 | 15 | from tmuxp import exc
|
@@ -331,18 +332,83 @@ def f():
|
331 | 332 | assert w.name != "top"
|
332 | 333 |
|
333 | 334 |
|
| 335 | +@pytest.mark.skipif( |
| 336 | + has_lt_version("3.0"), |
| 337 | + reason="needs -e flag for new-window and split-window introduced in tmux 3.0", |
| 338 | +) |
334 | 339 | def test_environment_variables(session):
|
335 | 340 | workspace = ConfigReader._from_file(
|
336 | 341 | test_utils.get_workspace_file("workspace/builder/environment_vars.yaml")
|
337 | 342 | )
|
338 | 343 | workspace = loader.expand(workspace)
|
339 | 344 |
|
| 345 | + builder = WorkspaceBuilder(sconf=workspace) |
| 346 | + builder.build(session) |
| 347 | + # Give slow shells some time to settle as otherwise tests might fail. |
| 348 | + time.sleep(0.3) |
| 349 | + |
| 350 | + assert session.getenv("FOO") == "SESSION" |
| 351 | + assert session.getenv("PATH") == "/tmp" |
| 352 | + |
| 353 | + no_overrides_win = session.windows[0] |
| 354 | + pane = no_overrides_win.panes[0] |
| 355 | + pane.send_keys("echo $FOO") |
| 356 | + assert pane.capture_pane()[1] == "SESSION" |
| 357 | + |
| 358 | + window_overrides_win = session.windows[1] |
| 359 | + pane = window_overrides_win.panes[0] |
| 360 | + pane.send_keys("echo $FOO") |
| 361 | + assert pane.capture_pane()[1] == "WINDOW" |
| 362 | + |
| 363 | + pane_overrides_win = session.windows[2] |
| 364 | + pane = pane_overrides_win.panes[0] |
| 365 | + pane.send_keys("echo $FOO") |
| 366 | + assert pane.capture_pane()[1] == "PANE" |
| 367 | + |
| 368 | + both_overrides_win = session.windows[3] |
| 369 | + pane = both_overrides_win.panes[0] |
| 370 | + pane.send_keys("echo $FOO") |
| 371 | + assert pane.capture_pane()[1] == "WINDOW" |
| 372 | + pane = both_overrides_win.panes[1] |
| 373 | + pane.send_keys("echo $FOO") |
| 374 | + assert pane.capture_pane()[1] == "PANE" |
| 375 | + |
| 376 | + |
| 377 | +@pytest.mark.skipif( |
| 378 | + has_gte_version("3.0"), |
| 379 | + reason="warnings are not needed for tmux >= 3.0", |
| 380 | +) |
| 381 | +def test_environment_variables_logs(session: Session, caplog: pytest.LogCaptureFixture): |
| 382 | + workspace = ConfigReader._from_file( |
| 383 | + test_utils.get_workspace_file("workspace/builder/environment_vars.yaml") |
| 384 | + ) |
| 385 | + workspace = loader.expand(workspace) |
| 386 | + |
340 | 387 | builder = WorkspaceBuilder(sconf=workspace)
|
341 | 388 | builder.build(session)
|
342 | 389 |
|
343 |
| - assert session.getenv("FOO") == "BAR" |
| 390 | + # environment on sessions should work as this is done using set-environment |
| 391 | + # on the session itself |
| 392 | + assert session.getenv("FOO") == "SESSION" |
344 | 393 | assert session.getenv("PATH") == "/tmp"
|
345 | 394 |
|
| 395 | + assert ( |
| 396 | + sum( |
| 397 | + 1 |
| 398 | + for record in caplog.records |
| 399 | + if "Cannot set environment for new window." in record.msg |
| 400 | + ) |
| 401 | + == 4 |
| 402 | + ), "Warning on creating windows missing" |
| 403 | + assert ( |
| 404 | + sum( |
| 405 | + 1 |
| 406 | + for record in caplog.records |
| 407 | + if "Cannot set environment for new pane." in record.msg |
| 408 | + ) |
| 409 | + == 1 |
| 410 | + ), "Warning on creating panes missing" |
| 411 | + |
346 | 412 |
|
347 | 413 | def test_automatic_rename_option(session):
|
348 | 414 | """With option automatic-rename: on."""
|
|
0 commit comments