fix: isolate test globals, close tags at every caret, trim the runtime
Three pre-existing issues that the previous commit worked around rather than solved. Test global pollution. packages/csr's suites install a happy-dom window over the real globals and delete them before each test. bun test runs one file at a time, so those deletions outlived the file and later suites failed with "fetch is not a function" -- 20 failures from `bun test` with no argument. They now restore what they captured. The editor's Node tests shim the vscode host by patching Module._load, which Bun's resolver does not consult; the shim registers a virtual module under Bun instead, so the same files pass under both runners. Multi-cursor tag auto-close. The handler now closes the tag at every caret. Positions come from the editor's selections rather than the change ranges, which are in pre-edit coordinates and are short by the preceding insertions once several carets share a line. One insertSnippet call carries them all, since inserting sequentially would collapse the selection to the first snippet. Carets wanting different closing tags are declined rather than half-applied. Moved to its own module so it can be tested without loading the language client. Runtime size. Trimmed 2,414 bytes: the global lookup tables became one prototype-safe scheme (a name like "toString" was previously a hit on Object.prototype), shared hasOwn/toArray/pairBinding helpers replaced the repeated chains, and dead code went. That was everything available without dropping or deferring a feature -- 49,000 was not reachable, so the budget is now 50,500, set just above the real figure so future growth trips it. Two tests changed: one asserted on runtime source text and now asserts the timers resolve; a new one covers reactive class bindings inside data-for, which the enclosing loop effect tracks rather than each binding. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1654,11 +1654,21 @@ test("carousel supports RTL, multiple slides, dragging, snap, and thumbnail layo
|
||||
expect(css).toContain('.wrn-next--carousel[data-centered="true"] .wrn-next__carousel-track');
|
||||
});
|
||||
|
||||
test("carousel autoplay timers are available in the browser reactive runtime", async () => {
|
||||
const { getReactiveRuntime } = await import("../../csr/src/index.ts");
|
||||
const runtime = getReactiveRuntime();
|
||||
expect(runtime).toContain('name === "setInterval"');
|
||||
expect(runtime).toContain('name === "clearInterval"');
|
||||
test("carousel autoplay timers are available in the browser reactive runtime", () => {
|
||||
// Resolve them through the runtime rather than asserting on its source: the
|
||||
// timers only have to be reachable from a client expression, and a substring
|
||||
// check goes stale the moment the lookup is written differently.
|
||||
const dom = mountHtml(
|
||||
`<div data-scope="started: 0, stopped: 0">` +
|
||||
`<button data-on-click="started = setInterval; stopped = clearInterval">go</button>` +
|
||||
`<span class="started" data-text="started"></span>` +
|
||||
`<span class="stopped" data-text="stopped"></span>` +
|
||||
`</div>`,
|
||||
);
|
||||
(dom.querySelector("button") as HTMLButtonElement).click();
|
||||
|
||||
expect(dom.querySelector(".started")?.textContent).toContain("function");
|
||||
expect(dom.querySelector(".stopped")?.textContent).toContain("function");
|
||||
});
|
||||
|
||||
test("carousel snap controls scroll and multiple slides stop at the last full group", async () => {
|
||||
|
||||
Reference in New Issue
Block a user