release: WRNexusJS 0.3.5
This commit is contained in:
@@ -41,6 +41,23 @@ test("@event (data-on-click) mutates a signal and re-renders", () => {
|
||||
expect(btn.textContent).toBe("2");
|
||||
});
|
||||
|
||||
test("declared component events emit through the generic $emit function", () => {
|
||||
const win = mount(
|
||||
`<div data-scope="" data-wrn-events="complete">
|
||||
<button data-on-click="$emit('complete', { value: '4829' })">Complete</button>
|
||||
</div>`,
|
||||
);
|
||||
const root = win.document.querySelector("[data-wrn-events]")!;
|
||||
let detail: Record<string, unknown> | undefined;
|
||||
root.addEventListener("complete", (event) => {
|
||||
detail = (event as unknown as CustomEvent).detail;
|
||||
});
|
||||
|
||||
win.document.querySelector("button")!.click();
|
||||
|
||||
expect(detail).toEqual({ value: "4829" });
|
||||
});
|
||||
|
||||
test("nested scopes don't clobber each other (regression)", () => {
|
||||
// An empty outer scope must not touch inner scopes' values.
|
||||
const win = mount(
|
||||
@@ -131,6 +148,26 @@ test("expression evaluator: member access, ternary, comparison, calls", () => {
|
||||
expect(win.document.getElementById("c")!.textContent).toBe("3");
|
||||
});
|
||||
|
||||
test("logical expressions consume their right-hand side when the result short-circuits", () => {
|
||||
const win = mount(
|
||||
`<div data-scope="leftFalse: false, leftTrue: true">
|
||||
<span id="and" data-text="leftFalse && 123"></span>
|
||||
<span id="or" data-text="leftTrue || 456"></span>
|
||||
</div>`,
|
||||
);
|
||||
expect(win.document.getElementById("and")!.textContent).toBe("false");
|
||||
expect(win.document.getElementById("or")!.textContent).toBe("true");
|
||||
});
|
||||
|
||||
test("expression evaluator supports flatMap callbacks", () => {
|
||||
const win = mount(
|
||||
`<div data-scope="groups: [{items: [1, 2]}, {items: [3]}]">
|
||||
<span data-text="groups.flatMap((group) => group.items)"></span>
|
||||
</div>`,
|
||||
);
|
||||
expect(win.document.querySelector("span")!.textContent).toBe("1,2,3");
|
||||
});
|
||||
|
||||
test("data-show toggles visibility on a reactive expression (tabs pattern)", () => {
|
||||
const win = mount(
|
||||
`<div data-scope="tab: 0">
|
||||
@@ -143,9 +180,13 @@ test("data-show toggles visibility on a reactive expression (tabs pattern)", ()
|
||||
(win.document.getElementById(id) as unknown as HTMLElement).style.display;
|
||||
expect(disp("a")).toBe("");
|
||||
expect(disp("b")).toBe("none");
|
||||
expect(win.document.getElementById("a")!.getAttribute("data-show")).toBe("true");
|
||||
expect(win.document.getElementById("b")!.getAttribute("data-show")).toBe("false");
|
||||
(win.document.querySelector("button") as unknown as HTMLElement).click();
|
||||
expect(disp("a")).toBe("none");
|
||||
expect(disp("b")).toBe("");
|
||||
expect(win.document.getElementById("a")!.getAttribute("data-show")).toBe("false");
|
||||
expect(win.document.getElementById("b")!.getAttribute("data-show")).toBe("true");
|
||||
});
|
||||
|
||||
test("reactive attribute bindings update input and accessibility attributes", () => {
|
||||
|
||||
Reference in New Issue
Block a user