/* global render, ImageData */ const {chromium} = require('playwright-chromium'); const test = require('tap').test; const path = require('path'); const indexHTML = path.resolve(__dirname, 'index.html'); // immediately invoked async function to let us wait for each test to finish before starting the next. (async () => { const browser = await chromium.launch(); const page = await browser.newPage(); await page.goto(`file://${indexHTML}`); await test('SVG skin size set properly', async t => { t.plan(1); const skinSize = await page.evaluate(() => { const skinID = render.createSVGSkin(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 100"></svg>`); return render.getSkinSize(skinID); }); t.same(skinSize, [50, 100]); }); await test('Bitmap skin size set correctly', async t => { t.plan(1); const skinSize = await page.evaluate(() => { // Bitmap costumes are double resolution, so double the ImageData size const skinID = render.createBitmapSkin(new ImageData(100, 200), 2); return render.getSkinSize(skinID); }); t.same(skinSize, [50, 100]); }); await test('Pen skin size set correctly', async t => { t.plan(1); const skinSize = await page.evaluate(() => { const skinID = render.createPenSkin(); return render.getSkinSize(skinID); }); const nativeSize = await page.evaluate(() => render.getNativeSize()); t.same(skinSize, nativeSize); }); await test('Text bubble skin size set correctly', async t => { t.plan(1); const skinSize = await page.evaluate(() => { const skinID = render.createTextSkin('say', 'Hello', false); return render.getSkinSize(skinID); }); // The subtleties in font rendering may cause the size of the text bubble to vary, so just make sure it's not 0 t.notSame(skinSize, [0, 0]); }); // close the browser window we used await browser.close(); })().catch(err => { // Handle promise rejections by exiting with a nonzero code to ensure that tests don't erroneously pass // eslint-disable-next-line no-console console.error(err.message); process.exit(1); });