From cd845129e9840419ee7ce2b4122e2bff10cd4301 Mon Sep 17 00:00:00 2001 From: "paseo-bot[bot]" <266920839+paseo-bot[bot]@users.noreply.github.com> Date: Fri, 6 Nov 2026 16:00:30 +0000 Subject: [PATCH] test(app): reproduce lost floating panel hosts after overlap Preserve a failing reproduction with real portal hosts. Removing the newest host must leave an older mounted host measurable. Co-authored-by: likaixuan --- .../floating-panel-overlap.browser.test.tsx | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 packages/app/src/components/ui/floating-panel-overlap.browser.test.tsx diff --git a/packages/app/src/components/ui/floating-panel-overlap.browser.test.tsx b/packages/app/src/components/ui/floating-panel-overlap.browser.test.tsx new file mode 100644 index 0000000000..20d6390006 --- /dev/null +++ b/packages/app/src/components/ui/floating-panel-overlap.browser.test.tsx @@ -0,0 +1,34 @@ +import React, { act } from "react"; +import { createRoot } from "react-dom/client"; +import { describe, expect, test } from "vitest"; +import { Portal, PortalProvider } from "@gorhom/portal"; +import { FloatingPanelPortalHost, measureFloatingPanelPortalHost } from "./floating-panel-portal"; + +describe("Floating panel host lifetime", () => { + test("removing the newest host preserves the surviving host measurement", async () => { + const container = document.createElement("div"); + container.style.cssText = "position:relative;width:800px;height:600px"; + document.body.appendChild(container); + const root = createRoot(container); + function Content({ overlap }: { overlap: boolean }) { + return ( + + + {overlap && } + +
Commands
+
+
+ ); + } + try { + await act(async () => root.render()); + expect(await measureFloatingPanelPortalHost("workspace")).not.toBeNull(); + await act(async () => root.render()); + expect(await measureFloatingPanelPortalHost("workspace")).not.toBeNull(); + } finally { + await act(async () => root.unmount()); + container.remove(); + } + }); +});