Skip to content

Commit d6dd5a5

Browse files
committed
Add docs for test utilities. Add get_test_window_name and temp_window.
temp_session now passes thru to Server.new_session's args.
1 parent f615e75 commit d6dd5a5

File tree

5 files changed

+118
-11
lines changed

5 files changed

+118
-11
lines changed

doc/api.rst

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,4 +125,17 @@ Exceptions
125125

126126
.. autoexception:: tmuxp.exc.ConfigError
127127

128+
Test tools
129+
----------
130+
131+
.. automethod:: tmuxp.testsuite.helpers.get_test_session_name
132+
133+
.. automethod:: tmuxp.testsuite.helpers.get_test_window_name
134+
135+
.. automethod:: tmuxp.testsuite.helpers.get_test_pane_name
136+
137+
.. automethod:: tmuxp.testsuite.helpers.temp_session
138+
139+
.. automethod:: tmuxp.testsuite.helpers.temp_window
128140

141+
.. automethod:: tmuxp.testsuite.helpers.temp_pane

tmuxp/testsuite/__init__.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,27 @@
1010

1111
import logging
1212
import sys
13-
14-
from .. import log
15-
from .._compat import string_types, PY2, reraise
16-
from ..server import Server
13+
import pkgutil
1714

1815
try:
1916
import unittest2 as unittest
2017
except ImportError: # Python 2.7
2118
import unittest
2219

23-
import pkgutil
24-
25-
logger = logging.getLogger()
20+
from .. import log
21+
from .._compat import string_types, PY2, reraise
22+
from ..server import Server
2623

2724
t = Server()
2825
t.socket_name = 'tmuxp_test'
2926

27+
from . import helpers
28+
29+
30+
# Logger functionality
31+
32+
logger = logging.getLogger()
33+
3034
if not logger.handlers:
3135
channel = logging.StreamHandler()
3236
channel.setFormatter(log.DebugLogFormatter())

tmuxp/testsuite/helpers.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ def get_test_session_name(server, prefix='tmuxp_'):
3636
return session_name
3737

3838

39+
def get_test_window_name(session, prefix='tmuxp_'):
40+
while True:
41+
window_name = prefix + str(randint(0, 9999999))
42+
if not session.findWhere(window_name=window_name):
43+
break
44+
return window_name
45+
46+
3947
@contextlib.contextmanager
4048
def temp_session(server, session_name=None):
4149
if not session_name:
@@ -50,6 +58,81 @@ def temp_session(server, session_name=None):
5058
return
5159

5260

61+
@contextlib.contextmanager
62+
def temp_session(server, *args, **kwargs):
63+
"""Return a context manager with a temporary session.
64+
65+
e.g.::
66+
67+
with temp_session(server) as session:
68+
session.new_window(window_name='my window')
69+
70+
The session will destroy itself upon closing with :meth:`Session.
71+
kill_session()`.
72+
73+
If no ``session_name`` is entered, :func:`get_test_session_name` will make
74+
an unused session name.
75+
76+
:args: Same arguments as :meth:`Server.new_session`
77+
:yields: Temporary session
78+
:rtype: :class:`Session`
79+
"""
80+
81+
if 'session_name' in kwargs:
82+
session_name = kwargs.pop('session_name')
83+
else:
84+
session_name = get_test_session_name(server)
85+
86+
print(kwargs)
87+
88+
session = server.new_session(session_name, *args, **kwargs)
89+
90+
try:
91+
yield session
92+
finally:
93+
if server.has_session(session_name):
94+
session.kill_session()
95+
return
96+
97+
98+
@contextlib.contextmanager
99+
def temp_window(session, *args, **kwargs):
100+
"""Return a context manager with a temporary window.
101+
102+
e.g.::
103+
104+
with temp_window(session) as window:
105+
my_pane = window.split_window()
106+
107+
The window will destroy itself upon closing with :meth:`window.
108+
kill_window()`.
109+
110+
If no ``window_name`` is entered, :func:`get_test_window_name` will make
111+
an unused window name.
112+
113+
:args: Same arguments as :meth:`Session.new_window`
114+
:yields: Temporary window
115+
:rtype: :class:`Window`
116+
"""
117+
118+
if 'window_name' not in kwargs:
119+
window_name = get_test_window_name(session)
120+
else:
121+
window_name = kwargs.pop('window_name')
122+
123+
window = session.new_window(window_name, *args, **kwargs)
124+
125+
# Get ``window_id`` before returning it, it may be killed within context.
126+
window_id = window.get('window_id')
127+
128+
try:
129+
yield session
130+
finally:
131+
if session.findWhere(window_id=window_id):
132+
window.kill_window()
133+
return
134+
135+
53136
class TestCase(unittest.TestCase):
54137

55138
"""Base TestClass so we don't have to try: unittest2 every module. """
@@ -68,6 +151,9 @@ class TmuxTestCase(TestCase):
68151
#: Session name for the TestCase.
69152
TEST_SESSION_NAME = None
70153

154+
def temp_session(self, session_name=None):
155+
return temp_session(self.server, session_name)
156+
71157
def setUp(self):
72158
"""Run bootstrap if :attr:`~.session` is not set."""
73159

tmuxp/testsuite/test_utils.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
with_statement, unicode_literals
66

77
from .helpers import get_test_session_name, temp_session, TestCase, \
8-
TmuxTestCase, unittest
8+
TmuxTestCase, unittest # , temp_window, temp_pane
99

1010

1111
class TempSession(TmuxTestCase):
@@ -37,6 +37,10 @@ def test_if_session_killed_before(self):
3737
# really dead?
3838
self.assertFalse(server.has_session(session_name))
3939

40+
def test_if_session_name_works(self):
41+
"""should allow custom ``session_name``."""
42+
pass
43+
4044

4145
def suite():
4246
suite = unittest.TestSuite()

tmuxp/testsuite/workspacebuilder.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ def test_throw_error_if_retcode_false(self):
567567

568568
builder = WorkspaceBuilder(sconf=sconfig)
569569

570-
with temp_session(self.server) as sess:
570+
with self.temp_session() as sess:
571571
session_name = sess.get('session_name')
572572

573573
with self.assertRaises(subprocess.CalledProcessError):
@@ -591,7 +591,7 @@ def test_throw_error_if_file_not_exists(self):
591591

592592
builder = WorkspaceBuilder(sconf=sconfig)
593593

594-
with temp_session(self.server) as sess:
594+
with self.temp_session() as sess:
595595
session_name = sess.get('session_name')
596596
temp_session_exists = self.server.has_session(sess.get('session_name'))
597597
self.assertTrue(temp_session_exists)
@@ -618,7 +618,7 @@ def test_true_if_test_passes(self):
618618

619619
builder = WorkspaceBuilder(sconf=sconfig)
620620

621-
with temp_session(self.session.server) as session:
621+
with self.temp_session() as session:
622622
builder.build(session=self.session)
623623

624624

0 commit comments

Comments
 (0)