diff --git a/tests/test_shell_js.py b/tests/test_shell_js.py index f55472d3..4072fe94 100644 --- a/tests/test_shell_js.py +++ b/tests/test_shell_js.py @@ -23,6 +23,7 @@ _ROOT = Path(__file__).resolve().parent.parent _SHARED = _ROOT / "turnstone/shared_static" _SHELL_JS = _SHARED / "shell.js" _PANE_JS = _SHARED / "pane.js" +_SHELL_CSS = _SHARED / "shell.css" _CONSOLE_INDEX = _ROOT / "turnstone/console/static/index.html" _CONSOLE_APP = _ROOT / "turnstone/console/static/app.js" _CONSOLE_ADMIN = _ROOT / "turnstone/console/static/admin.js" @@ -322,3 +323,71 @@ def test_step5d_rail_open_marker_tracks_active_pane() -> None: # The Dashboard row is no longer unconditionally open; a session row gets it. assert 'dash.className = "row open"' not in rail assert "active && active.rawId === ws.id" in rail + + +def test_step7_tab_dropdown_mechanism() -> None: + """Step 7: PaneManager owns the GENERIC tab-action dropdown — a caret on any + pane that exposes ``tabMenu()`` (the Dashboard home exposes none, so no + caret), opening a keyboard-navigable ``.tab-menu``. The caret is a , + NOT a nested