99
1010import libtmux
1111from libtmux .common import has_gte_version , has_lt_version
12+ from libtmux .session import Session
1213from libtmux .test import retry_until , temp_session
1314from libtmux .window import Window
1415from tmuxp import exc
@@ -331,6 +332,10 @@ def f():
331332 assert w .name != "top"
332333
333334
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+ )
334339def test_environment_variables (session ):
335340 workspace = ConfigReader ._from_file (
336341 test_utils .get_workspace_file ("workspace/builder/environment_vars.yaml" )
@@ -340,9 +345,68 @@ def test_environment_variables(session):
340345 builder = WorkspaceBuilder (sconf = workspace )
341346 builder .build (session )
342347
343- assert session .getenv ("FOO" ) == "BAR"
348+ assert session .getenv ("FOO" ) == "SESSION"
349+ assert session .getenv ("PATH" ) == "/tmp"
350+
351+ no_overrides_win = session .windows [0 ]
352+ pane = no_overrides_win .panes [0 ]
353+ pane .send_keys ("echo $FOO" )
354+ assert pane .capture_pane ()[1 ] == "SESSION"
355+
356+ window_overrides_win = session .windows [1 ]
357+ pane = window_overrides_win .panes [0 ]
358+ pane .send_keys ("echo $FOO" )
359+ assert pane .capture_pane ()[1 ] == "WINDOW"
360+
361+ pane_overrides_win = session .windows [2 ]
362+ pane = pane_overrides_win .panes [0 ]
363+ pane .send_keys ("echo $FOO" )
364+ assert pane .capture_pane ()[1 ] == "PANE"
365+
366+ both_overrides_win = session .windows [3 ]
367+ pane = both_overrides_win .panes [0 ]
368+ pane .send_keys ("echo $FOO" )
369+ assert pane .capture_pane ()[1 ] == "WINDOW"
370+ pane = both_overrides_win .panes [1 ]
371+ pane .send_keys ("echo $FOO" )
372+ assert pane .capture_pane ()[1 ] == "PANE"
373+
374+
375+ @pytest .mark .skipif (
376+ has_gte_version ("3.0" ),
377+ reason = "warnings are not needed for tmux >= 3.0" ,
378+ )
379+ def test_environment_variables_logs (session : Session , caplog : pytest .LogCaptureFixture ):
380+ workspace = ConfigReader ._from_file (
381+ test_utils .get_workspace_file ("workspace/builder/environment_vars.yaml" )
382+ )
383+ workspace = loader .expand (workspace )
384+
385+ builder = WorkspaceBuilder (sconf = workspace )
386+ builder .build (session )
387+
388+ # environment on sessions should work as this is done using set-environment
389+ # on the session itself
390+ assert session .getenv ("FOO" ) == "SESSION"
344391 assert session .getenv ("PATH" ) == "/tmp"
345392
393+ assert (
394+ sum (
395+ 1
396+ for record in caplog .records
397+ if "Cannot set environment for new window." in record .msg
398+ )
399+ == 4
400+ ), "Warning on creating windows missing"
401+ assert (
402+ sum (
403+ 1
404+ for record in caplog .records
405+ if "Cannot set environment for new pane." in record .msg
406+ )
407+ == 1
408+ ), "Warning on creating panes missing"
409+
346410
347411def test_automatic_rename_option (session ):
348412 """With option automatic-rename: on."""
0 commit comments