@aamini/config 0.0.14 → 0.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ComponentType } from "react";
|
|
2
|
+
import { render } from "vitest-browser-react";
|
|
3
|
+
|
|
4
|
+
//#region src/test/visual-page.d.ts
|
|
5
|
+
type ScreenshotOptions = {
|
|
6
|
+
component: ComponentType;
|
|
7
|
+
name: string;
|
|
8
|
+
waitFor: (screen: Awaited<ReturnType<typeof render>>) => HTMLElement | SVGElement | null;
|
|
9
|
+
prepare?: (screen: Awaited<ReturnType<typeof render>>) => void | Promise<void>;
|
|
10
|
+
setup?: () => void | Promise<void>;
|
|
11
|
+
target?: (screen: Awaited<ReturnType<typeof render>>) => HTMLElement;
|
|
12
|
+
fullPage?: boolean;
|
|
13
|
+
viewport?: {
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
declare function expectComponentScreenshot({
|
|
19
|
+
component,
|
|
20
|
+
name,
|
|
21
|
+
waitFor,
|
|
22
|
+
prepare,
|
|
23
|
+
setup,
|
|
24
|
+
target,
|
|
25
|
+
fullPage,
|
|
26
|
+
viewport
|
|
27
|
+
}: ScreenshotOptions): Promise<void>;
|
|
28
|
+
//#endregion
|
|
29
|
+
export { expectComponentScreenshot };
|
|
30
|
+
//# sourceMappingURL=visual-page.d.mts.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { expect } from "./browser.mjs";
|
|
2
|
+
import { createElement } from "react";
|
|
3
|
+
import { page } from "vite-plus/test/browser";
|
|
4
|
+
import { render } from "vitest-browser-react";
|
|
5
|
+
//#region src/test/visual-page.tsx
|
|
6
|
+
async function waitForImages() {
|
|
7
|
+
await Promise.all(Array.from(document.images, (image) => {
|
|
8
|
+
if (image.complete) return Promise.resolve();
|
|
9
|
+
return image.decode().catch(() => void 0);
|
|
10
|
+
}));
|
|
11
|
+
}
|
|
12
|
+
async function expectComponentScreenshot({ component, name, waitFor, prepare, setup, target = (screen) => screen.container, fullPage = true, viewport = {
|
|
13
|
+
width: 1280,
|
|
14
|
+
height: 720
|
|
15
|
+
} }) {
|
|
16
|
+
localStorage.clear();
|
|
17
|
+
document.body.replaceChildren();
|
|
18
|
+
await setup?.();
|
|
19
|
+
await page.viewport(viewport.width, viewport.height);
|
|
20
|
+
const container = document.body.appendChild(document.createElement("div"));
|
|
21
|
+
container.style.width = "100vw";
|
|
22
|
+
container.style.minHeight = "100vh";
|
|
23
|
+
const screen = await render(createElement(component), { container });
|
|
24
|
+
await prepare?.(screen);
|
|
25
|
+
await expect.element(waitFor(screen)).toBeVisible();
|
|
26
|
+
await document.fonts.ready;
|
|
27
|
+
await waitForImages();
|
|
28
|
+
if (fullPage) {
|
|
29
|
+
const frame = window.frameElement;
|
|
30
|
+
if (frame) {
|
|
31
|
+
frame.style.width = `${document.body.scrollWidth}px`;
|
|
32
|
+
frame.style.height = `${document.body.scrollHeight}px`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
await expect.element(target(screen)).toMatchScreenshot(`${name}.png`, { screenshotOptions: { scale: "css" } });
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { expectComponentScreenshot };
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=visual-page.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visual-page.mjs","names":[],"sources":["../../src/test/visual-page.tsx"],"sourcesContent":["import { createElement, type ComponentType } from 'react'\nimport { page } from 'vite-plus/test/browser'\nimport { render } from 'vitest-browser-react'\n\nimport { expect } from './browser'\n\nasync function waitForImages() {\n\tawait Promise.all(\n\t\tArray.from(document.images, (image) => {\n\t\t\tif (image.complete) return Promise.resolve()\n\t\t\treturn image.decode().catch(() => undefined)\n\t\t}),\n\t)\n}\n\ntype ScreenshotOptions = {\n\tcomponent: ComponentType\n\tname: string\n\twaitFor: (\n\t\tscreen: Awaited<ReturnType<typeof render>>,\n\t) => HTMLElement | SVGElement | null\n\tprepare?: (screen: Awaited<ReturnType<typeof render>>) => void | Promise<void>\n\tsetup?: () => void | Promise<void>\n\ttarget?: (screen: Awaited<ReturnType<typeof render>>) => HTMLElement\n\tfullPage?: boolean\n\tviewport?: { width: number; height: number }\n}\n\nexport async function expectComponentScreenshot({\n\tcomponent,\n\tname,\n\twaitFor,\n\tprepare,\n\tsetup,\n\ttarget = (screen) => screen.container,\n\tfullPage = true,\n\tviewport = { width: 1280, height: 720 },\n}: ScreenshotOptions) {\n\tlocalStorage.clear()\n\tdocument.body.replaceChildren()\n\tawait setup?.()\n\tawait page.viewport(viewport.width, viewport.height)\n\n\tconst container = document.body.appendChild(document.createElement('div'))\n\tcontainer.style.width = '100vw'\n\tcontainer.style.minHeight = '100vh'\n\n\tconst screen = await render(createElement(component), { container })\n\tawait prepare?.(screen)\n\tawait expect.element(waitFor(screen)).toBeVisible()\n\tawait document.fonts.ready\n\tawait waitForImages()\n\n\tif (fullPage) {\n\t\tconst frame = window.frameElement as HTMLIFrameElement | null\n\t\tif (frame) {\n\t\t\tframe.style.width = `${document.body.scrollWidth}px`\n\t\t\tframe.style.height = `${document.body.scrollHeight}px`\n\t\t}\n\t}\n\n\tawait expect.element(target(screen)).toMatchScreenshot(`${name}.png`, {\n\t\tscreenshotOptions: { scale: 'css' },\n\t})\n}\n"],"mappings":";;;;;AAMA,eAAe,gBAAgB;CAC9B,MAAM,QAAQ,IACb,MAAM,KAAK,SAAS,SAAS,UAAU;EACtC,IAAI,MAAM,UAAU,OAAO,QAAQ,SAAS;EAC5C,OAAO,MAAM,QAAQ,CAAC,YAAY,KAAA,EAAU;GAC3C,CACF;;AAgBF,eAAsB,0BAA0B,EAC/C,WACA,MACA,SACA,SACA,OACA,UAAU,WAAW,OAAO,WAC5B,WAAW,MACX,WAAW;CAAE,OAAO;CAAM,QAAQ;CAAK,IAClB;CACrB,aAAa,OAAO;CACpB,SAAS,KAAK,iBAAiB;CAC/B,MAAM,SAAS;CACf,MAAM,KAAK,SAAS,SAAS,OAAO,SAAS,OAAO;CAEpD,MAAM,YAAY,SAAS,KAAK,YAAY,SAAS,cAAc,MAAM,CAAC;CAC1E,UAAU,MAAM,QAAQ;CACxB,UAAU,MAAM,YAAY;CAE5B,MAAM,SAAS,MAAM,OAAO,cAAc,UAAU,EAAE,EAAE,WAAW,CAAC;CACpE,MAAM,UAAU,OAAO;CACvB,MAAM,OAAO,QAAQ,QAAQ,OAAO,CAAC,CAAC,aAAa;CACnD,MAAM,SAAS,MAAM;CACrB,MAAM,eAAe;CAErB,IAAI,UAAU;EACb,MAAM,QAAQ,OAAO;EACrB,IAAI,OAAO;GACV,MAAM,MAAM,QAAQ,GAAG,SAAS,KAAK,YAAY;GACjD,MAAM,MAAM,SAAS,GAAG,SAAS,KAAK,aAAa;;;CAIrD,MAAM,OAAO,QAAQ,OAAO,OAAO,CAAC,CAAC,kBAAkB,GAAG,KAAK,OAAO,EACrE,mBAAmB,EAAE,OAAO,OAAO,EACnC,CAAC"}
|