@brightspace-ui/testing 0.35.1 → 1.1.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/package.json +2 -2
- package/src/browser/vdiff.js +32 -8
- package/src/server/visual-diff-plugin.js +3 -12
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@brightspace-ui/testing",
|
|
3
3
|
"description": "Utilities for testing front-end components and applications",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "1.1.0",
|
|
6
6
|
"repository": "https://github.com/BrightspaceUI/testing.git",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"lint": "eslint . --ext .js",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"eslint": "^8",
|
|
25
25
|
"eslint-config-brightspace": "^0.23",
|
|
26
26
|
"mocha": "^10",
|
|
27
|
-
"sinon": "^
|
|
27
|
+
"sinon": "^16"
|
|
28
28
|
},
|
|
29
29
|
"exports": {
|
|
30
30
|
".": "./src/browser/index.js"
|
package/src/browser/vdiff.js
CHANGED
|
@@ -4,6 +4,7 @@ import { executeServerCommand } from '@web/test-runner-commands';
|
|
|
4
4
|
// start loading fonts early
|
|
5
5
|
[...document.fonts].forEach(font => font.load());
|
|
6
6
|
|
|
7
|
+
const DEFAULT_MARGIN = 10;
|
|
7
8
|
let test;
|
|
8
9
|
|
|
9
10
|
/* eslint-disable no-undef, no-invalid-this */
|
|
@@ -26,7 +27,7 @@ function findTargets(elem) {
|
|
|
26
27
|
return Array.from(nestedTargets).reduce((acc, target) => [...acc, ...findTargets(target)], [elem]);
|
|
27
28
|
}
|
|
28
29
|
|
|
29
|
-
function findLargestRect(elems) {
|
|
30
|
+
function findLargestRect(elems, margin) {
|
|
30
31
|
let largestRect = { left: Number.MAX_SAFE_INTEGER, top: Number.MAX_SAFE_INTEGER, right: 0, bottom: 0 };
|
|
31
32
|
elems.forEach(elem => {
|
|
32
33
|
const targets = findTargets(elem);
|
|
@@ -42,11 +43,29 @@ function findLargestRect(elems) {
|
|
|
42
43
|
}
|
|
43
44
|
});
|
|
44
45
|
});
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
const rect = {
|
|
47
|
+
x: largestRect.left - margin,
|
|
48
|
+
y: largestRect.top - margin,
|
|
49
|
+
width: largestRect.right - largestRect.left + (margin * 2),
|
|
50
|
+
height: largestRect.bottom - largestRect.top + (margin * 2)
|
|
51
|
+
};
|
|
52
|
+
// We need to handle RTL overflow/scroll scenarios because of Playwright limitations
|
|
53
|
+
if (document.documentElement.getAttribute('dir') === 'rtl' && (largestRect.left < 0 || window.scrollX < 0)) {
|
|
54
|
+
rect.x = -1 * largestRect.left - 1;
|
|
55
|
+
rect.width = largestRect.right + margin;
|
|
56
|
+
|
|
57
|
+
if (largestRect.top <= 0) {
|
|
58
|
+
rect.y = window.scrollY;
|
|
59
|
+
rect.height = largestRect.bottom + margin;
|
|
60
|
+
}
|
|
61
|
+
rect.width = Math.min(rect.width, document.documentElement.clientWidth);
|
|
62
|
+
rect.height = Math.min(rect.height, document.documentElement.clientHeight);
|
|
63
|
+
return { rect, fullPage: true };
|
|
64
|
+
}
|
|
65
|
+
return { rect, fullPage: false };
|
|
47
66
|
}
|
|
48
67
|
|
|
49
|
-
async function ScreenshotAndCompare(opts) {
|
|
68
|
+
async function ScreenshotAndCompare(opts = {}) {
|
|
50
69
|
|
|
51
70
|
if (window.d2lTest) {
|
|
52
71
|
document.documentElement.classList.add('screenshot');
|
|
@@ -54,13 +73,18 @@ async function ScreenshotAndCompare(opts) {
|
|
|
54
73
|
}
|
|
55
74
|
|
|
56
75
|
const name = this.test.fullTitle();
|
|
57
|
-
let
|
|
58
|
-
|
|
76
|
+
let fullPage = false,
|
|
77
|
+
rect = null;
|
|
78
|
+
if (this.elem === document) {
|
|
79
|
+
fullPage = true;
|
|
80
|
+
} else {
|
|
59
81
|
const elemsToInclude = [this.elem, ...this.elem.querySelectorAll('.vdiff-include')];
|
|
60
|
-
|
|
82
|
+
const margin = opts.margin ?? DEFAULT_MARGIN;
|
|
83
|
+
({ rect, fullPage } = findLargestRect(elemsToInclude, margin));
|
|
61
84
|
}
|
|
62
85
|
const slowDuration = this.test.slow();
|
|
63
|
-
|
|
86
|
+
|
|
87
|
+
let result = await executeServerCommand('brightspace-visual-diff-compare', { name, fullPage, rect, slowDuration });
|
|
64
88
|
if (result.resizeRequired) {
|
|
65
89
|
this.test.timeout(0);
|
|
66
90
|
result = await executeServerCommand('brightspace-visual-diff-compare-resize', { name });
|
|
@@ -5,7 +5,6 @@ import pixelmatch from 'pixelmatch';
|
|
|
5
5
|
import { PNG } from 'pngjs';
|
|
6
6
|
|
|
7
7
|
const isCI = !!env['CI'];
|
|
8
|
-
const DEFAULT_MARGIN = 10;
|
|
9
8
|
const DEFAULT_TOLERANCE = 0; // TODO: Support tolerance override?
|
|
10
9
|
const METADATA_NAME = '.vdiff.json';
|
|
11
10
|
const ROOT_NAME = '.vdiff';
|
|
@@ -181,21 +180,13 @@ export function visualDiff({ updateGoldens = false, runSubset = false } = {}) {
|
|
|
181
180
|
}
|
|
182
181
|
}
|
|
183
182
|
|
|
184
|
-
const opts = { margin: DEFAULT_MARGIN, ...payload.opts };
|
|
185
183
|
const screenshotOpts = {
|
|
186
184
|
animations: 'disabled',
|
|
187
185
|
path: updateGoldens ? goldenFileName : screenshotFileName
|
|
188
186
|
};
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
screenshotOpts.clip = {
|
|
193
|
-
x: payload.rect.x - opts.margin,
|
|
194
|
-
y: payload.rect.y - opts.margin,
|
|
195
|
-
width: payload.rect.width + (opts.margin * 2),
|
|
196
|
-
height: payload.rect.height + (opts.margin * 2)
|
|
197
|
-
};
|
|
198
|
-
}
|
|
187
|
+
|
|
188
|
+
if (payload.fullPage) screenshotOpts.fullPage = true;
|
|
189
|
+
if (payload.rect) screenshotOpts.clip = payload.rect;
|
|
199
190
|
|
|
200
191
|
const page = session.browser.getPage(session.id);
|
|
201
192
|
await page.screenshot(screenshotOpts);
|