46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import { createRoot } from "solid-js";
|
|
import { afterEach, describe, expect, it } from "vitest";
|
|
import { createScrollLock } from "../../src/utilities/scroll-lock/create-scroll-lock";
|
|
|
|
describe("createScrollLock", () => {
|
|
afterEach(() => {
|
|
document.body.style.overflow = "";
|
|
document.body.style.paddingRight = "";
|
|
});
|
|
|
|
it("sets overflow hidden on body when locked", () => {
|
|
createRoot((dispose) => {
|
|
const lock = createScrollLock();
|
|
lock.lock();
|
|
expect(document.body.style.overflow).toBe("hidden");
|
|
lock.unlock();
|
|
dispose();
|
|
});
|
|
});
|
|
|
|
it("restores overflow on unlock", () => {
|
|
document.body.style.overflow = "auto";
|
|
createRoot((dispose) => {
|
|
const lock = createScrollLock();
|
|
lock.lock();
|
|
lock.unlock();
|
|
expect(document.body.style.overflow).toBe("auto");
|
|
dispose();
|
|
});
|
|
});
|
|
|
|
it("handles multiple locks — only unlocks when all release", () => {
|
|
createRoot((dispose) => {
|
|
const lockA = createScrollLock();
|
|
const lockB = createScrollLock();
|
|
lockA.lock();
|
|
lockB.lock();
|
|
lockA.unlock();
|
|
expect(document.body.style.overflow).toBe("hidden"); // still locked by B
|
|
lockB.unlock();
|
|
expect(document.body.style.overflow).toBe(""); // now unlocked
|
|
dispose();
|
|
});
|
|
});
|
|
});
|