diff --git a/__tests__/e2e.test.js b/__tests__/e2e.test.js new file mode 100644 index 0000000..075fc4d --- /dev/null +++ b/__tests__/e2e.test.js @@ -0,0 +1,69 @@ +const fs = require('fs'); +const path = require('path'); +const assert = require('assert'); +const jimp = require('jimp'); +const pixelmatch = require('pixelmatch'); +const pngjs = require('pngjs'); +const { delay } = require('./../scripts/util/time'); +const { pageList } = require('./../scripts/screen.config'); +const { createScreenshot } = require('../scripts/util/screen'); + +const snapshotDir = path.join(__dirname, 'snapshot'); +const diffDir = path.join(__dirname, 'diff'); +const { PNG } = pngjs; + +async function diff() { + const middlewares = []; + const diffRateList = []; + pageList.forEach((p) => { + middlewares.push(async (ctx = {}, next) => { + const { page, port } = ctx; + const width = p.w; + const height = p.h; + await page.setViewport( { width: p.w, height: p.h } ); + const pageUrl = `http://127.0.0.1:${port}/packages/${p.path || ''}`; + await page.goto(pageUrl); + await delay(p.delay || 100); + const buf = await page.screenshot(); + + const snapshotPicPath = parsePicPath(path.join(snapshotDir, p.path)); + const actual = (await jimp.read(buf)).scale(1).quality(100).bitmap; + const expected = (await jimp.read(fs.readFileSync(snapshotPicPath))).bitmap; + const diffBuf = new PNG({ width, height }); + const failedPixel = pixelmatch(expected.data, actual.data, diffBuf.data, actual.width, actual.height); + const failRate = failedPixel / (width * height); + if (failRate > 0) { + (await jimp.read(diffBuf)).scale(1).quality(100).write(parsePicPath(path.join(diffDir, p.path))); + } + diffRateList.push(failRate); + await next(); + }); + }); + await createScreenshot(middlewares, { baseDir: path.join(__dirname, '..') }); + return diffRateList; +} + +function parsePicPath(pagePath) { + // const picPath = pagePath.replace(/\.html$/, '.jpg'); + const picPath = pagePath + '.jpg'; + return picPath; +} + + + +describe('Screenshot testing', function() { + it('testing...', function(done){ + this.timeout(1000 * 60 * 2); + diff().then((rateList) => { + + assert.ok(Array.isArray(rateList)); + assert.ok(rateList.length > 0); + rateList.forEach((rate) => { + console.log('diff-rate =', rate); + assert.ok(rate < 0.05); + }); + + done(); + }).catch(done); + }); +}); \ No newline at end of file diff --git a/__tests__/snapshot/board/examples/features/test.html.jpg b/__tests__/snapshot/board/examples/features/test.html.jpg new file mode 100644 index 0000000..5c5b0e0 Binary files /dev/null and b/__tests__/snapshot/board/examples/features/test.html.jpg differ diff --git a/__tests__/snapshot/core/examples/features/image.html.jpg b/__tests__/snapshot/core/examples/features/image.html.jpg new file mode 100644 index 0000000..74be356 Binary files /dev/null and b/__tests__/snapshot/core/examples/features/image.html.jpg differ diff --git a/__tests__/snapshot/core/examples/features/rect.html.jpg b/__tests__/snapshot/core/examples/features/rect.html.jpg new file mode 100644 index 0000000..f927f89 Binary files /dev/null and b/__tests__/snapshot/core/examples/features/rect.html.jpg differ diff --git a/__tests__/snapshot/core/examples/features/svg.html.jpg b/__tests__/snapshot/core/examples/features/svg.html.jpg new file mode 100644 index 0000000..68a45cc Binary files /dev/null and b/__tests__/snapshot/core/examples/features/svg.html.jpg differ diff --git a/__tests__/snapshot/core/examples/features/text.html.jpg b/__tests__/snapshot/core/examples/features/text.html.jpg new file mode 100644 index 0000000..19e4adc Binary files /dev/null and b/__tests__/snapshot/core/examples/features/text.html.jpg differ diff --git a/packages/board/example/basic/index.html b/packages/board/examples/basic/index.html similarity index 100% rename from packages/board/example/basic/index.html rename to packages/board/examples/basic/index.html diff --git a/packages/board/example/basic/main.js b/packages/board/examples/basic/main.js similarity index 100% rename from packages/board/example/basic/main.js rename to packages/board/examples/basic/main.js diff --git a/packages/board/example/features/index.html b/packages/board/examples/features/index.html similarity index 100% rename from packages/board/example/features/index.html rename to packages/board/examples/features/index.html diff --git a/packages/board/example/features/lib/action.js b/packages/board/examples/features/lib/action.js similarity index 96% rename from packages/board/example/features/lib/action.js rename to packages/board/examples/features/lib/action.js index 9353d65..8e8ba5d 100644 --- a/packages/board/example/features/lib/action.js +++ b/packages/board/examples/features/lib/action.js @@ -26,7 +26,7 @@ function isPointInElement(board, p = {x, y}) { function moveElement(board, idx, moveX, moveY) { const data = getData(); - const scale = getScale(); + const scale = getScale() || 1; if (data.elements[idx]) { // data.elements[idx].x += (moveX * scale * opts.devicePixelRatio); // data.elements[idx].y += (moveY * scale * opts.devicePixelRatio); diff --git a/packages/board/example/features/lib/data.js b/packages/board/examples/features/lib/data.js similarity index 100% rename from packages/board/example/features/lib/data.js rename to packages/board/examples/features/lib/data.js diff --git a/packages/board/example/features/lib/draw.js b/packages/board/examples/features/lib/draw.js similarity index 100% rename from packages/board/example/features/lib/draw.js rename to packages/board/examples/features/lib/draw.js diff --git a/packages/board/example/features/lib/event.js b/packages/board/examples/features/lib/event.js similarity index 100% rename from packages/board/example/features/lib/event.js rename to packages/board/examples/features/lib/event.js diff --git a/packages/board/example/features/lib/opts.js b/packages/board/examples/features/lib/opts.js similarity index 100% rename from packages/board/example/features/lib/opts.js rename to packages/board/examples/features/lib/opts.js diff --git a/packages/board/example/features/lib/scale.js b/packages/board/examples/features/lib/scale.js similarity index 89% rename from packages/board/example/features/lib/scale.js rename to packages/board/examples/features/lib/scale.js index d239789..e606c07 100644 --- a/packages/board/example/features/lib/scale.js +++ b/packages/board/examples/features/lib/scale.js @@ -3,6 +3,9 @@ let hasInited = false; export function doScale(board, scale) { if (hasInited === true) return; + if (!input) { + return; + } if (scale > 0) { input.value = scale; board.scale(scale); @@ -19,6 +22,9 @@ export function doScale(board, scale) { } export function getScale() { + if (!input) { + return; + } let val = 1; if (input.value * 1 > 0) { val = input.value * 1; diff --git a/packages/board/example/features/lib/scroll.js b/packages/board/examples/features/lib/scroll.js similarity index 94% rename from packages/board/example/features/lib/scroll.js rename to packages/board/examples/features/lib/scroll.js index 3791640..d9020f7 100644 --- a/packages/board/example/features/lib/scroll.js +++ b/packages/board/examples/features/lib/scroll.js @@ -4,6 +4,9 @@ let hasInited = false; export function doScroll(board, conf = {}) { if (hasInited === true) return; + if (!(inputX && inputY)) { + return; + } if (conf.scrollX >= 0) { inputX.value = conf.scrollX; diff --git a/packages/board/example/features/main.js b/packages/board/examples/features/main.js similarity index 100% rename from packages/board/example/features/main.js rename to packages/board/examples/features/main.js diff --git a/packages/board/examples/features/test.html b/packages/board/examples/features/test.html new file mode 100644 index 0000000..3efb8b5 --- /dev/null +++ b/packages/board/examples/features/test.html @@ -0,0 +1,29 @@ + +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/packages/board/example/scale/index.html b/packages/board/examples/scale/index.html similarity index 100% rename from packages/board/example/scale/index.html rename to packages/board/examples/scale/index.html diff --git a/packages/board/example/scale/main.js b/packages/board/examples/scale/main.js similarity index 100% rename from packages/board/example/scale/main.js rename to packages/board/examples/scale/main.js diff --git a/packages/core/example/lib/data/index.js b/packages/core/example/lib/data/index.js deleted file mode 100644 index 23d2f49..0000000 --- a/packages/core/example/lib/data/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import dataRect from './rect.js'; -import dataImage from './image.js'; -import dataSVG from './svg.js'; -import dataText from './text.js'; - -const url = new URLSearchParams(window.location.search); - -const dataMap = { - 'rect': dataRect, - 'image': dataImage, - 'svg': dataSVG, - 'text': dataText -} - -export function getData() { - return dataMap[url.get('data')] || dataMap['rect']; -} \ No newline at end of file diff --git a/packages/core/example/css/index.css b/packages/core/examples/features/css/index.css similarity index 100% rename from packages/core/example/css/index.css rename to packages/core/examples/features/css/index.css diff --git a/packages/core/examples/features/image.html b/packages/core/examples/features/image.html new file mode 100644 index 0000000..2490f0e --- /dev/null +++ b/packages/core/examples/features/image.html @@ -0,0 +1,25 @@ + + + + + + + + + +