Keep session manager open on launch failure
This commit is contained in:
@@ -316,6 +316,55 @@ class SelectorCatalogTests(unittest.TestCase):
|
||||
|
||||
|
||||
class SelectorActionTests(unittest.TestCase):
|
||||
def test_open_failure_stays_in_context_and_retry_can_succeed(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
attempts: list[SelectorResult] = []
|
||||
|
||||
def activate(result: SelectorResult) -> None:
|
||||
attempts.append(result)
|
||||
if len(attempts) == 1:
|
||||
raise RuntimeError(
|
||||
"Bad owner or permissions on /etc/ssh/ssh_config"
|
||||
)
|
||||
|
||||
selector = SessionSelector(
|
||||
[
|
||||
CatalogWindow(
|
||||
"@1",
|
||||
"remote:pi:default",
|
||||
"pi",
|
||||
True,
|
||||
False,
|
||||
kind="remote",
|
||||
target="pi",
|
||||
session="default",
|
||||
)
|
||||
],
|
||||
RemoteRegistry(Path(directory) / "remotes.json"),
|
||||
"/missing/ssh",
|
||||
activate_handler=activate,
|
||||
)
|
||||
self.addCleanup(selector.pool.close)
|
||||
row = next(
|
||||
item
|
||||
for item in selector._rows() # type: ignore[attr-defined]
|
||||
if item.key == "window:@1"
|
||||
)
|
||||
|
||||
self.assertIsNone(selector._activate(row)) # type: ignore[attr-defined]
|
||||
self.assertEqual(selector.view, "actions")
|
||||
self.assertIn("打开失败", selector.message)
|
||||
self.assertIn("ssh_config", selector.context_row.error)
|
||||
retry = next(
|
||||
item
|
||||
for item in selector._rows() # type: ignore[attr-defined]
|
||||
if item.kind == "action-window"
|
||||
)
|
||||
self.assertEqual(selector.selected_key, retry.key)
|
||||
|
||||
self.assertFalse(selector._activate(retry)) # type: ignore[attr-defined]
|
||||
self.assertEqual(len(attempts), 2)
|
||||
|
||||
def test_search_is_explicit_and_escape_preserves_selection(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
window = CatalogWindow(
|
||||
|
||||
Reference in New Issue
Block a user