release: WRNexusJS 0.8.0
This commit is contained in:
@@ -149,3 +149,63 @@ test("extracts v0.6 optional props, declared union options, and outputs", () =>
|
||||
],
|
||||
);
|
||||
});
|
||||
|
||||
test("accepts unresolved dynamic expressions for typed component props", () => {
|
||||
const featureCard = parseComponentMetadata(`component FeatureCard {
|
||||
props {
|
||||
external: boolean = false
|
||||
disabled: boolean = false
|
||||
showArrow: boolean = true
|
||||
}
|
||||
view { <article></article> }
|
||||
}`);
|
||||
const source = `component FeatureGrid {
|
||||
props { items: unknown[] = [] }
|
||||
view {
|
||||
{#each items as item}
|
||||
<FeatureCard
|
||||
external='{item.external || false}'
|
||||
disabled='{item.disabled || false}'
|
||||
showArrow='{item.showArrow !== false}'
|
||||
/>
|
||||
{/each}
|
||||
}
|
||||
}`;
|
||||
|
||||
assert.equal(attributeValueType("{item.external || false}"), "unknown");
|
||||
assert.equal(attributeValueType("{item.showArrow !== false}"), "boolean");
|
||||
assert.deepEqual(validateComponentTags(source, new Map([["FeatureCard", featureCard]])), []);
|
||||
});
|
||||
|
||||
test("continues to reject invalid literal boolean props", () => {
|
||||
const target = parseComponentMetadata(`component Toggle {
|
||||
props { enabled: boolean = false }
|
||||
view { <button></button> }
|
||||
}`);
|
||||
const diagnostics = validateComponentTags(
|
||||
`<Toggle enabled="definitely" />`,
|
||||
new Map([["Toggle", target]]),
|
||||
);
|
||||
assert.deepEqual(
|
||||
diagnostics.map(({ code }) => code),
|
||||
["wrn-component-prop-type"],
|
||||
);
|
||||
});
|
||||
|
||||
test("accepts unresolved dynamic expressions for declared string options", () => {
|
||||
const target = parseComponentMetadata(`component FeatureCard {
|
||||
props { target: "_blank" | "_self" = "_self" }
|
||||
view { <article></article> }
|
||||
}`);
|
||||
const dynamic = `<FeatureCard target='{item.target || ""}' />`;
|
||||
assert.deepEqual(validateComponentTags(dynamic, new Map([["FeatureCard", target]])), []);
|
||||
|
||||
const invalidLiteral = validateComponentTags(
|
||||
`<FeatureCard target="popup" />`,
|
||||
new Map([["FeatureCard", target]]),
|
||||
);
|
||||
assert.deepEqual(
|
||||
invalidLiteral.map(({ code }) => code),
|
||||
["wrn-component-prop-option"],
|
||||
);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user