Skip to content

Commit

Permalink
Squashed commit of the following:
Browse files Browse the repository at this point in the history
commit e121c47
Author: ShaMan123 <shacharnen@gmail.com>
Date:   Sun Sep 11 12:12:40 2022 +0300

    checkout

commit 5ce9d1c
Author: ShaMan123 <shacharnen@gmail.com>
Date:   Sun Sep 11 12:09:08 2022 +0300

    fix(): golden generation from browser

    await all async tasks

commit 1672b59
Author: ShaMan123 <shacharnen@gmail.com>
Date:   Sun Sep 11 11:45:38 2022 +0300

    fix(): filename is truncated by busboy
  • Loading branch information
ShaMan123 committed Sep 11, 2022
1 parent 3b72343 commit 6d39669
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 54 deletions.
4 changes: 2 additions & 2 deletions test/GoldensServer.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ function startGoldensServer() {
res.end(JSON.stringify({ exists: fs.existsSync(goldenPath) }));
}
else if (req.method.toUpperCase() === 'POST') {
const { files: [{ rawData, filename }] } = await parseRequest(req);
const goldenPath = path.resolve(wd, 'test', 'visual', 'golden', filename);
const { files: [{ rawData }], fields: { filename } } = await parseRequest(req);
const goldenPath = path.resolve(wd, 'test', 'visual', 'golden', filename.split('/golden/')[1]);
console.log(chalk.gray('[info]'), `creating golden ${path.relative(wd, goldenPath)}`);
fs.writeFileSync(goldenPath, rawData, { encoding: 'binary' });
res.end();
Expand Down
118 changes: 66 additions & 52 deletions test/lib/visualTestLoop.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
(function(exports) {

exports.getFixture = function(name, original, callback) {
getImage(getFixtureName(name), original, callback);
exports.getFixture = async function(name, original, callback) {
callback(await getImage(getFixtureName(name), original));
};

exports.getAsset = function(name, callback) {
Expand Down Expand Up @@ -69,41 +69,56 @@
fs.writeFileSync(plainFileName, dataUrl, { encoding: 'base64' });
}
else if (original) {
original.toBlob(blob => {
const formData = new FormData();
formData.append('file', blob, filename);
const request = new XMLHttpRequest();
request.open('POST', '/goldens', true);
request.send(formData);
return new Promise((resolve, reject) => {
return original.toBlob(blob => {
const formData = new FormData();
formData.append('file', blob, filename);
formData.append('filename', filename);
const request = new XMLHttpRequest();
request.open('POST', '/goldens', true);
request.onreadystatechange = () => {
if (request.readyState === XMLHttpRequest.DONE) {
const status = request.status;
if (status === 0 || (status >= 200 && status < 400)) {
resolve();
} else {
reject();
}
}
};
request.send(formData);
});
}, 'image/png');
}
}

function getImage(filename, original, callback) {
async function getImage(filename, original) {
if (fabric.isLikelyNode && original) {
var plainFileName = filename.replace('file://', '');
if (!fs.existsSync(plainFileName)) {
generateGolden(filename, original);
}
}
else if (original) {
fetch(`/goldens/${filename}`, { method: 'GET' })
await fetch(`/goldens/${filename}`, { method: 'GET' })
.then(res => res.json())
.then(res => {
!res.exists && generateGolden(filename, original);
});
.then(res => !res.exists && generateGolden(filename, original));
}
var img = fabric.document.createElement('img');
img.onload = function() {
img.onload = null;
callback(img, false);
};
img.onerror = function(err) {
img.onerror = null;
callback(img, true);
console.log('Image loading errored', err);
};
img.src = filename;
return new Promise((resolve, reject) => {
const img = fabric.document.createElement('img');
img.onload = function () {
img.onerror = null;
img.onload = null;
resolve(img);
};
img.onerror = function (err) {
img.onerror = null;
img.onload = null;
reject(err);
};
img.src = filename;
});

}

exports.visualTestLoop = function(QUnit) {
Expand Down Expand Up @@ -146,7 +161,7 @@
QUnit.test(testName, function(assert) {
var done = assert.async();
var fabricCanvas = createCanvasForTest(testObj);
code(fabricCanvas, function(renderedCanvas) {
code(fabricCanvas, async function (renderedCanvas) {
var width = renderedCanvas.width;
var height = renderedCanvas.height;
var totalPixels = width * height;
Expand All @@ -156,34 +171,33 @@
canvas.height = height;
var ctx = canvas.getContext('2d');
var output = ctx.getImageData(0, 0, width, height);
getImage(getGoldeName(golden), renderedCanvas, function(goldenImage) {
ctx.drawImage(goldenImage, 0, 0);
visualCallback.addArguments({
enabled: true,
golden: canvas,
fabric: imageDataCanvas,
diff: output,
goldenName: golden
});
var imageDataGolden = ctx.getImageData(0, 0, width, height).data;
var differentPixels = _pixelMatch(imageDataCanvas.data, imageDataGolden, output.data, width, height, pixelmatchOptions);
var percDiff = differentPixels / totalPixels * 100;
var okDiff = totalPixels * percentage;
var isOK = differentPixels <= okDiff;
assert.ok(
isOK,
testName + ' [' + golden + '] has too many different pixels ' + differentPixels + '(' + okDiff + ') representing ' + percDiff + '% (>' + (percentage * 100) + '%)'
);
if (!isOK) {
var stringa = imageDataToChalk(output);
console.log(stringa);
}
if ((!isOK && QUnit.debugVisual) || QUnit.recreateVisualRefs) {
generateGolden(getGoldeName(golden), renderedCanvas);
}
fabricCanvas.dispose();
done();
const goldenImage = await getImage(getGoldeName(golden), renderedCanvas);
ctx.drawImage(goldenImage, 0, 0);
visualCallback.addArguments({
enabled: true,
golden: canvas,
fabric: imageDataCanvas,
diff: output,
goldenName: golden
});
var imageDataGolden = ctx.getImageData(0, 0, width, height).data;
var differentPixels = _pixelMatch(imageDataCanvas.data, imageDataGolden, output.data, width, height, pixelmatchOptions);
var percDiff = differentPixels / totalPixels * 100;
var okDiff = totalPixels * percentage;
var isOK = differentPixels <= okDiff;
assert.ok(
isOK,
testName + ' [' + golden + '] has too many different pixels ' + differentPixels + '(' + okDiff + ') representing ' + percDiff + '% (>' + (percentage * 100) + '%)'
);
if (!isOK) {
var stringa = imageDataToChalk(output);
console.log(stringa);
}
if ((!isOK && QUnit.debugVisual) || QUnit.recreateVisualRefs) {
generateGolden(getGoldeName(golden), renderedCanvas);
}
fabricCanvas.dispose();
done();
});
});
}
Expand Down

0 comments on commit 6d39669

Please sign in to comment.