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