one
Version:
One is a new React Framework that makes Vite serve both native and web.
134 lines • 5.7 kB
JavaScript
var import_vitest = require("vitest");
var import_stackStateUtils = require("../stackStateUtils.cjs");
function makeState(routeNames, index) {
const routes = routeNames.map(name => ({
key: `${name}-key`,
name,
params: void 0
}));
return {
key: "stack",
index,
routeNames,
routes,
type: "stack",
stale: false,
preloadedRoutes: []
};
}
function makeDescriptors(routeNames, presentations) {
const out = {};
for (const name of routeNames) {
out[`${name}-key`] = {
options: {
presentation: presentations[name]
}
};
}
return out;
}
(0, import_vitest.describe)("isOverlayPresentation", () => {
(0, import_vitest.it)("returns true for known overlay presentations", () => {
for (const p of ["modal", "transparentModal", "fullScreenModal", "formSheet", "pageSheet", "containedModal", "containedTransparentModal"]) {
(0, import_vitest.expect)((0, import_stackStateUtils.isOverlayPresentation)({
presentation: p
})).toBe(true);
}
});
(0, import_vitest.it)("returns false for card and undefined", () => {
(0, import_vitest.expect)((0, import_stackStateUtils.isOverlayPresentation)({
presentation: "card"
})).toBe(false);
(0, import_vitest.expect)((0, import_stackStateUtils.isOverlayPresentation)({})).toBe(false);
(0, import_vitest.expect)((0, import_stackStateUtils.isOverlayPresentation)(void 0)).toBe(false);
(0, import_vitest.expect)((0, import_stackStateUtils.isOverlayPresentation)(null)).toBe(false);
});
});
(0, import_vitest.describe)("isTransparentOverlay", () => {
(0, import_vitest.it)("flags transparent variants only", () => {
(0, import_vitest.expect)((0, import_stackStateUtils.isTransparentOverlay)({
presentation: "transparentModal"
})).toBe(true);
(0, import_vitest.expect)((0, import_stackStateUtils.isTransparentOverlay)({
presentation: "containedTransparentModal"
})).toBe(true);
(0, import_vitest.expect)((0, import_stackStateUtils.isTransparentOverlay)({
presentation: "modal"
})).toBe(false);
(0, import_vitest.expect)((0, import_stackStateUtils.isTransparentOverlay)({
presentation: "formSheet"
})).toBe(false);
});
});
(0, import_vitest.describe)("convertStackStateToNonOverlayState", () => {
(0, import_vitest.it)("removes overlay routes and keeps card routes", () => {
const state = makeState(["home", "detail", "filter"], 2);
const descriptors = makeDescriptors(["home", "detail", "filter"], {
home: "card",
detail: "card",
filter: "formSheet"
});
const out = (0, import_stackStateUtils.convertStackStateToNonOverlayState)(state, descriptors);
(0, import_vitest.expect)(out.routes.map(r => r.name)).toEqual(["home", "detail"]);
});
(0, import_vitest.it)("falls back to last remaining route when active route was an overlay", () => {
const state = makeState(["home", "detail", "filter"], 2);
const descriptors = makeDescriptors(["home", "detail", "filter"], {
home: "card",
detail: "card",
filter: "formSheet"
});
const out = (0, import_stackStateUtils.convertStackStateToNonOverlayState)(state, descriptors);
(0, import_vitest.expect)(out.index).toBe(1);
(0, import_vitest.expect)(out.routes[out.index].name).toBe("detail");
});
(0, import_vitest.it)("preserves active index when active route is not an overlay", () => {
const state = makeState(["home", "detail", "filter"], 1);
const descriptors = makeDescriptors(["home", "detail", "filter"], {
home: "card",
detail: "card",
filter: "formSheet"
});
const out = (0, import_stackStateUtils.convertStackStateToNonOverlayState)(state, descriptors);
(0, import_vitest.expect)(out.routes[out.index].name).toBe("detail");
});
(0, import_vitest.it)("does not strip mid-stack overlays (regression: only the trailing overlay suffix is removed)", () => {
const state = makeState(["home", "sheet", "detail"], 2);
const descriptors = makeDescriptors(["home", "sheet", "detail"], {
home: "card",
sheet: "formSheet",
detail: "card"
});
const out = (0, import_stackStateUtils.convertStackStateToNonOverlayState)(state, descriptors);
(0, import_vitest.expect)(out.routes.map(r => r.name)).toEqual(["home", "sheet", "detail"]);
(0, import_vitest.expect)(out.index).toBe(2);
});
(0, import_vitest.it)("handles all-overlay state without crashing", () => {
const state = makeState(["only-sheet"], 0);
const descriptors = makeDescriptors(["only-sheet"], {
"only-sheet": "formSheet"
});
const out = (0, import_stackStateUtils.convertStackStateToNonOverlayState)(state, descriptors);
(0, import_vitest.expect)(out.routes).toHaveLength(0);
(0, import_vitest.expect)(out.index).toBe(0);
});
});
(0, import_vitest.describe)("findLastNonOverlayIndex", () => {
(0, import_vitest.it)("returns the highest index that is not an overlay", () => {
const state = makeState(["home", "detail", "filter", "pop"], 3);
const descriptors = makeDescriptors(["home", "detail", "filter", "pop"], {
home: "card",
detail: "card",
filter: "formSheet",
pop: "transparentModal"
});
(0, import_vitest.expect)((0, import_stackStateUtils.findLastNonOverlayIndex)(state, descriptors)).toBe(1);
});
(0, import_vitest.it)("returns -1 when every route is an overlay", () => {
const state = makeState(["sheet"], 0);
const descriptors = makeDescriptors(["sheet"], {
sheet: "formSheet"
});
(0, import_vitest.expect)((0, import_stackStateUtils.findLastNonOverlayIndex)(state, descriptors)).toBe(-1);
});
});