import { beforeEach, describe, expect, it } from "vite-plus/test"; import { acquireBrowserSurface, acquireBrowserSurfaceActivity, resolveBrowserSurfacePanelRect, useBrowserSurfaceStore,} from "./browserSurfaceStore"; describe("browserSurfaceStore", () => { beforeEach(() => { useBrowserSurfaceStore.setState({ activityByTabId: {}, byTabId: {} }); }); it("keeps concurrent background work active until every lease is released", () => { const first = acquireBrowserSurfaceActivity("background-browser"); const second = acquireBrowserSurfaceActivity("background-browser"); first(); expect(useBrowserSurfaceStore.getState().activityByTabId["background-browser"]).toBe(1); second(); expect(useBrowserSurfaceStore.getState().activityByTabId["background-browser"]).toBeUndefined(); }); it("freezes the source content dimensions for a fitted presentation", () => { const tabId = "fitted-browser-surface"; const sourceOwner = Symbol("source"); const sourceContent = { x: 10, y: 20, width: 1_280, height: 720, scale: 1, scrollLeft: 0, scrollTop: 0, }; useBrowserSurfaceStore.getState().claim(tabId, sourceOwner, false); useBrowserSurfaceStore.getState().presentContent(tabId, sourceContent); const fittedLease = acquireBrowserSurface(tabId, true); useBrowserSurfaceStore.getState().presentContent(tabId, { ...sourceContent, width: 360, height: 203, scale: 0.28125, }); expect(useBrowserSurfaceStore.getState().byTabId[tabId]?.fittedSourceContent).toEqual( sourceContent, ); fittedLease.release(); }); it("freezes the first content dimensions when fitting starts before the browser is measured", () => { const tabId = "pending-fitted-browser-surface"; const fittedLease = acquireBrowserSurface(tabId, true); const sourceContent = { x: 0, y: 0, width: 1_280, height: 720, scale: 1, scrollLeft: 0, scrollTop: 0, }; useBrowserSurfaceStore.getState().presentContent(tabId, sourceContent); useBrowserSurfaceStore.getState().presentContent(tabId, { ...sourceContent, width: 320, height: 180, scale: 0.25, }); expect(useBrowserSurfaceStore.getState().byTabId[tabId]?.fittedSourceContent).toEqual( sourceContent, ); fittedLease.release(); }); it("tracks content dimensions for a browser that has never been visible", () => { const tabId = "hidden-browser-surface-content-test"; useBrowserSurfaceStore.getState().presentContent(tabId, { x: 0, y: 0, width: 393, height: 852, scale: 1, scrollLeft: 0, scrollTop: 0, }); expect(useBrowserSurfaceStore.getState().byTabId[tabId]).toMatchObject({ rect: null, visible: false, content: { width: 393, height: 852 }, }); }); it("keeps a hidden background tab on its own last rect", () => { const staleRect = { x: 0, y: 0, width: 500, height: 700 }; const liveRect = { x: 10, y: 20, width: 900, height: 640 }; expect( resolveBrowserSurfacePanelRect( { hidden: { rect: staleRect, visible: false, zIndex: 30, content: null, fittedSourceContent: null, fitSourceContent: false, cornerRadius: 0, updatedAt: 1, owner: null, }, active: { rect: liveRect, visible: true, zIndex: 30, content: null, fittedSourceContent: null, fitSourceContent: false, cornerRadius: 0, updatedAt: 2, owner: null, }, }, "hidden", ), ).toEqual(staleRect); }); it("ignores updates and releases from a stale surface lease", () => { const tabId = "leased-browser-surface"; const staleRect = { x: 0, y: 0, width: 500, height: 700 }; const liveRect = { x: 10, y: 20, width: 900, height: 640 }; const staleLease = acquireBrowserSurface(tabId); staleLease.present(staleRect, true); const liveLease = acquireBrowserSurface(tabId); liveLease.present(liveRect, true); expect(staleLease.present(staleRect, true)).toBe(false); staleLease.release(); expect(useBrowserSurfaceStore.getState().byTabId[tabId]).toMatchObject({ rect: liveRect, visible: true, }); }); it("hides a surface when its current lease is released", () => { const tabId = "released-browser-surface"; const lease = acquireBrowserSurface(tabId); lease.present({ x: 10, y: 20, width: 900, height: 640 }, true); lease.release(); lease.present({ x: 0, y: 0, width: 1, height: 1 }, true); expect(useBrowserSurfaceStore.getState().byTabId[tabId]).toMatchObject({ visible: false, owner: null, }); }); it("keeps the requested layer with the active surface lease", () => { const tabId = "layered-browser-surface"; const lease = acquireBrowserSurface(tabId); lease.present({ x: 10, y: 20, width: 320, height: 200 }, true, 12, 48); expect(useBrowserSurfaceStore.getState().byTabId[tabId]).toMatchObject({ visible: true, zIndex: 48, }); }); it("clears fitted presentation state when its lease is released", () => { const tabId = "released-fitted-browser-surface"; const fittedLease = acquireBrowserSurface(tabId, true); useBrowserSurfaceStore.getState().presentContent(tabId, { x: 0, y: 0, width: 1_280, height: 800, scale: 1, scrollLeft: 0, scrollTop: 0, }); fittedLease.release(); expect(useBrowserSurfaceStore.getState().byTabId[tabId]).toMatchObject({ fittedSourceContent: null, fitSourceContent: false, owner: null, visible: false, }); });});
import { beforeEach, describe, expect, it } from "vite-plus/test";
import {
acquireBrowserSurface,
acquireBrowserSurfaceActivity,
resolveBrowserSurfacePanelRect,
useBrowserSurfaceStore,
} from "./browserSurfaceStore";
describe("browserSurfaceStore", () => {
beforeEach(() => {
useBrowserSurfaceStore.setState({ activityByTabId: {}, byTabId: {} });
});
it("keeps concurrent background work active until every lease is released", () => {
const first = acquireBrowserSurfaceActivity("background-browser");
const second = acquireBrowserSurfaceActivity("background-browser");
first();
expect(useBrowserSurfaceStore.getState().activityByTabId["background-browser"]).toBe(1);
second();
expect(useBrowserSurfaceStore.getState().activityByTabId["background-browser"]).toBeUndefined();
});
it("freezes the source content dimensions for a fitted presentation", () => {
const tabId = "fitted-browser-surface";
const sourceOwner = Symbol("source");
const sourceContent = {
x: 10,
y: 20,
width: 1_280,
height: 720,
scale: 1,
scrollLeft: 0,
scrollTop: 0,
};
useBrowserSurfaceStore.getState().claim(tabId, sourceOwner, false);
useBrowserSurfaceStore.getState().presentContent(tabId, sourceContent);
const fittedLease = acquireBrowserSurface(tabId, true);
useBrowserSurfaceStore.getState().presentContent(tabId, {
...sourceContent,
width: 360,
height: 203,
scale: 0.28125,
});
expect(useBrowserSurfaceStore.getState().byTabId[tabId]?.fittedSourceContent).toEqual(
sourceContent,
);
fittedLease.release();
});
it("freezes the first content dimensions when fitting starts before the browser is measured", () => {
const tabId = "pending-fitted-browser-surface";
const fittedLease = acquireBrowserSurface(tabId, true);
const sourceContent = {
x: 0,
y: 0,
width: 1_280,
height: 720,
scale: 1,
scrollLeft: 0,
scrollTop: 0,
};
useBrowserSurfaceStore.getState().presentContent(tabId, sourceContent);
useBrowserSurfaceStore.getState().presentContent(tabId, {
...sourceContent,
width: 320,
height: 180,
scale: 0.25,
});
expect(useBrowserSurfaceStore.getState().byTabId[tabId]?.fittedSourceContent).toEqual(
sourceContent,
);
fittedLease.release();
});
it("tracks content dimensions for a browser that has never been visible", () => {
const tabId = "hidden-browser-surface-content-test";
useBrowserSurfaceStore.getState().presentContent(tabId, {
x: 0,
y: 0,
width: 393,
height: 852,
scale: 1,
scrollLeft: 0,
scrollTop: 0,
});
expect(useBrowserSurfaceStore.getState().byTabId[tabId]).toMatchObject({
rect: null,
visible: false,
content: { width: 393, height: 852 },
});
});
it("keeps a hidden background tab on its own last rect", () => {
const staleRect = { x: 0, y: 0, width: 500, height: 700 };
const liveRect = { x: 10, y: 20, width: 900, height: 640 };
expect(
resolveBrowserSurfacePanelRect(
{
hidden: {
rect: staleRect,
visible: false,
zIndex: 30,
content: null,
fittedSourceContent: null,
fitSourceContent: false,
cornerRadius: 0,
updatedAt: 1,
owner: null,
},
active: {
rect: liveRect,
visible: true,
zIndex: 30,
content: null,
fittedSourceContent: null,
fitSourceContent: false,
cornerRadius: 0,
updatedAt: 2,
owner: null,
},
},
"hidden",
),
).toEqual(staleRect);
});
it("ignores updates and releases from a stale surface lease", () => {
const tabId = "leased-browser-surface";
const staleRect = { x: 0, y: 0, width: 500, height: 700 };
const liveRect = { x: 10, y: 20, width: 900, height: 640 };
const staleLease = acquireBrowserSurface(tabId);
staleLease.present(staleRect, true);
const liveLease = acquireBrowserSurface(tabId);
liveLease.present(liveRect, true);
expect(staleLease.present(staleRect, true)).toBe(false);
staleLease.release();
expect(useBrowserSurfaceStore.getState().byTabId[tabId]).toMatchObject({
rect: liveRect,
visible: true,
});
});
it("hides a surface when its current lease is released", () => {
const tabId = "released-browser-surface";
const lease = acquireBrowserSurface(tabId);
lease.present({ x: 10, y: 20, width: 900, height: 640 }, true);
lease.release();
lease.present({ x: 0, y: 0, width: 1, height: 1 }, true);
expect(useBrowserSurfaceStore.getState().byTabId[tabId]).toMatchObject({
visible: false,
owner: null,
});
});
it("keeps the requested layer with the active surface lease", () => {
const tabId = "layered-browser-surface";
const lease = acquireBrowserSurface(tabId);
lease.present({ x: 10, y: 20, width: 320, height: 200 }, true, 12, 48);
expect(useBrowserSurfaceStore.getState().byTabId[tabId]).toMatchObject({
visible: true,
zIndex: 48,
});
});
it("clears fitted presentation state when its lease is released", () => {
const tabId = "released-fitted-browser-surface";
const fittedLease = acquireBrowserSurface(tabId, true);
useBrowserSurfaceStore.getState().presentContent(tabId, {
x: 0,
y: 0,
width: 1_280,
height: 800,
scale: 1,
scrollLeft: 0,
scrollTop: 0,
});
fittedLease.release();
expect(useBrowserSurfaceStore.getState().byTabId[tabId]).toMatchObject({
fittedSourceContent: null,
fitSourceContent: false,
owner: null,
visible: false,
});
});
});