Rendering tests render message

This commit is contained in:
Frederic Junod
2018-11-14 21:37:45 +01:00
parent aa841c7de2
commit f295a97894
2 changed files with 19 additions and 17 deletions

View File

@@ -18,4 +18,4 @@ new Map({
}) })
}); });
render(); render('A single layer with a XZY source');

View File

@@ -130,7 +130,7 @@ async function match(actual, expected) {
return count / (width * height); return count / (width * height);
} }
async function assertScreenshotsMatch(entry) { async function getScreenshotsMismatch(entry) {
const actual = getActualScreenshotPath(entry); const actual = getActualScreenshotPath(entry);
const expected = getExpectedScreenshotPath(entry); const expected = getExpectedScreenshotPath(entry);
let mismatch, error; let mismatch, error;
@@ -139,36 +139,32 @@ async function assertScreenshotsMatch(entry) {
} catch (err) { } catch (err) {
error = err; error = err;
} }
if (error) { return {error, mismatch};
return error;
}
if (mismatch) {
return new Error(`${entry} mistmatch: ${mismatch}`);
}
} }
let handleRender; let handleRender;
async function exposeRender(page) { async function exposeRender(page) {
await page.exposeFunction('render', () => { await page.exposeFunction('render', (message) => {
if (!handleRender) { if (!handleRender) {
throw new Error('No render handler set for current page'); throw new Error('No render handler set for current page');
} }
handleRender(); handleRender(message);
}); });
} }
async function renderPage(page, entry, options) { async function renderPage(page, entry, options) {
const renderCalled = new Promise(resolve => { const renderCalled = new Promise(resolve => {
handleRender = () => { handleRender = (message) => {
handleRender = null; handleRender = null;
resolve(); resolve(message);
}; };
}); });
options.log.debug('navigating', entry); options.log.debug('navigating', entry);
await page.goto(`http://${options.host}:${options.port}${getHref(entry)}`, {waitUntil: 'networkidle0'}); await page.goto(`http://${options.host}:${options.port}${getHref(entry)}`, {waitUntil: 'networkidle0'});
await renderCalled; const message = await renderCalled;
options.log.debug('screenshot', entry); options.log.debug('screenshot', entry);
await page.screenshot({path: getActualScreenshotPath(entry)}); await page.screenshot({path: getActualScreenshotPath(entry)});
return message;
} }
async function touch(filepath) { async function touch(filepath) {
@@ -186,20 +182,26 @@ async function copyActualToExpected(entry) {
async function renderEach(page, entries, options) { async function renderEach(page, entries, options) {
let fail = false; let fail = false;
for (const entry of entries) { for (const entry of entries) {
await renderPage(page, entry, options); let message = await renderPage(page, entry, options);
message = message !== undefined ? message : entry;
if (options.fix) { if (options.fix) {
await copyActualToExpected(entry); await copyActualToExpected(entry);
continue; continue;
} }
const error = await assertScreenshotsMatch(entry); const {error, mismatch} = await getScreenshotsMismatch(entry);
if (error) { if (error) {
options.log.error(error); options.log.error(error);
fail = true; fail = true;
continue; continue;
} }
if (mismatch > 0) {
options.log.error(`checking '${message}': mismatch ${mismatch.toFixed(3)}`);
fail = true;
} else {
options.log.info(`checking '${message}': ok`);
await touch(getPassFilePath(entry)); await touch(getPassFilePath(entry));
} }
}
return fail; return fail;
} }