diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 4064ebf..0531dfd 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -26,4 +26,5 @@ jobs: with: node-version: ${{ matrix.node-version }} - run: npm install + - run: npm run beforetest - run: npm run test diff --git a/__tests__/e2e.test.js b/__tests__/e2e.test.js index 075fc4d..e0f5d65 100644 --- a/__tests__/e2e.test.js +++ b/__tests__/e2e.test.js @@ -15,11 +15,12 @@ const { PNG } = pngjs; async function diff() { const middlewares = []; const diffRateList = []; - pageList.forEach((p) => { + pageList.forEach((p, i) => { middlewares.push(async (ctx = {}, next) => { const { page, port } = ctx; const width = p.w; const height = p.h; + console.log(`[${i+1}/${pageList.length}] E2E Testing: ${p.path}`) await page.setViewport( { width: p.w, height: p.h } ); const pageUrl = `http://127.0.0.1:${port}/packages/${p.path || ''}`; await page.goto(pageUrl); diff --git a/package.json b/package.json index 03f8488..10969ff 100644 --- a/package.json +++ b/package.json @@ -9,11 +9,13 @@ "init": "lerna bootstrap --npm-client=cnpm", "clear": "rm -rf ./packages/*/dist/ & rm -rf ./packages/*/node_modules/", "jest": "jest --config jest.config.js", - "test": "lerna bootstrap --no-ci && npm run build && npm run jest && npm run e2e", + "beforetest": "lerna bootstrap --no-ci && npm run build", + "test": "npm run e2e && npm run jest", "serve": "http-server ./", "lint": "eslint --fix --ext .ts packages/*/src/**", "precommit": "npm run lint", - "prepush": "npm run lint" + "prepush": "npm run lint", + "clear:jest": "rm -rf ./packages/*/__tests__/__snapshots__" }, "devDependencies": { "@babel/core": "^7.13.14", diff --git a/packages/board/__tests__/__snapshots__/index.test.ts.snap b/packages/board/__tests__/__snapshots__/index.test.ts.snap index 12f5c8e..2c5ac74 100644 --- a/packages/board/__tests__/__snapshots__/index.test.ts.snap +++ b/packages/board/__tests__/__snapshots__/index.test.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`@idraw/board: context 1`] = ` +exports[`@idraw/board context 1`] = ` Array [ Object { "props": Object { @@ -64,7 +64,7 @@ Array [ ] `; -exports[`@idraw/board: context 2`] = ` +exports[`@idraw/board context 2`] = ` Array [ Object { "props": Object { diff --git a/packages/board/__tests__/__snapshots__/scale.test.ts.snap b/packages/board/__tests__/__snapshots__/scale.test.ts.snap index 3bbddcb..cbbc2eb 100644 --- a/packages/board/__tests__/__snapshots__/scale.test.ts.snap +++ b/packages/board/__tests__/__snapshots__/scale.test.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`@idraw/board: scroll 1`] = ` +exports[`@idraw/board scale 1`] = ` Array [ Object { "props": Object { @@ -64,7 +64,7 @@ Array [ ] `; -exports[`@idraw/board: scroll 2`] = ` +exports[`@idraw/board scale 2`] = ` Array [ Object { "props": Object { diff --git a/packages/board/__tests__/__snapshots__/scroll.test.ts.snap b/packages/board/__tests__/__snapshots__/scroll.test.ts.snap index d494063..2c625dd 100644 --- a/packages/board/__tests__/__snapshots__/scroll.test.ts.snap +++ b/packages/board/__tests__/__snapshots__/scroll.test.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`@idraw/board: scroll 1`] = ` +exports[`@idraw/board scroll 1`] = ` Array [ Object { "props": Object { @@ -64,7 +64,7 @@ Array [ ] `; -exports[`@idraw/board: scroll 2`] = ` +exports[`@idraw/board scroll 2`] = ` Array [ Object { "props": Object { diff --git a/packages/board/__tests__/index.test.ts b/packages/board/__tests__/index.test.ts index 293145c..93a250b 100644 --- a/packages/board/__tests__/index.test.ts +++ b/packages/board/__tests__/index.test.ts @@ -1,41 +1,45 @@ import Board from './../src'; import { getData } from './data'; -test('@idraw/board: context', async () => { - document.body.innerHTML = ` -
- `; - const opts = { - width: 600, - height: 400, - contextWidth: 600, - contextHeight: 400, - devicePixelRatio: 4 - } - const mount = document.querySelector('#mount') as HTMLDivElement; - const board = new Board(mount, opts); - const ctx = board.getContext(); - const data = getData(); - - board.clear(); - ctx.clearRect(0, 0, opts.width, opts.height); - ctx.setFillStyle('#ffffff'); - ctx.fillRect(0, 0, opts.width, opts.height); - data.elements.forEach(ele => { - ctx.setFillStyle(ele.desc.color); - ctx.fillRect(ele.x, ele.y, ele.w, ele.h); +describe('@idraw/board', () => { + test('context', async () => { + document.body.innerHTML = ` + + `; + const opts = { + width: 600, + height: 400, + contextWidth: 600, + contextHeight: 400, + devicePixelRatio: 4 + } + const mount = document.querySelector('#mount') as HTMLDivElement; + const board = new Board(mount, opts); + + const ctx = board.getContext(); + const data = getData(); + + board.clear(); + ctx.clearRect(0, 0, opts.width, opts.height); + ctx.setFillStyle('#ffffff'); + ctx.fillRect(0, 0, opts.width, opts.height); + data.elements.forEach(ele => { + ctx.setFillStyle(ele.desc.color); + ctx.fillRect(ele.x, ele.y, ele.w, ele.h); + }); + board.draw(); + + const originCtx = board.getOriginContext(); + // @ts-ignore; + const originCalls = originCtx.__getDrawCalls(); + expect(originCalls).toMatchSnapshot(); + + const displayCtx = board.getDisplayContext(); + // @ts-ignore; + const displayCalls = displayCtx.__getDrawCalls(); + expect(displayCalls).toMatchSnapshot(); + }); - board.draw(); +}) - const originCtx = board.getOriginContext(); - // @ts-ignore; - const originCalls = originCtx.__getDrawCalls(); - expect(originCalls).toMatchSnapshot(); - - const displayCtx = board.getDisplayContext(); - // @ts-ignore; - const displayCalls = displayCtx.__getDrawCalls(); - expect(displayCalls).toMatchSnapshot(); - -}); \ No newline at end of file diff --git a/packages/board/__tests__/scale.test.ts b/packages/board/__tests__/scale.test.ts index 80f274b..b2baff2 100644 --- a/packages/board/__tests__/scale.test.ts +++ b/packages/board/__tests__/scale.test.ts @@ -1,44 +1,47 @@ import Board from '../src'; import { getData } from './data'; -test('@idraw/board: scroll', async () => { - document.body.innerHTML = ` - - `; - const opts = { - width: 600, - height: 400, - contextWidth: 600, - contextHeight: 400, - devicePixelRatio: 4 - } - const mount = document.querySelector('#mount') as HTMLDivElement; - const board = new Board(mount, opts); +describe('@idraw/board', () => { - const ctx = board.getContext(); - const data = getData(); - - board.clear(); - ctx.clearRect(0, 0, opts.width, opts.height); - ctx.setFillStyle('#ffffff'); - ctx.fillRect(0, 0, opts.width, opts.height); - data.elements.forEach(ele => { - ctx.setFillStyle(ele.desc.color); - ctx.fillRect(ele.x, ele.y, ele.w, ele.h); + test('scale', async () => { + document.body.innerHTML = ` + + `; + const opts = { + width: 600, + height: 400, + contextWidth: 600, + contextHeight: 400, + devicePixelRatio: 4 + } + const mount = document.querySelector('#mount') as HTMLDivElement; + const board = new Board(mount, opts); + + const ctx = board.getContext(); + const data = getData(); + + board.clear(); + ctx.clearRect(0, 0, opts.width, opts.height); + ctx.setFillStyle('#ffffff'); + ctx.fillRect(0, 0, opts.width, opts.height); + data.elements.forEach(ele => { + ctx.setFillStyle(ele.desc.color); + ctx.fillRect(ele.x, ele.y, ele.w, ele.h); + }); + + const result = board.scale(0.5); + expect(result).toStrictEqual({"position":{"top":150,"bottom":100,"left":100,"right":150},"size":{"x":75,"y":50,"w":300,"h":200}}) + board.draw(); + + const originCtx = board.getOriginContext(); + // @ts-ignore; + const originCalls = originCtx.__getDrawCalls(); + expect(originCalls).toMatchSnapshot(); + + const displayCtx = board.getDisplayContext(); + // @ts-ignore; + const displayCalls = displayCtx.__getDrawCalls(); + expect(displayCalls).toMatchSnapshot(); + }); - - const result = board.scale(0.5); - expect(result).toStrictEqual({"position":{"top":150,"bottom":100,"left":100,"right":150},"size":{"x":75,"y":50,"w":300,"h":200}}) - board.draw(); - - const originCtx = board.getOriginContext(); - // @ts-ignore; - const originCalls = originCtx.__getDrawCalls(); - expect(originCalls).toMatchSnapshot(); - - const displayCtx = board.getDisplayContext(); - // @ts-ignore; - const displayCalls = displayCtx.__getDrawCalls(); - expect(displayCalls).toMatchSnapshot(); - -}); \ No newline at end of file +}) diff --git a/packages/board/__tests__/scroll.test.ts b/packages/board/__tests__/scroll.test.ts index 6fe11e4..d1b21da 100644 --- a/packages/board/__tests__/scroll.test.ts +++ b/packages/board/__tests__/scroll.test.ts @@ -1,49 +1,52 @@ import Board from '../src'; import { getData } from './data'; -test('@idraw/board: scroll', async () => { - document.body.innerHTML = ` - - `; - const opts = { - width: 600, - height: 400, - contextWidth: 600, - contextHeight: 400, - devicePixelRatio: 4 - } - const mount = document.querySelector('#mount') as HTMLDivElement; - const board = new Board(mount, opts); - - const ctx = board.getContext(); - const data = getData(); - board.clear(); - ctx.clearRect(0, 0, opts.width, opts.height); - ctx.setFillStyle('#ffffff'); - ctx.fillRect(0, 0, opts.width, opts.height); - data.elements.forEach(ele => { - ctx.setFillStyle(ele.desc.color); - ctx.fillRect(ele.x, ele.y, ele.w, ele.h); +describe('@idraw/board', () => { + test('scroll', async () => { + document.body.innerHTML = ` + + `; + const opts = { + width: 600, + height: 400, + contextWidth: 600, + contextHeight: 400, + devicePixelRatio: 4 + } + const mount = document.querySelector('#mount') as HTMLDivElement; + const board = new Board(mount, opts); + + const ctx = board.getContext(); + const data = getData(); + board.clear(); + ctx.clearRect(0, 0, opts.width, opts.height); + ctx.setFillStyle('#ffffff'); + ctx.fillRect(0, 0, opts.width, opts.height); + data.elements.forEach(ele => { + ctx.setFillStyle(ele.desc.color); + ctx.fillRect(ele.x, ele.y, ele.w, ele.h); + }); + + const resultScale =board.scale(2); + expect(resultScale).toStrictEqual({"position":{"top":0,"bottom":-400,"left":0,"right":-600},"size":{"x":0,"y":0,"w":1200,"h":800}}) + + const resultX =board.scrollX(-600); + expect(resultX).toStrictEqual({"position":{"top":-600,"bottom":-400,"left":0,"right":0},"size":{"x":-1200,"y":0,"w":1200,"h":800}}) + + const resultY =board.scrollY(-400); + expect(resultY).toStrictEqual({"position":{"top":-600,"bottom":0,"left":-400,"right":0},"size":{"x":-1200,"y":-800,"w":1200,"h":800}}) + + board.draw(); + + const originCtx = board.getOriginContext(); + // @ts-ignore; + const originCalls = originCtx.__getDrawCalls(); + expect(originCalls).toMatchSnapshot(); + + const displayCtx = board.getDisplayContext(); + // @ts-ignore; + const displayCalls = displayCtx.__getDrawCalls(); + expect(displayCalls).toMatchSnapshot(); }); +}); - const resultScale =board.scale(2); - expect(resultScale).toStrictEqual({"position":{"top":0,"bottom":-400,"left":0,"right":-600},"size":{"x":0,"y":0,"w":1200,"h":800}}) - - const resultX =board.scrollX(-600); - expect(resultX).toStrictEqual({"position":{"top":-600,"bottom":-400,"left":0,"right":0},"size":{"x":-1200,"y":0,"w":1200,"h":800}}) - - const resultY =board.scrollY(-400); - expect(resultY).toStrictEqual({"position":{"top":-600,"bottom":0,"left":-400,"right":0},"size":{"x":-1200,"y":-800,"w":1200,"h":800}}) - - board.draw(); - - const originCtx = board.getOriginContext(); - // @ts-ignore; - const originCalls = originCtx.__getDrawCalls(); - expect(originCalls).toMatchSnapshot(); - - const displayCtx = board.getDisplayContext(); - // @ts-ignore; - const displayCalls = displayCtx.__getDrawCalls(); - expect(displayCalls).toMatchSnapshot(); -}); \ No newline at end of file