22import logging
33import os
44import pathlib
5- import shutil
65import typing as t
76
87import pytest
98
10- from _pytest .doctest import DoctestItem
11- from _pytest .fixtures import SubRequest
12- from _pytest .monkeypatch import MonkeyPatch
13-
149from libtmux import exc
1510from libtmux .server import Server
1611from libtmux .test import TEST_SESSION_PREFIX , get_test_session_name , namer
2217USING_ZSH = "zsh" in os .getenv ("SHELL" , "" )
2318
2419
25- @pytest .fixture (autouse = True , scope = "session" )
20+ @pytest .fixture (scope = "session" )
2621def home_path (tmp_path_factory : pytest .TempPathFactory ) -> pathlib .Path :
22+ """Temporary `/home/` path."""
2723 return tmp_path_factory .mktemp ("home" )
2824
2925
30- @pytest .fixture (autouse = True , scope = "session" )
31- def user_path (home_path : pathlib .Path ) -> pathlib .Path :
32- p = home_path / getpass .getuser ()
26+ @pytest .fixture (scope = "session" )
27+ def home_user_name () -> str :
28+ """Default username to set for :func:`user_path` fixture."""
29+ return getpass .getuser ()
30+
31+
32+ @pytest .fixture (scope = "session" )
33+ def user_path (home_path : pathlib .Path , home_user_name : str ) -> pathlib .Path :
34+ """Default temporary user directory.
35+
36+ Used by: :func:`config_file`, :func:`zshrc`
37+
38+ Note: You will need to set the home directory, see :ref:`set_home`.
39+ """
40+ p = home_path / home_user_name
3341 p .mkdir ()
3442 return p
3543
3644
3745@pytest .mark .skipif (USING_ZSH , reason = "Using ZSH" )
38- @pytest .fixture (autouse = USING_ZSH , scope = "session" )
46+ @pytest .fixture (scope = "session" )
3947def zshrc (user_path : pathlib .Path ) -> pathlib .Path :
4048 """This quiets ZSH default message.
4149
@@ -46,11 +54,15 @@ def zshrc(user_path: pathlib.Path) -> pathlib.Path:
4654 return p
4755
4856
49- @pytest .fixture (scope = "function " )
57+ @pytest .fixture (scope = "session " )
5058def config_file (user_path : pathlib .Path ) -> pathlib .Path :
51- """Set default tmux configuration (base indexes for windows, panes)
59+ """Default `.tmux.conf` configuration.
60+
61+ - ``base-index -g 1``
62+
63+ These guarantee pane and windows targets can be reliably referenced and asserted.
5264
53- We need this for tests to work across tmux versions in our CI matrix .
65+ Note: You will need to set the home directory, see :ref:`set_home` .
5466 """
5567 c = user_path / ".tmux.conf"
5668 c .write_text (
@@ -62,8 +74,8 @@ def config_file(user_path: pathlib.Path) -> pathlib.Path:
6274 return c
6375
6476
65- @pytest .fixture ( autouse = True )
66- def clear_env (monkeypatch : MonkeyPatch ) -> None :
77+ @pytest .fixture
78+ def clear_env (monkeypatch : pytest . MonkeyPatch ) -> None :
6779 """Clear out any unnecessary environment variables that could interrupt tests.
6880
6981 tmux show-environment tests were being interrupted due to a lot of crazy env vars.
@@ -92,9 +104,12 @@ def clear_env(monkeypatch: MonkeyPatch) -> None:
92104
93105@pytest .fixture (scope = "function" )
94106def server (
95- request : SubRequest , monkeypatch : MonkeyPatch , config_file : pathlib .Path
107+ request : pytest .FixtureRequest ,
108+ monkeypatch : pytest .MonkeyPatch ,
109+ config_file : pathlib .Path ,
96110) -> Server :
97- t = Server (config_file = str (config_file .absolute ()))
111+ """Returns a new, temporary :class:`libtmux.Server`"""
112+ t = Server ()
98113 t .socket_name = "libtmux_test%s" % next (namer )
99114
100115 def fin () -> None :
@@ -106,7 +121,8 @@ def fin() -> None:
106121
107122
108123@pytest .fixture (scope = "function" )
109- def session (request : SubRequest , server : Server ) -> "Session" :
124+ def session (request : pytest .FixtureRequest , server : Server ) -> "Session" :
125+ """Returns a new, temporary :class:`libtmux.Session`"""
110126 session_name = "tmuxp"
111127
112128 if not server .has_session (session_name ):
@@ -146,16 +162,3 @@ def session(request: SubRequest, server: Server) -> "Session":
146162 assert TEST_SESSION_NAME != "tmuxp"
147163
148164 return session
149-
150-
151- @pytest .fixture (autouse = True )
152- def add_doctest_fixtures (
153- request : SubRequest ,
154- doctest_namespace : t .Dict [str , t .Any ],
155- ) -> None :
156- if isinstance (request ._pyfuncitem , DoctestItem ) and shutil .which ("tmux" ):
157- doctest_namespace ["server" ] = request .getfixturevalue ("server" )
158- session : "Session" = request .getfixturevalue ("session" )
159- doctest_namespace ["session" ] = session
160- doctest_namespace ["window" ] = session .attached_window
161- doctest_namespace ["pane" ] = session .attached_pane
0 commit comments