Skip to content

Commit b4c5abe

Browse files
committed
Refactor script
1 parent 96977ba commit b4c5abe

File tree

1 file changed

+67
-115
lines changed

1 file changed

+67
-115
lines changed

test/image/compare_pixels_test.js

Lines changed: 67 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
var minimist = require('minimist');
2-
var pixelmatch = require('pixelmatch');
3-
var PNG = require('pngjs').PNG;
4-
var fs = require('fs');
5-
6-
var constants = require('../../tasks/util/constants');
7-
var common = require('../../tasks/util/common');
8-
var getMockList = require('./assets/get_mock_list');
9-
var getImagePaths = require('./assets/get_image_paths');
1+
const common = require('../../tasks/util/common');
2+
const constants = require('../../tasks/util/constants');
3+
const getImagePaths = require('./assets/get_image_paths');
4+
const getMockList = require('./assets/get_mock_list');
5+
const fs = require('fs');
6+
const minimist = require('minimist');
7+
const pixelmatch = require('pixelmatch');
8+
const { PNG } = require('pngjs');
109

1110
fs.mkdirSync(constants.pathToTestImagesDiff, { recursive: true });
1211

@@ -35,47 +34,59 @@ fs.mkdirSync(constants.pathToTestImagesDiff, { recursive: true });
3534
*
3635
*/
3736

38-
var argv = minimist(process.argv.slice(2), {});
37+
const argv = minimist(process.argv.slice(2), {});
3938

4039
// If no pattern is provided, all mocks are compared
41-
if (argv._.length === 0) {
42-
argv._.push('');
43-
}
40+
if (argv._.length === 0) argv._.push('');
4441

4542
// Build list of mocks to compare
46-
var allMockList = [];
47-
var mathjax3;
48-
var virtualWebgl = false;
49-
argv._.forEach(function (pattern) {
43+
let allMockList = [];
44+
let mathjax3 = false;
45+
let virtualWebgl = false;
46+
argv._.forEach((pattern) => {
5047
if (pattern === 'mathjax3') {
5148
mathjax3 = true;
5249
} else if (pattern === 'virtual-webgl') {
5350
virtualWebgl = true;
5451
allMockList = getMockList('');
5552
} else {
56-
var mockList = getMockList(pattern);
57-
58-
if (mockList.length === 0) {
59-
throw 'No mocks found with pattern ' + pattern;
60-
}
53+
const mockList = getMockList(pattern);
54+
if (mockList.length === 0) throw 'No mocks found with pattern ' + pattern;
6155

6256
allMockList = allMockList.concat(mockList);
6357
}
6458
});
6559

66-
var blacklist = [
60+
const skipped = new Set();
61+
const failed = new Set();
62+
const disallowList = new Set([
6763
'map_angles',
6864
'map_stamen-style',
6965
'map_predefined-styles2',
7066
'map_scattercluster',
7167
'map_fonts-supported-open-sans',
7268
'map_fonts-supported-open-sans-weight'
73-
];
69+
]);
70+
const flakyList = new Set(['gl3d_bunny-hull']);
71+
const flakyListMaps = new Set([
72+
// more flaky
73+
'map_density0-legend',
74+
'map_osm-style',
75+
'map_predefined-styles1',
76+
'map_predefined-styles2'
77+
]);
78+
const flakyListVirtualWebgl = new Set([
79+
'gl3d_ibm-plot',
80+
'gl3d_isosurface_2surfaces-checker_spaceframe',
81+
'gl3d_opacity-scaling-spikes',
82+
'gl3d_cone-wind',
83+
'gl3d_isosurface_math',
84+
'gl3d_scatter3d-blank-text',
85+
'gl3d_mesh3d_surface3d_scatter3d_line3d_error3d_log_reversed_ranges'
86+
]);
7487

7588
if (virtualWebgl) {
76-
allMockList = allMockList.filter(function (a) {
77-
return a.slice(0, 2) === 'gl';
78-
});
89+
allMockList = allMockList.filter((a) => a.startsWith('gl'));
7990
}
8091

8192
if (mathjax3) {
@@ -90,121 +101,62 @@ if (mathjax3) {
90101
'ternary-mathjax-title-place-subtitle'
91102
];
92103
}
104+
allMockList = new Set(allMockList);
93105

94-
// To get rid of duplicates
95-
function unique(value, index, self) {
96-
return self.indexOf(value) === index;
97-
}
98-
allMockList = allMockList.filter(unique);
99-
100-
var skipped = [];
101-
var failed = [];
102-
var fail = function (mockName) {
103-
if (failed.indexOf(mockName) === -1) {
104-
failed.push(mockName);
105-
}
106-
};
107-
108-
for (var i = 0; i < allMockList.length; i++) {
109-
var mockName = allMockList[i];
110-
111-
// skip blacklist
112-
if (blacklist.indexOf(mockName) !== -1) continue;
106+
for (let mockName of allMockList) {
107+
if (disallowList.has(mockName)) continue;
113108

114-
var flakyMap =
115-
[
116-
// more flaky
117-
'map_density0-legend',
118-
'map_osm-style',
119-
'map_predefined-styles1',
120-
'map_predefined-styles2'
121-
].indexOf(mockName) !== -1;
122-
123-
var otherFlaky =
124-
[
125-
// list flaky mocks other than maps:
126-
'gl3d_bunny-hull'
127-
].indexOf(mockName) !== -1;
128-
129-
var threshold = flakyMap ? 1 : otherFlaky ? 0.15 : 0;
109+
let threshold;
110+
if (flakyListMaps.has(mockName)) threshold = 1;
111+
else if (flakyList.has(mockName)) threshold = 0.15;
112+
else threshold = 0;
130113

131114
if (mathjax3) mockName = 'mathjax3___' + mockName;
132115

133-
var imagePaths = getImagePaths(mockName);
134-
var base = imagePaths.baseline;
135-
var test = imagePaths.test;
116+
const { baseline: base, test, diff } = getImagePaths(mockName);
136117

137118
if (!common.doesFileExist(test) && !mathjax3) {
138119
console.log('- skip:', mockName);
139-
skipped.push(mockName);
120+
skipped.add(mockName);
140121
continue;
141122
}
142123
console.log('+ test:', mockName);
143124

144-
var img0 = PNG.sync.read(fs.readFileSync(base));
145-
var img1 = PNG.sync.read(fs.readFileSync(test));
146-
var s0, s1, key;
147-
148-
key = 'width';
149-
s0 = img0[key];
150-
s1 = img0[key];
151-
if (s0 !== s1) {
152-
console.error(key + 's do not match: ' + s0 + ' vs ' + s1);
153-
fail(mockName);
154-
}
155-
156-
key = 'height';
157-
s0 = img0[key];
158-
s1 = img0[key];
159-
if (s0 !== s1) {
160-
console.error(key + 's do not match: ' + s0 + ' vs ' + s1);
161-
fail(mockName);
125+
const img0 = PNG.sync.read(fs.readFileSync(base));
126+
const img1 = PNG.sync.read(fs.readFileSync(test));
127+
for (const key of ['height', 'width']) {
128+
const length0 = img0[key];
129+
const length1 = img1[key];
130+
if (length0 !== length1) {
131+
console.error(key + 's do not match: ' + length0 + ' vs ' + length1);
132+
failed.add(mockName);
133+
}
162134
}
163135

164-
var width = img0.width;
165-
var height = img0.height;
166-
167-
var diff = new PNG({
168-
width: width,
169-
height: height
170-
});
171-
172136
if (virtualWebgl) {
173-
threshold = Math.max(0.4, threshold);
174-
if (
175-
[
176-
'gl3d_ibm-plot',
177-
'gl3d_isosurface_2surfaces-checker_spaceframe',
178-
'gl3d_opacity-scaling-spikes',
179-
'gl3d_cone-wind',
180-
'gl3d_isosurface_math',
181-
'gl3d_scatter3d-blank-text',
182-
'gl3d_mesh3d_surface3d_scatter3d_line3d_error3d_log_reversed_ranges'
183-
].indexOf(mockName) !== -1
184-
)
185-
threshold = 0.7;
137+
if (flakyListVirtualWebgl.has(mockName)) threshold = 0.7;
138+
else threshold = Math.max(0.4, threshold);
186139
}
187140

188-
var numDiffPixels = pixelmatch(img0.data, img1.data, diff.data, width, height, {
189-
threshold: threshold
190-
});
141+
const { height, width } = img0;
142+
const imageDiff = new PNG({ width, height });
143+
const numDiffPixels = pixelmatch(img0.data, img1.data, imageDiff.data, width, height, { threshold });
191144

192145
if (numDiffPixels) {
193-
fs.writeFileSync(imagePaths.diff, PNG.sync.write(diff));
194-
146+
fs.writeFileSync(diff, PNG.sync.write(imageDiff));
195147
console.error('pixels do not match: ' + numDiffPixels);
196-
fail(mockName);
148+
failed.add(mockName);
197149
} else {
198150
// remove when identical
199-
fs.unlinkSync(imagePaths.test);
151+
fs.unlinkSync(test);
200152
}
201153
}
202154

203-
if (failed.length || skipped.length) {
155+
if (failed.size || skipped.size) {
204156
throw JSON.stringify(
205157
{
206-
failed: failed,
207-
skipped: skipped
158+
failed: Array.from(failed),
159+
skipped: Array.from(skipped)
208160
},
209161
null,
210162
2

0 commit comments

Comments
 (0)