From ddf7b438f4c53fc82ae2d52602b6f11ffe1597e5 Mon Sep 17 00:00:00 2001 From: Bartel Eerdekens Date: Tue, 6 Dec 2022 16:53:19 +0100 Subject: [PATCH 1/5] test: Run mocha tests with Electron Note: (global) installation of Electron is required --- package.json | 3 ++ pnpm-lock.yaml | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/package.json b/package.json index 99a99e7e..c17d3aa3 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "chai": "^4.3.7", "deasync": "^0.1.28", "downlevel-dts": "^0.11.0", + "electron-mocha": "^11.0.2", "eslint-config-atomic": "^1.18.1", "eslint-plugin-prettier": "^4.2.1", "fs-extra": "^10.1.0", @@ -93,6 +94,8 @@ "build.debug": "run-s build.js build.native.debug", "test": "run-s build && mocha", "test.skip_gc_tests": "run-s build.debug && cross-env SKIP_GC_TESTS=true mocha", + "test.electron.main": "run-s build && electron-mocha", + "test.electron.renderer": "run-s build && electron-mocha --renderer", "lint.clang-format": "clang-format -i -style=file ./src/*.cc ./src/*.h ./src/util/*.h", "lint-test.eslint": "eslint **/*.{ts,tsx,js,jsx,cjs,mjs,json,yaml} --no-error-on-unmatched-pattern --cache --cache-location ./.cache/eslint/", "lint.eslint": "pnpm run lint-test.eslint --fix", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3aeddcf9..57780fcb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,6 +18,7 @@ specifiers: cross-env: ^7.0.3 deasync: ^0.1.28 downlevel-dts: ^0.11.0 + electron-mocha: ^11.0.2 eslint-config-atomic: ^1.18.1 eslint-plugin-prettier: ^4.2.1 fs-extra: ^10.1.0 @@ -59,6 +60,7 @@ devDependencies: chai: 4.3.7 deasync: 0.1.28 downlevel-dts: 0.11.0 + electron-mocha: 11.0.2 eslint-config-atomic: 1.18.1 eslint-plugin-prettier: 4.2.1_prettier@2.8.0 fs-extra: 10.1.0 @@ -732,6 +734,10 @@ packages: eslint-visitor-keys: 3.3.0 dev: true + /@ungap/promise-all-settled/1.1.2: + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + dev: true + /abbrev/1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true @@ -1692,6 +1698,19 @@ packages: ms: 2.1.3 dev: true + /debug/4.3.3_supports-color@8.1.1: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 8.1.1 + dev: true + /debug/4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -1862,10 +1881,29 @@ packages: resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} dev: true + /electron-mocha/11.0.2: + resolution: {integrity: sha512-fOk+zUgSIsmL2cuIrd7IlK4eRhGVi1PYIB3QvqiBO+6f6AP8XLkYkT9eORlL2xwaS3yAAk02Y+4OTuhtqHPkEQ==} + engines: {node: '>= 7.0.0'} + hasBin: true + dependencies: + ansi-colors: 4.1.1 + electron-window: 0.8.1 + fs-extra: 10.1.0 + mocha: 9.2.2 + which: 2.0.2 + yargs: 16.2.0 + dev: true + /electron-to-chromium/1.4.284: resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} dev: true + /electron-window/0.8.1: + resolution: {integrity: sha512-W1i9LfnZJozk3MXE8VgsL2E5wOUHSgyCvcg1H2vQQjj+gqhO9lVudgY3z3SF7LJAmi+0vy3CJkbMqsynWB49EA==} + dependencies: + is-electron-renderer: 2.0.1 + dev: true + /email-addresses/3.1.0: resolution: {integrity: sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==} dev: true @@ -3150,6 +3188,10 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-electron-renderer/2.0.1: + resolution: {integrity: sha512-pRlQnpaCFhDVPtkXkP+g9Ybv/CjbiQDjnKFQTEjpBfDKeV6dRDBczuFRDpM6DVfk2EjpMS8t5kwE5jPnqYl3zA==} + dev: true + /is-extglob/2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -3638,6 +3680,13 @@ packages: dependencies: brace-expansion: 1.1.11 + /minimatch/4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 1.1.11 + dev: true + /minimatch/5.0.1: resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} engines: {node: '>=10'} @@ -3777,6 +3826,37 @@ packages: supports-color: 5.4.0 dev: true + /mocha/9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3_supports-color@8.1.1 + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + dev: true + /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true @@ -3789,6 +3869,12 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true + /nanoid/3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + /nanoid/3.3.3: resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -5603,6 +5689,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /workerpool/6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + dev: true + /workerpool/6.2.1: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} dev: true From 8f25d352d135ee220eb07ebd56f1ee6c0d565eda Mon Sep 17 00:00:00 2001 From: Bartel Eerdekens Date: Tue, 6 Dec 2022 16:56:40 +0100 Subject: [PATCH 2/5] test: Run Electron test (main) in CI --- .github/workflows/CI.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 355ef9f7..cbc65e45 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -155,6 +155,13 @@ jobs: pnpm run clean pnpm run test.skip_gc_tests + - name: Test Electron (Main) + if: ${{ !matrix.docker }} + run: | + pnpm install -g electron@latest + pnpm run clean + pnpm run test.electron.main + - name: Tests + GC Tests (Release) if: ${{ !matrix.docker }} run: | From 964a3eec603e1d3772b9242ad4be8faeddf6f60f Mon Sep 17 00:00:00 2001 From: Bartel Eerdekens Date: Tue, 6 Dec 2022 17:05:03 +0100 Subject: [PATCH 3/5] test: Continue on error until all tests are passing --- .github/workflows/CI.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index cbc65e45..e84b661d 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -154,6 +154,7 @@ jobs: command: | pnpm run clean pnpm run test.skip_gc_tests + continue-on-error: true - name: Test Electron (Main) if: ${{ !matrix.docker }} @@ -161,6 +162,7 @@ jobs: pnpm install -g electron@latest pnpm run clean pnpm run test.electron.main + continue-on-error: true - name: Tests + GC Tests (Release) if: ${{ !matrix.docker }} From 6c0f6b7033b4a099ffb8bbf23021fde85a3da0f2 Mon Sep 17 00:00:00 2001 From: Bartel Eerdekens Date: Tue, 6 Dec 2022 17:34:33 +0100 Subject: [PATCH 4/5] test: Only run Electron tests on ubuntu Lessen timeout to 5min For macOS: https://github.com/jprichardson/electron-mocha/issues/118 --- .github/workflows/CI.yml | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index e84b661d..95398f33 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -149,23 +149,32 @@ jobs: if: ${{ !matrix.docker }} uses: nick-fields/retry@v2 with: - timeout_minutes: 8 + timeout_minutes: 5 max_attempts: 1 command: | pnpm run clean pnpm run test.skip_gc_tests - continue-on-error: true + continue-on-error: "${{ contains(matrix.os, 'ubuntu') && !matrix.docker }}" - name: Test Electron (Main) - if: ${{ !matrix.docker }} - run: | - pnpm install -g electron@latest - pnpm run clean - pnpm run test.electron.main - continue-on-error: true + if: "${{ contains(matrix.os, 'ubuntu') && !matrix.docker }}" + uses: nick-fields/retry@v2 + with: + timeout_minutes: 5 + max_attempts: 1 + command: | + sudo apt-get install xvfb + pnpm install -g electron@latest + pnpm run clean + xvfb-run --auto-servernum pnpm run test.electron.main + # continue-on-error: true - name: Tests + GC Tests (Release) if: ${{ !matrix.docker }} - run: | - pnpm run clean - pnpm run test + uses: nick-fields/retry@v2 + with: + timeout_minutes: 5 + max_attempts: 1 + command: | + pnpm run clean + pnpm run test From e6a68606b8822798f6c541d8c41a2a6ceae901b8 Mon Sep 17 00:00:00 2001 From: Bartel Eerdekens Date: Tue, 6 Dec 2022 22:47:35 +0100 Subject: [PATCH 5/5] fix: Exit tests after completion See: https://stackoverflow.com/a/52143003 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index c17d3aa3..dddffc96 100644 --- a/package.json +++ b/package.json @@ -92,8 +92,8 @@ "build.native.debug": "cross-env CMAKE_BUILD_TYPE=Debug node-gyp configure --debug && cross-env CMAKE_BUILD_TYPE=Debug node-gyp build --debug", "build": "run-s build.js build.native", "build.debug": "run-s build.js build.native.debug", - "test": "run-s build && mocha", - "test.skip_gc_tests": "run-s build.debug && cross-env SKIP_GC_TESTS=true mocha", + "test": "run-s build && mocha --exit", + "test.skip_gc_tests": "run-s build.debug && cross-env SKIP_GC_TESTS=true mocha --exit", "test.electron.main": "run-s build && electron-mocha", "test.electron.renderer": "run-s build && electron-mocha --renderer", "lint.clang-format": "clang-format -i -style=file ./src/*.cc ./src/*.h ./src/util/*.h",