forked from Kitware/vtk-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
testUtils.js
102 lines (84 loc) · 2.17 KB
/
testUtils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import resemble from 'resemblejs';
let REMOVE_DOM_ELEMENTS = true;
function compareImages(image, baselines, testName, tapeContext, threshold = 0.5, nextCallback = null) {
const nbBaselines = baselines.length;
let minDelta = 100;
let isSameDimensions = false;
function done() {
tapeContext.ok(minDelta < threshold, `Matching image - delta ${minDelta}%`);
tapeContext.ok(isSameDimensions, 'Image match resolution');
if (minDelta >= threshold) {
tapeContext.fail(`<img src="${image}" width="100" /> vs <img src="${baselines[0]}" width="100" />`);
}
if (nextCallback) {
nextCallback();
} else {
tapeContext.end();
}
}
baselines.forEach((baseline, idx) => {
resemble(baseline).compareTo(image).onComplete((data) => {
minDelta = (minDelta < data.misMatchPercentage) ? minDelta : data.misMatchPercentage;
isSameDimensions = isSameDimensions || data.isSameDimensions;
if (idx + 1 === nbBaselines) {
done();
}
});
});
}
function createGarbageCollector(testContext) {
const resources = [];
const domElements = [];
function registerResource(vtkObj, priority = 0) {
resources.push({ vtkObj, priority });
return vtkObj;
}
function registerDOMElement(el) {
domElements.push(el);
return el;
}
function releaseResources() {
// DOM Element handling
if (REMOVE_DOM_ELEMENTS) {
domElements.forEach((el) => {
if (el.parentNode) {
el.parentNode.removeChild(el);
}
});
}
while (domElements.length) {
domElements.pop();
}
// vtkObject handling
resources.sort((a, b) => (b.priority - a.priority));
resources.forEach(({ vtkObj }) => {
if (vtkObj) {
vtkObj.delete();
}
});
while (resources.length) {
resources.pop();
}
// Test end handling
if (testContext) {
testContext.end();
}
}
return {
registerResource,
registerDOMElement,
releaseResources,
};
}
function keepDOM() {
REMOVE_DOM_ELEMENTS = false;
}
function removeDOM() {
REMOVE_DOM_ELEMENTS = true;
}
export default {
compareImages,
createGarbageCollector,
keepDOM,
removeDOM,
};