diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..a542e1d6 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,209 @@ +name: tests +on: [pull_request] +jobs: + base-tests: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v2 + with: + node-version: '12' + check-latest: true + - name: Cache node modules + uses: actions/cache@v2 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install Dependencies + run: npm install + - name: "Base istanbul/tape node tests" + run: npm test + + benchmark-tests: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v2 + with: + node-version: '12' + check-latest: true + - name: Cache node modules + uses: actions/cache@v2 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install Dependencies + run: npm install + - name: "Benchmark tests" + run: npm run benchmark + + gif-tests: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v2 + with: + node-version: '12' + check-latest: true + - name: Cache node modules + uses: actions/cache@v2 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install Dependencies + run: npm install + - name: "Gif tests" + run: npm run gif-test + + browserify-core-tests: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v2 + with: + node-version: '12' + check-latest: true + - name: Cache node modules + uses: actions/cache@v2 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install Dependencies + run: npm install + - run: sudo apt-get install xvfb + - name: "Browserify core tests and run" + run: grunt tests && xvfb-run --auto-servernum npm run core-tests + + jsmine-ui-tests: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v2 + with: + node-version: '12' + check-latest: true + - name: Cache node modules + uses: actions/cache@v2 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install Dependencies + run: npm install + - name: "Jasmine UI tests (mocked browser env)" + run: npm run test-ui + + jest-ui-tests: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v2 + with: + node-version: '12' + check-latest: true + - name: Cache node modules + uses: actions/cache@v2 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install Dependencies + run: npm install + - name: "jest-puppeteer UI tests (full browser env)" + run: npm run test-ui-2 + + cli-tests: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v2 + with: + node-version: '12' + check-latest: true + - name: Cache node modules + uses: actions/cache@v2 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install Dependencies + run: npm install + - name: "CLI tests" + run: npm run test-cli + + grunt-build-test: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v2 + with: + node-version: '12' + check-latest: true + - name: Cache node modules + uses: actions/cache@v2 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install Dependencies + run: npm install + - name: "Grunt build test of dev environment" + run: grunt build + +## Cache NPM folder +# cache: +# directories: +# - ~/.npm +# - ~/.cache diff --git a/package.json b/package.json index f93bcd98..c94ea9d1 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "test-ui-2": "node ./node_modules/.bin/jest", "test-cli": "node test/cli/*.js | tap-spec", "setup": "npm i && npm i -g grunt grunt-cli && npm rebuild --build-from-source && grunt build", - "start": "grunt serve" + "start": "grunt serve" }, "lint-staged": { "*.js": [ @@ -106,6 +106,7 @@ "lint-staged": "^10.0.3", "looks-same": "^7.0.0", "matchdep": "^2.0.0", + "resemblejs": "^3.2.5", "tap-spec": "^5.0.0", "tape": "^4.9.2", "tape-run": "^8.0.0", diff --git a/test/core/templates/gif-module-test.js b/test/core/templates/gif-module-test.js index a47a7686..775bb894 100644 --- a/test/core/templates/gif-module-test.js +++ b/test/core/templates/gif-module-test.js @@ -1,6 +1,8 @@ const test = require('tape'), base64Img = require('base64-img'); +const compare = require('resemblejs').compare; + const ImageSequencer = require('../../../src/ImageSequencer'); const test_gif = require('../images/test.gif.js'); @@ -15,19 +17,37 @@ target = 'test_outputs'; * @param {String} [input="test_gif"] optional input image. Default is a test gif. */ module.exports = (moduleName, options, benchmark, input) => { - let sequencer = ImageSequencer({ui: false}); + let sequencer = ImageSequencer({ ui: false }); sequencer.loadImages(input || test_gif); sequencer.addSteps(moduleName, options); - test(`${moduleName} module works correctly`, t => { - sequencer.run({mode: 'test'}, () => { + test(`${moduleName} module works correctly`, (t) => { + sequencer.run({ mode: 'test' }, () => { let result = sequencer.steps[1].output.src; base64Img.imgSync(result, target, `${moduleName}-result`); base64Img.imgSync(benchmark, target, `${moduleName}-benchmark`); - t.equal(result === benchmark, true, `${moduleName} module works correctly with Gif`); + let mismatch = 100; + compare( + result, + benchmark, + { returnEarlyThreshold: 5 }, + (err, { rawMisMatchPercentage }) => { + if (err) { + console.log('An error while comparing!'); + } else { + mismatch = rawMisMatchPercentage; + } + } + ); + + t.equal( + mismatch < 5, + true, + `${moduleName} module works correctly with Gif` + ); sequencer = null; t.end(); }); }); -}; \ No newline at end of file +};