mirror of https://github.com/sveltejs/svelte
parent
9b97b7fbf7
commit
1e5dc328cd
@ -0,0 +1,78 @@
|
|||||||
|
import { assert, describe, it } from 'vitest';
|
||||||
|
import { compile } from 'svelte/compiler';
|
||||||
|
|
||||||
|
const enabled = { generate: 'client', experimental: { customRenderer: 'my-renderer' } } as const;
|
||||||
|
|
||||||
|
describe('customRenderer option parsing', () => {
|
||||||
|
const valid: Array<[string, string]> = [
|
||||||
|
['null', '<svelte:options customRenderer={null} />'],
|
||||||
|
['string', '<svelte:options customRenderer="my-renderer" />'],
|
||||||
|
['string literal', '<svelte:options customRenderer={"my-renderer"} />']
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const [name, source] of valid) {
|
||||||
|
it(`accepts ${name}`, () => {
|
||||||
|
assert.doesNotThrow(() => compile(source, enabled));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const invalid: Array<[string, string]> = [
|
||||||
|
['true', '<svelte:options customRenderer={true} />'],
|
||||||
|
['false', '<svelte:options customRenderer={false} />'],
|
||||||
|
['bare', '<svelte:options customRenderer />'],
|
||||||
|
['identifier', '<svelte:options customRenderer={renderer} />'],
|
||||||
|
['call expression', '<svelte:options customRenderer={get()} />'],
|
||||||
|
['template literal', '<svelte:options customRenderer={`x`} />'],
|
||||||
|
['mixed text', '<svelte:options customRenderer="a{b}" />'],
|
||||||
|
['numeric literal', '<svelte:options customRenderer={42} />'],
|
||||||
|
['object literal', '<svelte:options customRenderer={{}} />'],
|
||||||
|
['undefined', '<svelte:options customRenderer={undefined} />']
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const [name, source] of invalid) {
|
||||||
|
it(`rejects ${name}`, () => {
|
||||||
|
assert.throws(() => compile(source, enabled), /svelte_options_invalid_attribute_value/);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('customRenderer function resolver validation', () => {
|
||||||
|
const invalid: Array<[string, unknown]> = [
|
||||||
|
['number', () => 42],
|
||||||
|
['true', () => true],
|
||||||
|
['false', () => false],
|
||||||
|
['object', () => ({})]
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const [name, resolver] of invalid) {
|
||||||
|
it(`rejects a resolver returning ${name}`, () => {
|
||||||
|
assert.throws(
|
||||||
|
() =>
|
||||||
|
compile('<div></div>', {
|
||||||
|
generate: 'client',
|
||||||
|
// @ts-expect-error intentionally invalid return value
|
||||||
|
experimental: { customRenderer: resolver }
|
||||||
|
}),
|
||||||
|
/customRenderer/
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const valid: Array<[string, unknown]> = [
|
||||||
|
['string', () => 'my-renderer'],
|
||||||
|
['null', () => null],
|
||||||
|
['undefined', () => undefined]
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const [name, resolver] of valid) {
|
||||||
|
it(`accepts a resolver returning ${name}`, () => {
|
||||||
|
assert.doesNotThrow(() =>
|
||||||
|
compile('<div></div>', {
|
||||||
|
generate: 'client',
|
||||||
|
// @ts-expect-error resolver typed loosely for the test table
|
||||||
|
experimental: { customRenderer: resolver }
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
Loading…
Reference in new issue