|
4 | 4 |
|
5 | 5 | import json
|
6 | 6 | import os
|
| 7 | +from unittest.mock import MagicMock |
7 | 8 |
|
8 | 9 | import pytest
|
9 | 10 |
|
|
18 | 19 | from tmuxp import cli, config, exc
|
19 | 20 | from tmuxp.cli import (
|
20 | 21 | _reattach,
|
| 22 | + _load_attached, |
| 23 | + _load_append_windows_to_current_session, |
21 | 24 | command_debug_info,
|
22 | 25 | command_ls,
|
23 | 26 | get_config_dir,
|
@@ -1088,6 +1091,107 @@ def test_reattach_plugins(server):
|
1088 | 1091 | assert proc.stdout[0] == "'plugin_test_r'"
|
1089 | 1092 |
|
1090 | 1093 |
|
| 1094 | +def test_load_attached(server, monkeypatch): |
| 1095 | + # Load a session and attach from outside tmux |
| 1096 | + monkeypatch.delenv('TMUX', raising=False) |
| 1097 | + |
| 1098 | + attach_session_mock = MagicMock() |
| 1099 | + attach_session_mock.return_value.stderr = None |
| 1100 | + |
| 1101 | + monkeypatch.setattr("libtmux.session.Session.attach_session", attach_session_mock) |
| 1102 | + |
| 1103 | + yaml_config = loadfixture("workspacebuilder/two_pane.yaml") |
| 1104 | + sconfig = kaptan.Kaptan(handler='yaml') |
| 1105 | + sconfig = sconfig.import_config(yaml_config).get() |
| 1106 | + |
| 1107 | + builder = WorkspaceBuilder(sconf=sconfig, server=server) |
| 1108 | + |
| 1109 | + _load_attached(builder, False) |
| 1110 | + |
| 1111 | + assert builder.session.attach_session.call_count == 1 |
| 1112 | + |
| 1113 | + |
| 1114 | +def test_load_attached_detached(server, monkeypatch): |
| 1115 | + # Load a session but don't attach |
| 1116 | + monkeypatch.delenv('TMUX', raising=False) |
| 1117 | + |
| 1118 | + attach_session_mock = MagicMock() |
| 1119 | + attach_session_mock.return_value.stderr = None |
| 1120 | + |
| 1121 | + monkeypatch.setattr("libtmux.session.Session.attach_session", attach_session_mock) |
| 1122 | + |
| 1123 | + yaml_config = loadfixture("workspacebuilder/two_pane.yaml") |
| 1124 | + sconfig = kaptan.Kaptan(handler='yaml') |
| 1125 | + sconfig = sconfig.import_config(yaml_config).get() |
| 1126 | + |
| 1127 | + builder = WorkspaceBuilder(sconf=sconfig, server=server) |
| 1128 | + |
| 1129 | + _load_attached(builder, True) |
| 1130 | + |
| 1131 | + assert builder.session.attach_session.call_count == 0 |
| 1132 | + |
| 1133 | + |
| 1134 | +def test_load_attached_within_tmux(server, monkeypatch): |
| 1135 | + # Load a session and attach from within tmux |
| 1136 | + monkeypatch.setenv('TMUX', "/tmp/tmux-1234/default,123,0") |
| 1137 | + |
| 1138 | + switch_client_mock = MagicMock() |
| 1139 | + switch_client_mock.return_value.stderr = None |
| 1140 | + |
| 1141 | + monkeypatch.setattr("libtmux.session.Session.switch_client", switch_client_mock) |
| 1142 | + |
| 1143 | + yaml_config = loadfixture("workspacebuilder/two_pane.yaml") |
| 1144 | + sconfig = kaptan.Kaptan(handler='yaml') |
| 1145 | + sconfig = sconfig.import_config(yaml_config).get() |
| 1146 | + |
| 1147 | + builder = WorkspaceBuilder(sconf=sconfig, server=server) |
| 1148 | + |
| 1149 | + _load_attached(builder, False) |
| 1150 | + |
| 1151 | + assert builder.session.switch_client.call_count == 1 |
| 1152 | + |
| 1153 | + |
| 1154 | +def test_load_attached_within_tmux_detached(server, monkeypatch): |
| 1155 | + # Load a session and attach from within tmux |
| 1156 | + monkeypatch.setenv('TMUX', "/tmp/tmux-1234/default,123,0") |
| 1157 | + |
| 1158 | + switch_client_mock = MagicMock() |
| 1159 | + switch_client_mock.return_value.stderr = None |
| 1160 | + |
| 1161 | + monkeypatch.setattr("libtmux.session.Session.switch_client", switch_client_mock) |
| 1162 | + |
| 1163 | + yaml_config = loadfixture("workspacebuilder/two_pane.yaml") |
| 1164 | + sconfig = kaptan.Kaptan(handler='yaml') |
| 1165 | + sconfig = sconfig.import_config(yaml_config).get() |
| 1166 | + |
| 1167 | + builder = WorkspaceBuilder(sconf=sconfig, server=server) |
| 1168 | + |
| 1169 | + _load_attached(builder, True) |
| 1170 | + |
| 1171 | + assert builder.session.switch_client.call_count == 1 |
| 1172 | + |
| 1173 | +def test_load_append_windows_to_current_session(server, monkeypatch): |
| 1174 | + yaml_config = loadfixture("workspacebuilder/two_pane.yaml") |
| 1175 | + sconfig = kaptan.Kaptan(handler='yaml') |
| 1176 | + sconfig = sconfig.import_config(yaml_config).get() |
| 1177 | + |
| 1178 | + builder = WorkspaceBuilder(sconf=sconfig, server=server) |
| 1179 | + builder.build() |
| 1180 | + |
| 1181 | + assert len(server.list_sessions()) == 1 |
| 1182 | + assert len(server._list_windows()) == 3 |
| 1183 | + |
| 1184 | + # Assign an active pane to the session |
| 1185 | + monkeypatch.setenv("TMUX_PANE", server._list_panes()[0]["pane_id"]) |
| 1186 | + |
| 1187 | + builder = WorkspaceBuilder(sconf=sconfig, server=server) |
| 1188 | + _load_append_windows_to_current_session(builder) |
| 1189 | + |
| 1190 | + assert len(server.list_sessions()) == 1 |
| 1191 | + assert len(server._list_windows()) == 6 |
| 1192 | + |
| 1193 | + |
| 1194 | + |
1091 | 1195 | def test_debug_info_cli(monkeypatch, tmpdir):
|
1092 | 1196 | monkeypatch.setenv('SHELL', '/bin/bash')
|
1093 | 1197 |
|
|
0 commit comments