|
| 1 | +/* global render, ImageData */ |
| 2 | +const {chromium} = require('playwright-chromium'); |
| 3 | +const test = require('tap').test; |
| 4 | +const path = require('path'); |
| 5 | + |
| 6 | +const indexHTML = path.resolve(__dirname, 'index.html'); |
| 7 | + |
| 8 | +// immediately invoked async function to let us wait for each test to finish before starting the next. |
| 9 | +(async () => { |
| 10 | + const browser = await chromium.launch(); |
| 11 | + const page = await browser.newPage(); |
| 12 | + |
| 13 | + await page.goto(`file://${indexHTML}`); |
| 14 | + |
| 15 | + await test('SVG skin size set properly', async t => { |
| 16 | + t.plan(1); |
| 17 | + const skinSize = await page.evaluate(() => { |
| 18 | + const skinID = render.createSVGSkin(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 100"></svg>`); |
| 19 | + return render.getSkinSize(skinID); |
| 20 | + }); |
| 21 | + t.same(skinSize, [50, 100]); |
| 22 | + }); |
| 23 | + |
| 24 | + await test('Bitmap skin size set correctly', async t => { |
| 25 | + t.plan(1); |
| 26 | + const skinSize = await page.evaluate(() => { |
| 27 | + // Bitmap costumes are double resolution, so double the ImageData size |
| 28 | + const skinID = render.createBitmapSkin(new ImageData(100, 200), 2); |
| 29 | + return render.getSkinSize(skinID); |
| 30 | + }); |
| 31 | + t.same(skinSize, [50, 100]); |
| 32 | + }); |
| 33 | + |
| 34 | + await test('Pen skin size set correctly', async t => { |
| 35 | + t.plan(1); |
| 36 | + const skinSize = await page.evaluate(() => { |
| 37 | + const skinID = render.createPenSkin(); |
| 38 | + return render.getSkinSize(skinID); |
| 39 | + }); |
| 40 | + const nativeSize = await page.evaluate(() => render.getNativeSize()); |
| 41 | + t.same(skinSize, nativeSize); |
| 42 | + }); |
| 43 | + |
| 44 | + await test('Text bubble skin size set correctly', async t => { |
| 45 | + t.plan(1); |
| 46 | + const skinSize = await page.evaluate(() => { |
| 47 | + const skinID = render.createTextSkin('say', 'Hello', false); |
| 48 | + return render.getSkinSize(skinID); |
| 49 | + }); |
| 50 | + // The subtleties in font rendering may cause the size of the text bubble to vary, so just make sure it's not 0 |
| 51 | + t.notSame(skinSize, [0, 0]); |
| 52 | + }); |
| 53 | + |
| 54 | + // close the browser window we used |
| 55 | + await browser.close(); |
| 56 | +})().catch(err => { |
| 57 | + // Handle promise rejections by exiting with a nonzero code to ensure that tests don't erroneously pass |
| 58 | + // eslint-disable-next-line no-console |
| 59 | + console.error(err.message); |
| 60 | + process.exit(1); |
| 61 | +}); |
0 commit comments