feat: release design system engine, studio and component contracts
This commit is contained in:
1 parent
ff1065fb27
commit
3943b946d6
693 files changed
+175546
-3894
No files matched your search
@@ -0,0 +1,49 @@
|
||||
import { expect, test } from "bun:test";
|
||||
import { compile } from "../src/index.ts";
|
||||
|
||||
test("inactive conditional branches do not dereference null state during server rendering", async () => {
|
||||
const source = `component AddressReview {
|
||||
state review = null
|
||||
view { <h3>Address review</h3>{#if review}<p>{review.address}</p>{#if review.suppression.active}<button>Reactivate</button>{/if}{/if} }
|
||||
}`;
|
||||
const code = new Bun.Transpiler({ loader: "ts" }).transformSync(
|
||||
compile(source, "AddressReview.wrn").code,
|
||||
);
|
||||
const mod = await import("data:text/javascript;base64," + Buffer.from(code).toString("base64"));
|
||||
expect(() => mod.render({})).not.toThrow();
|
||||
expect(mod.render({})).toContain("<h3>Address review</h3>");
|
||||
});
|
||||
|
||||
test("selected branches render state while inactive nested branches remain browser templates", async () => {
|
||||
const source = `component AddressReview {
|
||||
props { review = { address: 'review@example.test', suppression: null } }
|
||||
view { {#if review}<p>{review.address}</p>{#if review.suppression}<b>{review.suppression.reason}</b>{:else}<i>No block</i>{/if}{/if} }
|
||||
}`;
|
||||
const code = new Bun.Transpiler({ loader: "ts" }).transformSync(
|
||||
compile(source, "ReviewedAddress.wrn").code,
|
||||
);
|
||||
const mod = await import("data:text/javascript;base64," + Buffer.from(code).toString("base64"));
|
||||
const html = mod.render({});
|
||||
expect(html).toContain('data-text="review.address">review@example.test</span>');
|
||||
expect(html).toContain("<i>No block</i>");
|
||||
expect(html).not.toContain("<b>null</b>");
|
||||
});
|
||||
|
||||
test("inactive branch child components retain parent prop bindings", async () => {
|
||||
const source = `component AddressReview {
|
||||
props { messages = { evidence: 'Evidence', reactivate: 'Reactivate' } }
|
||||
state review = null
|
||||
view { {#if review}<Input label="{messages.evidence}" /><Button label="{messages.reactivate}" />{/if} }
|
||||
}`;
|
||||
const code = new Bun.Transpiler({ loader: "ts" }).transformSync(
|
||||
compile(source, "LocalizedReview.wrn").code,
|
||||
);
|
||||
const mod = await import("data:text/javascript;base64," + Buffer.from(code).toString("base64"));
|
||||
const html = mod.render({});
|
||||
const match = /data-wrn-if="([A-Za-z0-9+/=]+)"/.exec(html)!;
|
||||
const body = JSON.parse(Buffer.from(match[1]!, "base64").toString())[0].body;
|
||||
expect(body).toContain("data-wrn-prop-bind-0=");
|
||||
expect(body).not.toContain("data-wrn-bind-0=");
|
||||
expect(body).toContain("messages.evidence");
|
||||
expect(body).toContain("messages.reactivate");
|
||||
});
|
||||
Reference in new issue
Block a user