feat(wrn): support native structured prop expressions
This commit is contained in:
@@ -1,6 +1,35 @@
|
||||
import { expect, test } from "bun:test";
|
||||
import { diagnose, formatDiagnostic, parse } from "../src/index.ts";
|
||||
|
||||
test("parses native array and object literals in state and component props", () => {
|
||||
const ast = parse(`
|
||||
component Navigation {
|
||||
state items = [{"label":"Home","href":"/"}]
|
||||
state options = {"dense":true,"nested":{"label":"A {brace}"}}
|
||||
view {
|
||||
<Navbar items={items} />
|
||||
<Sidebar items={[{"label":"Cases","href":"/cases"}]} options={{"dense":true}} />
|
||||
}
|
||||
}
|
||||
`);
|
||||
|
||||
expect(ast.states[0]?.expr).toBe('[{"label":"Home","href":"/"}]');
|
||||
expect(ast.states[1]?.expr).toBe('{"dense":true,"nested":{"label":"A {brace}"}}');
|
||||
|
||||
const elements = ast.view.filter((node) => node.type === "element");
|
||||
const navbar = elements[0];
|
||||
const sidebar = elements[1];
|
||||
expect(navbar?.type).toBe("element");
|
||||
expect(sidebar?.type).toBe("element");
|
||||
if (navbar?.type !== "element" || sidebar?.type !== "element") return;
|
||||
|
||||
expect(navbar.attrs.find((attr) => attr.name === "items")?.value).toBe("{items}");
|
||||
expect(sidebar.attrs.find((attr) => attr.name === "items")?.value).toBe(
|
||||
'{[{"label":"Cases","href":"/cases"}]}',
|
||||
);
|
||||
expect(sidebar.attrs.find((attr) => attr.name === "options")?.value).toBe('{{"dense":true}}');
|
||||
});
|
||||
|
||||
test("parses WRN 0.3 execution, data, security, and reactivity blocks", () => {
|
||||
const ast = parse(`page Dashboard {
|
||||
runtime = "universal"
|
||||
|
||||
Reference in New Issue
Block a user