Add initial batch of Dialog tests

This commit is contained in:
Ryan Gossiaux
2021-12-26 11:50:26 -08:00
parent 39dda7eb76
commit 10f2eab08d
6 changed files with 431 additions and 9 deletions

View File

@@ -2,6 +2,8 @@
type HandlerType = (event?: CustomEvent) => any;
interface ComponentProps {
onChange?: HandlerType;
onClose?: HandlerType;
onFocus?: HandlerType;
}
type SingleComponent = [SvelteComponent, ComponentProps, TestRendererProps];
export type TestRendererProps =
@@ -9,22 +11,30 @@
| string
| SingleComponent
| SingleComponent[];
</script>
<script lang="ts">
import type { SvelteComponent } from "svelte";
function isSingleComponent(
props: SingleComponent | SingleComponent[]
): props is SingleComponent {
return Array.isArray(props) && !Array.isArray(props[0]);
}
</script>
<script lang="ts">
import type { SvelteComponent } from "svelte";
export let allProps: TestRendererProps;
let spreadProps = {};
let onChange: HandlerType = () => {};
let onClose: HandlerType = () => {};
let onFocus: HandlerType = () => {};
if (allProps && typeof allProps !== "string" && isSingleComponent(allProps)) {
if (allProps[1].onChange) {
onChange = allProps[1].onChange;
}
({
onChange = onChange,
onClose = onClose,
onFocus = onFocus,
...spreadProps
} = allProps[1] || {});
}
</script>
@@ -36,7 +46,13 @@
<svelte:self allProps={childProps} />
{/each}
{:else}
<svelte:component this={allProps[0]} {...allProps[1]} on:change={onChange}>
<svelte:component
this={allProps[0]}
{...spreadProps}
on:change={onChange}
on:close={onClose}
on:focus={onFocus}
>
<svelte:self allProps={allProps[2]} />
</svelte:component>
{/if}

View File

@@ -0,0 +1,17 @@
type FunctionPropertyNames<T> = {
[K in keyof T]: T[K] extends (...args: any[]) => any ? K : never
}[keyof T] &
string
export function suppressConsoleLogs<T extends unknown[]>(
cb: (...args: T) => unknown,
type: FunctionPropertyNames<typeof global.console> = 'error'
) {
return (...args: T) => {
let spy = jest.spyOn(global.console, type).mockImplementation(jest.fn())
return new Promise<unknown>((resolve, reject) => {
Promise.resolve(cb(...args)).then(resolve, reject)
}).finally(() => spy.mockRestore())
}
}