creevey 0.10.0-beta.8 → 0.10.0-rc.0
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.
- package/AUTHORS +2 -0
- package/CHANGELOG.md +281 -0
- package/README.md +19 -41
- package/dist/client/addon/components/Addon.js +18 -8
- package/dist/client/addon/components/Addon.js.map +1 -1
- package/dist/client/addon/components/Panel.js +4 -4
- package/dist/client/addon/components/Panel.js.map +1 -1
- package/dist/client/addon/components/TestSelect.js +2 -2
- package/dist/client/addon/components/TestSelect.js.map +1 -1
- package/dist/client/addon/components/Tools.js +19 -9
- package/dist/client/addon/components/Tools.js.map +1 -1
- package/dist/client/addon/controller.d.ts +1 -1
- package/dist/client/addon/controller.js +3 -3
- package/dist/client/addon/controller.js.map +1 -1
- package/dist/client/addon/decorator.d.ts +1 -1
- package/dist/client/addon/makeDecorator.d.ts +9 -0
- package/dist/client/addon/makeDecorator.js +48 -0
- package/dist/client/addon/makeDecorator.js.map +1 -0
- package/dist/client/addon/manager.js +38 -39
- package/dist/client/addon/manager.js.map +1 -1
- package/dist/client/addon/preset.d.ts +0 -1
- package/dist/client/addon/preset.js +3 -2
- package/dist/client/addon/preset.js.map +1 -1
- package/dist/client/addon/preview.d.ts +1 -1
- package/dist/client/addon/withCreevey.d.ts +5 -3
- package/dist/client/addon/withCreevey.js +14 -21
- package/dist/client/addon/withCreevey.js.map +1 -1
- package/dist/client/shared/components/ImagesView/BlendView.d.ts +2 -2
- package/dist/client/shared/components/ImagesView/BlendView.js +18 -8
- package/dist/client/shared/components/ImagesView/BlendView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/ImagesView.js +1 -1
- package/dist/client/shared/components/ImagesView/ImagesView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/SideBySideView.d.ts +2 -2
- package/dist/client/shared/components/ImagesView/SideBySideView.js +19 -9
- package/dist/client/shared/components/ImagesView/SideBySideView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/SlideView.d.ts +2 -2
- package/dist/client/shared/components/ImagesView/SlideView.js +19 -9
- package/dist/client/shared/components/ImagesView/SlideView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/SwapView.d.ts +2 -2
- package/dist/client/shared/components/ImagesView/SwapView.js +31 -9
- package/dist/client/shared/components/ImagesView/SwapView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/common.d.ts +1 -1
- package/dist/client/shared/components/PageFooter/PageFooter.js +1 -1
- package/dist/client/shared/components/PageFooter/PageFooter.js.map +1 -1
- package/dist/client/shared/components/PageFooter/Paging.js +1 -1
- package/dist/client/shared/components/PageFooter/Paging.js.map +1 -1
- package/dist/client/shared/components/PageHeader/ImagePreview.d.ts +2 -2
- package/dist/client/shared/components/PageHeader/ImagePreview.js +2 -1
- package/dist/client/shared/components/PageHeader/ImagePreview.js.map +1 -1
- package/dist/client/shared/components/PageHeader/PageHeader.js +34 -13
- package/dist/client/shared/components/PageHeader/PageHeader.js.map +1 -1
- package/dist/client/shared/components/ResultsPage.d.ts +2 -2
- package/dist/client/shared/components/ResultsPage.js +45 -15
- package/dist/client/shared/components/ResultsPage.js.map +1 -1
- package/dist/client/shared/creeveyClientApi.js +18 -1
- package/dist/client/shared/creeveyClientApi.js.map +1 -1
- package/dist/client/shared/helpers.d.ts +1 -3
- package/dist/client/shared/helpers.js +4 -19
- package/dist/client/shared/helpers.js.map +1 -1
- package/dist/client/web/CreeveyApp.d.ts +1 -0
- package/dist/client/web/CreeveyApp.js +44 -15
- package/dist/client/web/CreeveyApp.js.map +1 -1
- package/dist/client/web/CreeveyContext.d.ts +6 -0
- package/dist/client/web/CreeveyContext.js +21 -7
- package/dist/client/web/CreeveyContext.js.map +1 -1
- package/dist/client/web/CreeveyLoader.d.ts +1 -1
- package/dist/client/web/CreeveyLoader.js +3 -3
- package/dist/client/web/CreeveyLoader.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/Checkbox.d.ts +4 -4
- package/dist/client/web/CreeveyView/SideBar/Checkbox.js +36 -6
- package/dist/client/web/CreeveyView/SideBar/Checkbox.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/Search.js +20 -10
- package/dist/client/web/CreeveyView/SideBar/Search.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBar.js +26 -12
- package/dist/client/web/CreeveyView/SideBar/SideBar.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js +67 -13
- package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js +32 -12
- package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.d.ts +6 -6
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.js +20 -13
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/TestLink.js +20 -13
- package/dist/client/web/CreeveyView/SideBar/TestLink.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +2 -2
- package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js +2 -2
- package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/TestsStatus.d.ts +2 -2
- package/dist/client/web/CreeveyView/SideBar/TestsStatus.js +3 -2
- package/dist/client/web/CreeveyView/SideBar/TestsStatus.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/Toggle.js +1 -1
- package/dist/client/web/CreeveyView/SideBar/Toggle.js.map +1 -1
- package/dist/client/web/KeyboardEventsContext.d.ts +1 -8
- package/dist/client/web/KeyboardEventsContext.js +79 -64
- package/dist/client/web/KeyboardEventsContext.js.map +1 -1
- package/dist/client/web/assets/index-CtSq3IhG.js +518 -0
- package/dist/client/web/index.html +1 -1
- package/dist/client/web/index.js +26 -11
- package/dist/client/web/index.js.map +1 -1
- package/dist/client/web/themes.d.ts +2 -0
- package/dist/client/web/themes.js +22 -0
- package/dist/client/web/themes.js.map +1 -0
- package/dist/creevey.d.ts +1 -1
- package/dist/creevey.js +122 -41
- package/dist/creevey.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/playwright/generator.d.ts +25 -0
- package/dist/playwright/generator.js +243 -0
- package/dist/playwright/generator.js.map +1 -0
- package/dist/playwright/helpers.d.ts +2 -0
- package/dist/playwright/helpers.js +29 -0
- package/dist/playwright/helpers.js.map +1 -0
- package/dist/playwright/reporter.d.ts +83 -0
- package/dist/playwright/reporter.js +334 -0
- package/dist/playwright/reporter.js.map +1 -0
- package/dist/playwright/setup.d.ts +3 -0
- package/dist/playwright/setup.js +72 -0
- package/dist/playwright/setup.js.map +1 -0
- package/dist/playwright.d.ts +1 -0
- package/dist/playwright.js +3 -1
- package/dist/playwright.js.map +1 -1
- package/dist/server/compare.d.ts +18 -0
- package/dist/server/compare.js +182 -0
- package/dist/server/compare.js.map +1 -0
- package/dist/server/config.d.ts +3 -3
- package/dist/server/config.js +75 -8
- package/dist/server/config.js.map +1 -1
- package/dist/server/connection.d.ts +3 -0
- package/dist/server/connection.js +28 -0
- package/dist/server/connection.js.map +1 -0
- package/dist/server/docker.d.ts +1 -1
- package/dist/server/docker.js +54 -32
- package/dist/server/docker.js.map +1 -1
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +165 -64
- package/dist/server/index.js.map +1 -1
- package/dist/server/master/api.d.ts +11 -6
- package/dist/server/master/api.js +88 -25
- package/dist/server/master/api.js.map +1 -1
- package/dist/server/master/handlers/capture-handler.d.ts +5 -0
- package/dist/server/master/handlers/capture-handler.js +25 -0
- package/dist/server/master/handlers/capture-handler.js.map +1 -0
- package/dist/server/master/handlers/index.d.ts +4 -0
- package/dist/server/master/handlers/index.js +21 -0
- package/dist/server/master/handlers/index.js.map +1 -0
- package/dist/server/master/handlers/ping-handler.d.ts +2 -0
- package/dist/server/master/handlers/ping-handler.js +8 -0
- package/dist/server/master/handlers/ping-handler.js.map +1 -0
- package/dist/server/master/handlers/static-handler.d.ts +1 -0
- package/dist/server/master/handlers/static-handler.js +20 -0
- package/dist/server/master/handlers/static-handler.js.map +1 -0
- package/dist/server/master/handlers/stories-handler.d.ts +4 -0
- package/dist/server/master/handlers/stories-handler.js +24 -0
- package/dist/server/master/handlers/stories-handler.js.map +1 -0
- package/dist/server/master/master.js +7 -24
- package/dist/server/master/master.js.map +1 -1
- package/dist/server/master/pool.d.ts +1 -0
- package/dist/server/master/pool.js +5 -3
- package/dist/server/master/pool.js.map +1 -1
- package/dist/server/master/queue.d.ts +1 -1
- package/dist/server/master/queue.js +14 -6
- package/dist/server/master/queue.js.map +1 -1
- package/dist/server/master/runner.d.ts +6 -6
- package/dist/server/master/runner.js +98 -130
- package/dist/server/master/runner.js.map +1 -1
- package/dist/server/master/server.d.ts +1 -1
- package/dist/server/master/server.js +193 -88
- package/dist/server/master/server.js.map +1 -1
- package/dist/server/master/start.d.ts +1 -2
- package/dist/server/master/start.js +13 -29
- package/dist/server/master/start.js.map +1 -1
- package/dist/server/master/testsManager.d.ts +81 -0
- package/dist/server/master/testsManager.js +282 -0
- package/dist/server/master/testsManager.js.map +1 -0
- package/dist/server/playwright/docker-file.d.ts +1 -1
- package/dist/server/playwright/docker-file.js +17 -8
- package/dist/server/playwright/docker-file.js.map +1 -1
- package/dist/server/playwright/docker.d.ts +2 -1
- package/dist/server/playwright/docker.js +10 -2
- package/dist/server/playwright/docker.js.map +1 -1
- package/dist/server/playwright/index-source.mjs +16 -0
- package/dist/server/playwright/internal.d.ts +7 -7
- package/dist/server/playwright/internal.js +144 -84
- package/dist/server/playwright/internal.js.map +1 -1
- package/dist/server/playwright/webdriver.d.ts +3 -3
- package/dist/server/playwright/webdriver.js +0 -6
- package/dist/server/playwright/webdriver.js.map +1 -1
- package/dist/server/providers/browser.js +4 -3
- package/dist/server/providers/browser.js.map +1 -1
- package/dist/server/providers/hybrid.js +2 -2
- package/dist/server/providers/hybrid.js.map +1 -1
- package/dist/server/report.d.ts +10 -0
- package/dist/server/report.js +45 -0
- package/dist/server/report.js.map +1 -0
- package/dist/server/reporters/creevey.d.ts +7 -0
- package/dist/server/reporters/creevey.js +63 -0
- package/dist/server/reporters/creevey.js.map +1 -0
- package/dist/server/reporters/index.d.ts +2 -0
- package/dist/server/reporters/index.js +16 -0
- package/dist/server/reporters/index.js.map +1 -0
- package/dist/server/reporters/junit.d.ts +16 -0
- package/dist/server/reporters/junit.js +167 -0
- package/dist/server/reporters/junit.js.map +1 -0
- package/dist/server/reporters/teamcity.d.ts +7 -0
- package/dist/server/reporters/teamcity.js +60 -0
- package/dist/server/reporters/teamcity.js.map +1 -0
- package/dist/server/selenium/internal.d.ts +4 -4
- package/dist/server/selenium/internal.js +56 -40
- package/dist/server/selenium/internal.js.map +1 -1
- package/dist/server/selenium/selenoid.js +12 -6
- package/dist/server/selenium/selenoid.js.map +1 -1
- package/dist/server/selenium/webdriver.d.ts +3 -3
- package/dist/server/selenium/webdriver.js +4 -8
- package/dist/server/selenium/webdriver.js.map +1 -1
- package/dist/server/shutdown.d.ts +1 -0
- package/dist/server/shutdown.js +23 -0
- package/dist/server/shutdown.js.map +1 -0
- package/dist/server/stories.d.ts +0 -1
- package/dist/server/stories.js +0 -12
- package/dist/server/stories.js.map +1 -1
- package/dist/server/telemetry.js +3 -3
- package/dist/server/telemetry.js.map +1 -1
- package/dist/server/testsFiles/parser.js +45 -5
- package/dist/server/testsFiles/parser.js.map +1 -1
- package/dist/server/utils.d.ts +23 -0
- package/dist/server/utils.js +114 -15
- package/dist/server/utils.js.map +1 -1
- package/dist/server/webdriver.d.ts +1 -1
- package/dist/server/worker/context.d.ts +3 -0
- package/dist/server/worker/context.js +15 -0
- package/dist/server/worker/context.js.map +1 -0
- package/dist/server/worker/match-image.d.ts +8 -12
- package/dist/server/worker/match-image.js +11 -178
- package/dist/server/worker/match-image.js.map +1 -1
- package/dist/server/worker/start.d.ts +2 -2
- package/dist/server/worker/start.js +41 -64
- package/dist/server/worker/start.js.map +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.js +9 -7
- package/dist/shared/index.js.map +1 -1
- package/dist/types.d.ts +84 -43
- package/dist/types.js +65 -1
- package/dist/types.js.map +1 -1
- package/docs/cli.md +80 -0
- package/docs/config.md +179 -165
- package/docs/examples/playwright-reporer/playwright.config.ts +37 -0
- package/docs/migration-0.9-to-0.10.md +144 -0
- package/docs/playwright-reporter.md +357 -0
- package/docs/storybook.md +60 -0
- package/docs/tests.md +50 -45
- package/package.json +78 -83
- package/playwright.config.mts +46 -0
- package/src/client/addon/components/Addon.tsx +1 -1
- package/src/client/addon/components/Panel.tsx +4 -4
- package/src/client/addon/components/TestSelect.tsx +2 -2
- package/src/client/addon/components/Tools.tsx +2 -2
- package/src/client/addon/controller.ts +4 -4
- package/src/client/addon/makeDecorator.ts +69 -0
- package/src/client/addon/manager.ts +38 -37
- package/src/client/addon/preset.ts +2 -1
- package/src/client/addon/withCreevey.ts +16 -19
- package/src/client/shared/components/ImagesView/BlendView.tsx +1 -1
- package/src/client/shared/components/ImagesView/ImagesView.tsx +1 -1
- package/src/client/shared/components/ImagesView/SideBySideView.tsx +2 -2
- package/src/client/shared/components/ImagesView/SlideView.tsx +2 -2
- package/src/client/shared/components/ImagesView/SwapView.tsx +20 -2
- package/src/client/shared/components/ImagesView/common.ts +1 -1
- package/src/client/shared/components/PageFooter/PageFooter.tsx +1 -1
- package/src/client/shared/components/PageFooter/Paging.tsx +1 -1
- package/src/client/shared/components/PageHeader/ImagePreview.tsx +2 -1
- package/src/client/shared/components/PageHeader/PageHeader.tsx +23 -7
- package/src/client/shared/components/ResultsPage.tsx +33 -10
- package/src/client/shared/creeveyClientApi.ts +19 -1
- package/src/client/shared/helpers.ts +4 -24
- package/src/client/web/CreeveyApp.tsx +30 -9
- package/src/client/web/CreeveyContext.tsx +11 -0
- package/src/client/web/CreeveyLoader.tsx +2 -2
- package/src/client/web/CreeveyView/SideBar/Checkbox.tsx +3 -3
- package/src/client/web/CreeveyView/SideBar/Search.tsx +4 -4
- package/src/client/web/CreeveyView/SideBar/SideBar.tsx +11 -6
- package/src/client/web/CreeveyView/SideBar/SideBarFooter.tsx +48 -15
- package/src/client/web/CreeveyView/SideBar/SideBarHeader.tsx +20 -5
- package/src/client/web/CreeveyView/SideBar/SuiteLink.tsx +12 -12
- package/src/client/web/CreeveyView/SideBar/TestLink.tsx +10 -10
- package/src/client/web/CreeveyView/SideBar/TestStatusIcon.tsx +2 -2
- package/src/client/web/CreeveyView/SideBar/TestsStatus.tsx +3 -2
- package/src/client/web/CreeveyView/SideBar/Toggle.tsx +1 -1
- package/src/client/web/KeyboardEventsContext.tsx +61 -73
- package/src/client/web/index.tsx +10 -5
- package/src/client/web/themes.ts +24 -0
- package/src/creevey.ts +92 -38
- package/src/playwright/generator.ts +322 -0
- package/src/playwright/helpers.ts +31 -0
- package/src/playwright/reporter.ts +381 -0
- package/src/playwright/setup.ts +84 -0
- package/src/playwright.ts +1 -0
- package/src/server/compare.ts +260 -0
- package/src/server/config.ts +52 -9
- package/src/server/connection.ts +26 -0
- package/src/server/docker.ts +62 -34
- package/src/server/index.ts +166 -79
- package/src/server/master/api.ts +94 -28
- package/src/server/master/handlers/capture-handler.ts +20 -0
- package/src/server/master/handlers/index.ts +4 -0
- package/src/server/master/handlers/ping-handler.ts +6 -0
- package/src/server/master/handlers/static-handler.ts +16 -0
- package/src/server/master/handlers/stories-handler.ts +20 -0
- package/src/server/master/master.ts +10 -27
- package/src/server/master/pool.ts +7 -3
- package/src/server/master/queue.ts +21 -7
- package/src/server/master/runner.ts +123 -134
- package/src/server/master/server.ts +214 -101
- package/src/server/master/start.ts +19 -41
- package/src/server/master/testsManager.ts +316 -0
- package/src/server/playwright/docker-file.ts +20 -8
- package/src/server/playwright/docker.ts +16 -3
- package/src/server/playwright/index-source.mjs +16 -0
- package/src/server/playwright/internal.ts +176 -103
- package/src/server/playwright/webdriver.ts +4 -10
- package/src/server/providers/browser.ts +4 -3
- package/src/server/providers/hybrid.ts +2 -3
- package/src/server/report.ts +51 -0
- package/src/server/reporters/creevey.ts +71 -0
- package/src/server/reporters/index.ts +11 -0
- package/src/server/reporters/junit.ts +207 -0
- package/src/server/reporters/teamcity.ts +74 -0
- package/src/server/selenium/internal.ts +70 -53
- package/src/server/selenium/selenoid.ts +13 -6
- package/src/server/selenium/webdriver.ts +8 -12
- package/src/server/shutdown.ts +19 -0
- package/src/server/stories.ts +1 -12
- package/src/server/telemetry.ts +3 -3
- package/src/server/testsFiles/parser.ts +52 -4
- package/src/server/utils.ts +124 -16
- package/src/server/webdriver.ts +1 -1
- package/src/server/worker/context.ts +14 -0
- package/src/server/worker/match-image.ts +16 -248
- package/src/server/worker/start.ts +49 -79
- package/src/shared/index.ts +10 -8
- package/src/types.ts +91 -58
- package/types/global.d.ts +1 -0
- package/dist/client/web/assets/index-DB8lHlJw.js +0 -591
- package/dist/server/reporter.d.ts +0 -26
- package/dist/server/reporter.js +0 -108
- package/dist/server/reporter.js.map +0 -1
- package/dist/server/update.d.ts +0 -2
- package/dist/server/update.js +0 -53
- package/dist/server/update.js.map +0 -1
- package/src/server/reporter.ts +0 -139
- package/src/server/update.ts +0 -74
package/dist/client/web/index.js
CHANGED
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
15
15
|
}) : function(o, v) {
|
16
16
|
o["default"] = v;
|
17
17
|
});
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
};
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
19
|
+
var ownKeys = function(o) {
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
21
|
+
var ar = [];
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
23
|
+
return ar;
|
24
|
+
};
|
25
|
+
return ownKeys(o);
|
26
|
+
};
|
27
|
+
return function (mod) {
|
28
|
+
if (mod && mod.__esModule) return mod;
|
29
|
+
var result = {};
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
31
|
+
__setModuleDefault(result, mod);
|
32
|
+
return result;
|
33
|
+
};
|
34
|
+
})();
|
25
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
26
36
|
const react_1 = __importStar(require("react"));
|
27
37
|
const client_1 = require("react-dom/client");
|
@@ -41,7 +51,7 @@ function loadCreeveyData() {
|
|
41
51
|
document.body.appendChild(script);
|
42
52
|
});
|
43
53
|
}
|
44
|
-
const CreeveyAppAsync = react_1.
|
54
|
+
const CreeveyAppAsync = (0, react_1.lazy)(async () => {
|
45
55
|
let isReport = false;
|
46
56
|
let creeveyStatus;
|
47
57
|
let creeveyApi;
|
@@ -54,16 +64,21 @@ const CreeveyAppAsync = react_1.default.lazy(async () => {
|
|
54
64
|
// NOTE: Failed to get status from API
|
55
65
|
// NOTE: It might happen on circle ci from artifact
|
56
66
|
isReport = true;
|
57
|
-
creeveyStatus = { isRunning: false, tests: await loadCreeveyData(), browsers: [] };
|
67
|
+
creeveyStatus = { isRunning: false, tests: await loadCreeveyData(), browsers: [], isUpdateMode: false };
|
58
68
|
}
|
59
69
|
}
|
60
70
|
else {
|
61
71
|
isReport = true;
|
62
|
-
creeveyStatus = { isRunning: false, tests: await loadCreeveyData(), browsers: [] };
|
72
|
+
creeveyStatus = { isRunning: false, tests: await loadCreeveyData(), browsers: [], isUpdateMode: false };
|
63
73
|
}
|
64
74
|
return {
|
65
75
|
default() {
|
66
|
-
return (react_1.default.createElement(CreeveyApp_js_1.CreeveyApp, { api: creeveyApi, initialState: {
|
76
|
+
return (react_1.default.createElement(CreeveyApp_js_1.CreeveyApp, { api: creeveyApi, initialState: {
|
77
|
+
isReport,
|
78
|
+
isRunning: creeveyStatus.isRunning,
|
79
|
+
tests: (0, helpers_js_1.treeifyTests)(creeveyStatus.tests),
|
80
|
+
isUpdateMode: creeveyStatus.isUpdateMode,
|
81
|
+
} }));
|
67
82
|
},
|
68
83
|
};
|
69
84
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/web/index.tsx"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/web/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA8C;AAC9C,6CAA8C;AAC9C,mDAA6C;AAE7C,uEAAuF;AACvF,6CAAqD;AACrD,qDAAoD;AACpD,yDAAmD;AAMnD,MAAM,CAAC,iCAAiC,GAAG,eAAI,CAAC;AAEhD,SAAS,eAAe;IACtB,OAAO,IAAI,OAAO,CAAyB,CAAC,OAAO,EAAE,EAAE;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;QACvB,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;YACnB,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5B,CAAC,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,eAAe,GAAG,IAAA,YAAI,EAAC,KAAK,IAAI,EAAE;IACtC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,aAA4B,CAAC;IACjC,IAAI,UAAwC,CAAC;IAC7C,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,IAAA,0CAAoB,GAAE,CAAC;YAC1C,aAAa,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;YACtC,mDAAmD;YACnD,QAAQ,GAAG,IAAI,CAAC;YAChB,aAAa,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAC1G,CAAC;IACH,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,IAAI,CAAC;QAChB,aAAa,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IAC1G,CAAC;IAED,OAAO;QACL,OAAO;YACL,OAAO,CACL,8BAAC,0BAAU,IACT,GAAG,EAAE,UAAU,EACf,YAAY,EAAE;oBACZ,QAAQ;oBACR,SAAS,EAAE,aAAa,CAAC,SAAS;oBAClC,KAAK,EAAE,IAAA,yBAAY,EAAC,aAAa,CAAC,KAAK,CAAC;oBACxC,YAAY,EAAE,aAAa,CAAC,YAAY;iBACzC,GACD,CACH,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,oEAAoE;AACpE,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAE,CAAC,CAAC;AAC1D,IAAI,CAAC,MAAM,CACT,8BAAC,gBAAQ,IAAC,QAAQ,EAAE,8BAAC,gCAAa,OAAG;IACnC,8BAAC,eAAe,OAAG,CACV,CACZ,CAAC"}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.useTheme = useTheme;
|
4
|
+
const react_1 = require("react");
|
5
|
+
const theming_1 = require("storybook/theming");
|
6
|
+
const types_js_1 = require("../../types.js");
|
7
|
+
const CREEVEY_THEME = 'Creevey_theme';
|
8
|
+
function isTheme(theme) {
|
9
|
+
return (0, types_js_1.isDefined)(theme) && Object.prototype.hasOwnProperty.call(theming_1.themes, theme);
|
10
|
+
}
|
11
|
+
function initialTheme() {
|
12
|
+
const theme = localStorage.getItem(CREEVEY_THEME);
|
13
|
+
return isTheme(theme) ? theme : 'light';
|
14
|
+
}
|
15
|
+
function useTheme() {
|
16
|
+
const [theme, setTheme] = (0, react_1.useState)(initialTheme());
|
17
|
+
(0, react_1.useEffect)(() => {
|
18
|
+
localStorage.setItem(CREEVEY_THEME, theme);
|
19
|
+
}, [theme]);
|
20
|
+
return [theme, setTheme];
|
21
|
+
}
|
22
|
+
//# sourceMappingURL=themes.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../../../src/client/web/themes.ts"],"names":[],"mappings":";;AAeA,4BAQC;AAvBD,iCAA4C;AAC5C,+CAAsD;AACtD,6CAA2C;AAE3C,MAAM,aAAa,GAAG,eAAe,CAAC;AAEtC,SAAS,OAAO,CAAC,KAAqB;IACpC,OAAO,IAAA,oBAAS,EAAC,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAM,EAAE,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1C,CAAC;AAED,SAAgB,QAAQ;IACtB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAoB,YAAY,EAAE,CAAC,CAAC;IAEtE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC3B,CAAC"}
|
package/dist/creevey.d.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
import './server/shutdown.js';
|
package/dist/creevey.js
CHANGED
@@ -1,66 +1,147 @@
|
|
1
1
|
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
19
|
+
var ownKeys = function(o) {
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
21
|
+
var ar = [];
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
23
|
+
return ar;
|
24
|
+
};
|
25
|
+
return ownKeys(o);
|
26
|
+
};
|
27
|
+
return function (mod) {
|
28
|
+
if (mod && mod.__esModule) return mod;
|
29
|
+
var result = {};
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
31
|
+
__setModuleDefault(result, mod);
|
32
|
+
return result;
|
33
|
+
};
|
34
|
+
})();
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
37
|
};
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
39
|
const cluster_1 = __importDefault(require("cluster"));
|
7
|
-
const
|
8
|
-
const index_js_1 = __importDefault(require("./server/index.js"));
|
9
|
-
const messages_js_1 = require("./server/messages.js");
|
10
|
-
const utils_js_1 = require("./server/utils.js");
|
40
|
+
const v = __importStar(require("valibot"));
|
11
41
|
const loglevel_1 = __importDefault(require("loglevel"));
|
42
|
+
const cac_1 = require("cac");
|
43
|
+
const types_js_1 = require("./types.js");
|
44
|
+
const package_json_1 = require("../package.json");
|
12
45
|
const logger_js_1 = require("./server/logger.js");
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
(
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
46
|
+
const index_js_1 = __importDefault(require("./server/index.js"));
|
47
|
+
require("./server/shutdown.js");
|
48
|
+
const workerCli = (0, cac_1.cac)('worker');
|
49
|
+
workerCli
|
50
|
+
.command('worker', 'Start worker')
|
51
|
+
.option('--browser <browser>', 'Specify browser to run tests')
|
52
|
+
.option('--grid-url <url>', 'Selenium grid URL')
|
53
|
+
.option('-d, --debug', 'Enable debug mode')
|
54
|
+
.option('-c, --config <config>', 'Path to config file')
|
55
|
+
.option('-p, --port <port>', 'Port for UI server', { default: 3000 })
|
56
|
+
.option('--trace', 'Enable trace mode (more verbose than debug)')
|
57
|
+
.option('--report-dir <dir>', 'Directory for test reports')
|
58
|
+
.option('--screen-dir <dir>', 'Directory for reference images')
|
59
|
+
.option('--storybook-url <url>', 'Storybook server URL')
|
60
|
+
.option('--odiff', 'Use odiff for image comparison');
|
61
|
+
workerCli.parse();
|
62
|
+
const cli = (0, cac_1.cac)('creevey');
|
63
|
+
cli
|
64
|
+
.command('report [reportDir]', 'Launch web UI to review and approve test results')
|
65
|
+
.option('-c, --config <config>', 'Path to config file')
|
66
|
+
.option('-p, --port <port>', 'Port for UI server', { default: 3000 })
|
67
|
+
.option('--screen-dir <dir>', 'Directory for reference images');
|
68
|
+
// TODO Add ability to start specific tests/files/stories
|
69
|
+
cli
|
70
|
+
.command('test [options]', 'Run tests')
|
71
|
+
.option('--ui', 'Launch web UI for running tests and reviewing test results')
|
72
|
+
.option('-s, --storybook-start [cmd]', 'Start Storybook automatically')
|
73
|
+
.option('-c, --config <config>', 'Path to config file')
|
74
|
+
.option('-d, --debug', 'Enable debug mode')
|
75
|
+
.option('-p, --port <port>', 'Port for UI server', { default: 3000 })
|
76
|
+
.option('--fail-fast', 'Stop tests after first failure')
|
77
|
+
.option('--report-dir <dir>', 'Directory for test reports')
|
78
|
+
.option('--screen-dir <dir>', 'Directory for reference images')
|
79
|
+
.option('--storybook-url <url>', 'Storybook server URL')
|
80
|
+
.option('--storybook-port <port>', 'Storybook server port')
|
81
|
+
.option('--reporter <reporter>', '[DEPRECATED] Use config file instead')
|
82
|
+
.option('--odiff', 'Use odiff for image comparison')
|
83
|
+
.option('--trace', 'Enable trace mode (more verbose than debug)')
|
84
|
+
.option('--no-docker', 'Disable Docker usage');
|
85
|
+
cli.version(process.env.npm_package_version ?? package_json_1.version);
|
86
|
+
cli.help();
|
87
|
+
cli.parse();
|
88
|
+
if (process.argv.includes('--help') ||
|
89
|
+
process.argv.includes('-h') ||
|
90
|
+
process.argv.includes('--version') ||
|
91
|
+
process.argv.includes('-v')) {
|
92
|
+
process.exit(0);
|
93
|
+
}
|
94
|
+
const command = cluster_1.default.isWorker ? workerCli.matchedCommandName : cli.matchedCommandName;
|
95
|
+
const args = cluster_1.default.isWorker ? workerCli.args : cli.args;
|
96
|
+
let options;
|
97
|
+
if (!command || (command !== 'report' && command !== 'test' && command !== 'worker')) {
|
98
|
+
console.error('Error: No known command specified\n');
|
99
|
+
cli.outputHelp();
|
100
|
+
process.exit(1);
|
23
101
|
}
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
if (
|
29
|
-
|
102
|
+
try {
|
103
|
+
options = cluster_1.default.isWorker ? v.parse(types_js_1.WorkerOptionsSchema, workerCli.options) : v.parse(types_js_1.OptionsSchema, cli.options);
|
104
|
+
}
|
105
|
+
catch (error) {
|
106
|
+
if (v.isValiError(error)) {
|
107
|
+
console.error('Options validation failed:');
|
108
|
+
for (const issue of error.issues) {
|
109
|
+
const path = issue.path?.map((p) => p.key).join('.');
|
110
|
+
console.error(` ${path ? `${path}: ` : ''}${issue.message}`);
|
111
|
+
}
|
30
112
|
}
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
113
|
+
else {
|
114
|
+
console.error(error);
|
115
|
+
}
|
116
|
+
console.log();
|
117
|
+
cli.matchedCommand?.outputHelp();
|
118
|
+
process.exit(1);
|
119
|
+
}
|
120
|
+
if (v.is(types_js_1.OptionsSchema, options) && command == 'report' && args.length > 0) {
|
121
|
+
options.reportDir = args[0];
|
122
|
+
options.ui = true;
|
123
|
+
}
|
124
|
+
// Handle browser name for logging
|
125
|
+
if (v.is(types_js_1.WorkerOptionsSchema, options))
|
126
|
+
(0, logger_js_1.setRootName)(options.browser);
|
127
|
+
if (cluster_1.default.isPrimary && 'reporter' in options) {
|
45
128
|
(0, logger_js_1.logger)().warn(`--reporter option has been removed please describe reporter in config file:
|
46
129
|
import { reporters } from 'mocha';
|
47
130
|
|
48
131
|
const config = {
|
49
|
-
reporter: reporters.${
|
50
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
51
|
-
argv.reporter},
|
132
|
+
reporter: reporters.${options.reporter},
|
52
133
|
};
|
53
134
|
|
54
135
|
export default config;
|
55
136
|
`);
|
56
137
|
}
|
57
138
|
// @ts-expect-error: define log level for storybook
|
58
|
-
global.LOGLEVEL =
|
59
|
-
if (
|
139
|
+
global.LOGLEVEL = options.trace ? 'trace' : options.debug ? 'debug' : 'warn';
|
140
|
+
if (options.trace) {
|
60
141
|
(0, logger_js_1.logger)().setDefaultLevel(loglevel_1.default.levels.TRACE);
|
61
142
|
loglevel_1.default.setDefaultLevel(loglevel_1.default.levels.TRACE);
|
62
143
|
}
|
63
|
-
else if (
|
144
|
+
else if (options.debug) {
|
64
145
|
(0, logger_js_1.logger)().setDefaultLevel(loglevel_1.default.levels.DEBUG);
|
65
146
|
loglevel_1.default.setDefaultLevel(loglevel_1.default.levels.DEBUG);
|
66
147
|
}
|
@@ -68,5 +149,5 @@ else {
|
|
68
149
|
(0, logger_js_1.logger)().setDefaultLevel(loglevel_1.default.levels.INFO);
|
69
150
|
loglevel_1.default.setDefaultLevel(loglevel_1.default.levels.INFO);
|
70
151
|
}
|
71
|
-
void (0, index_js_1.default)(
|
152
|
+
void (0, index_js_1.default)(command, options);
|
72
153
|
//# sourceMappingURL=creevey.js.map
|
package/dist/creevey.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"creevey.js","sourceRoot":"","sources":["../src/creevey.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"creevey.js","sourceRoot":"","sources":["../src/creevey.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
/// <reference types="../types/chai" />
|
2
|
+
/// <reference types="../types/global" />
|
2
3
|
export * from './types.js';
|
3
4
|
export { loadStories as browserStoriesProvider } from './server/storybook/providers/browser.js';
|
4
5
|
export { loadStories as hybridStoriesProvider } from './server/storybook/providers/hybrid.js';
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import type { PixelmatchOptions } from 'pixelmatch';
|
2
|
+
import type { ODiffOptions } from 'odiff-bin';
|
3
|
+
export interface TestsConfig {
|
4
|
+
/**
|
5
|
+
* Define pixelmatch diff options
|
6
|
+
* @default { threshold: 0.1, includeAA: false }
|
7
|
+
*/
|
8
|
+
diffOptions: PixelmatchOptions;
|
9
|
+
/**
|
10
|
+
* Define odiff diff options
|
11
|
+
* @default { threshold: 0.1, antialiasing: true }
|
12
|
+
*/
|
13
|
+
odiffOptions: ODiffOptions;
|
14
|
+
/**
|
15
|
+
* Define matcher for visual regression assertion
|
16
|
+
* @default 'pixelmatch'
|
17
|
+
*/
|
18
|
+
comparisonLibrary: 'pixelmatch' | 'odiff';
|
19
|
+
/**
|
20
|
+
* Enables page context reuse across tests for faster execution, though this breaks test isolation.
|
21
|
+
* @default true
|
22
|
+
*/
|
23
|
+
reusePageContext: boolean;
|
24
|
+
}
|
25
|
+
export declare function definePlaywrightTests(config?: Partial<TestsConfig>): void;
|
@@ -0,0 +1,243 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.definePlaywrightTests = definePlaywrightTests;
|
7
|
+
const path_1 = __importDefault(require("path"));
|
8
|
+
const assert_1 = __importDefault(require("assert"));
|
9
|
+
const fs_1 = require("fs");
|
10
|
+
const test_1 = require("@playwright/test");
|
11
|
+
const isEqual_js_1 = __importDefault(require("lodash/isEqual.js"));
|
12
|
+
const types_1 = require("../types");
|
13
|
+
const compare_1 = require("../server/compare");
|
14
|
+
const webdriver_1 = require("../server/webdriver");
|
15
|
+
const helpers_1 = require("./helpers");
|
16
|
+
const cacheDir = process.env.CREEVEY_CACHE_DIR;
|
17
|
+
const defaultConfig = {
|
18
|
+
diffOptions: { threshold: 0.1, includeAA: false },
|
19
|
+
odiffOptions: { threshold: 0.1, antialiasing: true },
|
20
|
+
comparisonLibrary: 'pixelmatch',
|
21
|
+
reusePageContext: true,
|
22
|
+
};
|
23
|
+
// TODO: Use this Storybook function for building args for query params
|
24
|
+
// export const buildArgsParam = (initialArgs: Args | undefined, args: Args): string => {
|
25
|
+
// TODO: Pass globals to story
|
26
|
+
function appendStoryQueryParams(url, storyId) {
|
27
|
+
return `${url}?args=&globals=&id=${storyId}`;
|
28
|
+
}
|
29
|
+
function assertWrapper(assert) {
|
30
|
+
return async function assertImage(actual, imageName) {
|
31
|
+
try {
|
32
|
+
const errorMessage = await assert(actual, imageName);
|
33
|
+
if (errorMessage) {
|
34
|
+
throw new Error(errorMessage);
|
35
|
+
}
|
36
|
+
}
|
37
|
+
catch (error) {
|
38
|
+
if (error instanceof Error) {
|
39
|
+
error.stack = error.stack
|
40
|
+
?.split('\n')
|
41
|
+
.filter((line) => !line.includes('at assertImage'))
|
42
|
+
.join('\n');
|
43
|
+
}
|
44
|
+
throw error;
|
45
|
+
}
|
46
|
+
};
|
47
|
+
}
|
48
|
+
async function takeScreenshot(page, storyId, captureElement, ignoreElements) {
|
49
|
+
const ignore = ignoreElements ? (Array.isArray(ignoreElements) ? ignoreElements : [ignoreElements]) : [];
|
50
|
+
const mask = ignore.map((selector) => page.locator(selector));
|
51
|
+
if (captureElement) {
|
52
|
+
const element = await page.$(captureElement);
|
53
|
+
if (!element)
|
54
|
+
throw new Error(`Capture element '${captureElement}' not found for story '${storyId}'`);
|
55
|
+
return element.screenshot({
|
56
|
+
style: ':root { overflow: hidden !important; }',
|
57
|
+
animations: 'disabled',
|
58
|
+
mask,
|
59
|
+
});
|
60
|
+
}
|
61
|
+
else {
|
62
|
+
return page.screenshot({
|
63
|
+
animations: 'disabled',
|
64
|
+
mask,
|
65
|
+
});
|
66
|
+
}
|
67
|
+
}
|
68
|
+
// TODO: To support parallel tests, we need to define each test suite in separate file
|
69
|
+
// TODO: How to support custom interactions for different tests
|
70
|
+
// Main function to define tests using Playwright's API
|
71
|
+
function definePlaywrightTests(config) {
|
72
|
+
(0, assert_1.default)(cacheDir, 'Cache directory not found');
|
73
|
+
const stories = JSON.parse((0, fs_1.readFileSync)(path_1.default.join(cacheDir, 'stories.json'), 'utf-8'));
|
74
|
+
let globals = {};
|
75
|
+
let reusedPage;
|
76
|
+
const { diffOptions, odiffOptions, comparisonLibrary, reusePageContext } = {
|
77
|
+
...defaultConfig,
|
78
|
+
...config,
|
79
|
+
};
|
80
|
+
async function updateGlobals(page, storybookGlobals) {
|
81
|
+
if (storybookGlobals && typeof storybookGlobals === 'object' && !(0, isEqual_js_1.default)(globals, storybookGlobals)) {
|
82
|
+
globals = storybookGlobals;
|
83
|
+
await page.evaluate((globals) => {
|
84
|
+
window.__STORYBOOK_ADDONS_CHANNEL__.emit(types_1.StorybookEvents.UPDATE_GLOBALS, { globals });
|
85
|
+
}, globals);
|
86
|
+
}
|
87
|
+
}
|
88
|
+
test_1.test.describe('Creevey Tests', () => {
|
89
|
+
const imagesContext = {
|
90
|
+
attachments: [],
|
91
|
+
testFullPath: [],
|
92
|
+
images: {},
|
93
|
+
};
|
94
|
+
let assertImage;
|
95
|
+
test_1.test.beforeAll('Setup images context', async ({ browser }, { project }) => {
|
96
|
+
const { snapshotDir, outputDir } = project;
|
97
|
+
if (reusePageContext) {
|
98
|
+
const storybookUrl = project.use.baseURL;
|
99
|
+
(0, assert_1.default)(storybookUrl, 'Storybook URL not found');
|
100
|
+
reusedPage = await browser.newPage();
|
101
|
+
await reusedPage.goto((0, webdriver_1.appendIframePath)(storybookUrl), { waitUntil: 'networkidle', timeout: 60000 });
|
102
|
+
await (0, helpers_1.waitForStorybookReady)(reusedPage);
|
103
|
+
}
|
104
|
+
if (comparisonLibrary === 'pixelmatch') {
|
105
|
+
const { default: pixelmatch } = await import('pixelmatch');
|
106
|
+
assertImage = assertWrapper((0, compare_1.getPixelmatchAssert)(pixelmatch, imagesContext, { screenDir: snapshotDir, reportDir: outputDir, diffOptions }));
|
107
|
+
}
|
108
|
+
else {
|
109
|
+
const { compare } = await import('odiff-bin');
|
110
|
+
assertImage = assertWrapper((0, compare_1.getOdiffAssert)(compare, imagesContext, { screenDir: snapshotDir, reportDir: outputDir, odiffOptions }));
|
111
|
+
}
|
112
|
+
});
|
113
|
+
test_1.test.beforeEach('Switch story', async ({ page }, { annotations, project }) => {
|
114
|
+
const { description: storyId } = annotations.find((annotation) => annotation.type === 'storyId') ?? {};
|
115
|
+
(0, assert_1.default)(storyId, 'Cannot get storyId. It seems like inner test annotation is missing');
|
116
|
+
const story = stories[storyId];
|
117
|
+
(0, assert_1.default)(story, `Story '${storyId}' not found in stories cache`);
|
118
|
+
const { title, name, parameters } = story;
|
119
|
+
const { waitForReady: shouldWaitForReady } = (parameters.creevey ?? {});
|
120
|
+
const storybookGlobals = project.metadata.storybookGlobals;
|
121
|
+
imagesContext.attachments = [];
|
122
|
+
imagesContext.testFullPath = [...title.split('/').map((x) => x.trim()), name, project.name];
|
123
|
+
imagesContext.images = {};
|
124
|
+
if (!reusePageContext) {
|
125
|
+
const storybookUrl = project.use.baseURL;
|
126
|
+
(0, assert_1.default)(storybookUrl, 'Storybook URL not found');
|
127
|
+
await page.goto(appendStoryQueryParams((0, webdriver_1.appendIframePath)(storybookUrl), storyId), {
|
128
|
+
waitUntil: 'networkidle',
|
129
|
+
timeout: 60000,
|
130
|
+
});
|
131
|
+
await (0, helpers_1.waitForStorybookReady)(page);
|
132
|
+
// TODO: Pass globals to story
|
133
|
+
await updateGlobals(page, storybookGlobals);
|
134
|
+
return;
|
135
|
+
}
|
136
|
+
// 1. Update Storybook Globals
|
137
|
+
await updateGlobals(reusedPage, storybookGlobals);
|
138
|
+
// 2. Reset Mouse Position
|
139
|
+
await reusedPage.mouse.move(0, 0);
|
140
|
+
// 3. Select Story
|
141
|
+
const errorMessage = await reusedPage.evaluate(async ({ storyId, StorybookEvents, shouldWaitForReady }) => {
|
142
|
+
// TODO: DRY with withCreevey.ts
|
143
|
+
// NOTE: Copy-pasted from withCreevey.ts
|
144
|
+
const channel = window.__STORYBOOK_ADDONS_CHANNEL__;
|
145
|
+
const waitForReady = shouldWaitForReady
|
146
|
+
? new Promise((resolve) => (window.__CREEVEY_SET_READY_FOR_CAPTURE__ = resolve))
|
147
|
+
: Promise.resolve();
|
148
|
+
let rejectCallback;
|
149
|
+
const renderErrorPromise = new Promise((_resolve, reject) => (rejectCallback = reject));
|
150
|
+
function errorHandler({ title, description }) {
|
151
|
+
rejectCallback({
|
152
|
+
message: title,
|
153
|
+
stack: description,
|
154
|
+
});
|
155
|
+
}
|
156
|
+
function exceptionHandler(exception) {
|
157
|
+
rejectCallback(exception);
|
158
|
+
}
|
159
|
+
function removeErrorHandlers() {
|
160
|
+
channel.off(StorybookEvents.STORY_ERRORED, errorHandler);
|
161
|
+
channel.off(StorybookEvents.STORY_THREW_EXCEPTION, errorHandler);
|
162
|
+
}
|
163
|
+
channel.once(StorybookEvents.STORY_ERRORED, errorHandler);
|
164
|
+
channel.once(StorybookEvents.STORY_THREW_EXCEPTION, exceptionHandler);
|
165
|
+
let resolveCallback;
|
166
|
+
const storyRenderedPromise = new Promise((resolve) => (resolveCallback = resolve));
|
167
|
+
function renderHandler() {
|
168
|
+
resolveCallback();
|
169
|
+
}
|
170
|
+
function removeRenderHandlers() {
|
171
|
+
channel.off(StorybookEvents.STORY_RENDERED, renderHandler);
|
172
|
+
}
|
173
|
+
channel.once(StorybookEvents.STORY_RENDERED, renderHandler);
|
174
|
+
setTimeout(() => {
|
175
|
+
channel.emit(StorybookEvents.SET_CURRENT_STORY, { storyId });
|
176
|
+
}, 0);
|
177
|
+
try {
|
178
|
+
await Promise.race([renderErrorPromise, Promise.all([storyRenderedPromise, waitForReady])]);
|
179
|
+
}
|
180
|
+
catch (reason) {
|
181
|
+
// NOTE Event `STORY_THREW_EXCEPTION` triggered only in react and vue frameworks and return Error instance
|
182
|
+
// NOTE Event `STORY_ERRORED` return error-like object without `name` field
|
183
|
+
const errorMessage = reason instanceof Error
|
184
|
+
? (reason.stack ?? reason.message)
|
185
|
+
: (0, types_1.isObject)(reason)
|
186
|
+
? `${reason.message}\n ${reason.stack}`
|
187
|
+
: reason;
|
188
|
+
return errorMessage;
|
189
|
+
}
|
190
|
+
finally {
|
191
|
+
removeErrorHandlers();
|
192
|
+
removeRenderHandlers();
|
193
|
+
}
|
194
|
+
return null;
|
195
|
+
}, { storyId: story.id, StorybookEvents: types_1.StorybookEvents, shouldWaitForReady });
|
196
|
+
if (errorMessage) {
|
197
|
+
throw new Error(`Failed to select story '${story.id}': ${errorMessage}`);
|
198
|
+
}
|
199
|
+
});
|
200
|
+
test_1.test.afterEach('Save screenshot', () => {
|
201
|
+
const { name: projectName } = test_1.test.info().project;
|
202
|
+
// TODO: Use another way to handle attachments
|
203
|
+
// NOTE: Don't need to copy files for assertImage, because it's done internally
|
204
|
+
const { actual, diff, expect } = imagesContext.images[projectName] ?? {};
|
205
|
+
for (const image of imagesContext.attachments) {
|
206
|
+
switch (true) {
|
207
|
+
case image.includes('actual') && !!actual: {
|
208
|
+
test_1.test.info().attachments.push({ name: actual, path: image, contentType: 'image/png' });
|
209
|
+
// await test.info().attach(actual, { path: image });
|
210
|
+
break;
|
211
|
+
}
|
212
|
+
case image.includes('expect') && !!expect: {
|
213
|
+
test_1.test.info().attachments.push({ name: expect, path: image, contentType: 'image/png' });
|
214
|
+
// await test.info().attach(expect, { path: image });
|
215
|
+
break;
|
216
|
+
}
|
217
|
+
case image.includes('diff') && !!diff: {
|
218
|
+
test_1.test.info().attachments.push({ name: diff, path: image, contentType: 'image/png' });
|
219
|
+
// await test.info().attach(diff, { path: image });
|
220
|
+
break;
|
221
|
+
}
|
222
|
+
}
|
223
|
+
}
|
224
|
+
});
|
225
|
+
for (const story of Object.values(stories)) {
|
226
|
+
const { name, title, parameters } = story;
|
227
|
+
const { captureElement, ignoreElements } = (parameters.creevey ?? {});
|
228
|
+
test_1.test.describe(title, () => {
|
229
|
+
// TODO: Support creevey.skip
|
230
|
+
(0, test_1.test)(name, { annotation: [{ type: 'storyId', description: story.id }] }, async ({ page }) => {
|
231
|
+
// 4. Take Screenshot
|
232
|
+
const screenshot = await takeScreenshot(reusePageContext ? reusedPage : page, story.id, captureElement, ignoreElements);
|
233
|
+
// TODO: Support this
|
234
|
+
// NOTE: Bear in mind that page.locator('#root > *') is not working
|
235
|
+
// await expect(page.locator(captureElement)).toHaveScreenshot(name);
|
236
|
+
// 5. Assert Image
|
237
|
+
await assertImage(screenshot);
|
238
|
+
});
|
239
|
+
});
|
240
|
+
}
|
241
|
+
});
|
242
|
+
}
|
243
|
+
//# sourceMappingURL=generator.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/playwright/generator.ts"],"names":[],"mappings":"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"}
|