diff --git a/packages/common/.gitignore b/packages/common/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e62f92aa809c7345cb05914d7143b0322ab6d725 --- /dev/null +++ b/packages/common/.gitignore @@ -0,0 +1,5 @@ +dist +node_modules +.idea +npm-debug.log +package-lock.json diff --git a/packages/common/.gitlab-ci.yml b/packages/common/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..c1159ca58913fe0c8ec6d720b5a9aa706a5594a8 --- /dev/null +++ b/packages/common/.gitlab-ci.yml @@ -0,0 +1,19 @@ +image: debian:buster + +before_script: + - apt update + - apt install -y git + - "sed -i 's|git@gitlab.tugraz.at:VPU|../..|g' .gitmodules" + - git submodule sync + - git submodule update --init + +stages: + - test + +test: + stage: test + script: + - apt update + - apt install -y npm chromium + - npm install + - npm test diff --git a/packages/common/.gitmodules b/packages/common/.gitmodules new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/packages/common/karma.conf.js b/packages/common/karma.conf.js new file mode 100644 index 0000000000000000000000000000000000000000..901e07806c448e53fd84367917e67267a1836771 --- /dev/null +++ b/packages/common/karma.conf.js @@ -0,0 +1,23 @@ +// Trick to use the auto-downloaded puppeteer chrome binary +process.env.CHROME_BIN = require('puppeteer').executablePath(); + +module.exports = function(config) { + config.set({ + basePath: 'dist', + frameworks: ['mocha', 'chai'], + files: [ + './bundle.js', + {pattern: './**/*', included: false, watched: true, served: true}, + ], + autoWatch: true, + browsers: ['ChromeHeadlessNoSandbox'], + customLaunchers: { + ChromeHeadlessNoSandbox: { + base: 'ChromeHeadless', + flags: ['--no-sandbox'] + } + }, + singleRun: false, + logLevel: config.LOG_ERROR + }); +} diff --git a/packages/common/package.json b/packages/common/package.json index 845728d57177ae198ed2a27a389ca236f0e9ae71..6f014fd52f09b2b0bba07208e078fc7757999314 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,4 +1,25 @@ { "name": "vpu-common", - "version": "1.0.1" + "version": "1.0.1", + "devDependencies": { + "karma": "^4.2.0", + "karma-chai": "^0.1.0", + "karma-chrome-launcher": "^3.0.0", + "karma-mocha": "^1.3.0", + "node-sass": "^4.12.0", + "puppeteer": "^1.15.0", + "mocha": "^6.2.0", + "chai": "^4.2.0", + "rollup": "^1.11.3", + "rollup-plugin-commonjs": "^9.3.4", + "rollup-plugin-node-resolve": "^4.2.3", + "rollup-plugin-replace": "^2.2.0", + "rollup-plugin-multi-entry": "^2.1.0" + }, + "scripts": { + "clean": "rm dist/*", + "build": "npm run build-local", + "build-test": "rollup -c --environment BUILD:test", + "test": "npm run build-test && karma start --singleRun" + } } diff --git a/packages/common/rollup.config.js b/packages/common/rollup.config.js new file mode 100644 index 0000000000000000000000000000000000000000..2116f8eb3bbc65a40e07d2e1616b331fca071ca3 --- /dev/null +++ b/packages/common/rollup.config.js @@ -0,0 +1,23 @@ +import resolve from 'rollup-plugin-node-resolve'; +import commonjs from 'rollup-plugin-commonjs'; +import replace from "rollup-plugin-replace"; +import multiEntry from 'rollup-plugin-multi-entry'; + +const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local'; +console.log("build: " + build); + +export default { + input: 'test/**/*.js', + output: { + file: 'dist/bundle.js', + format: 'esm' + }, + plugins: [ + multiEntry(), + resolve(), + commonjs(), + replace({ + "process.env.BUILD": '"' + build + '"', + }) + ] +}; diff --git a/packages/common/test/unit.js b/packages/common/test/unit.js new file mode 100644 index 0000000000000000000000000000000000000000..a7849e10de3f57e7d931451fce4ec5f330ce3fa5 --- /dev/null +++ b/packages/common/test/unit.js @@ -0,0 +1,24 @@ +import utils from '../utils'; + +describe('utils', () => { + it('base64EncodeUnicode', () => { + expect(utils.base64EncodeUnicode('')).to.equal(''); + expect(utils.base64EncodeUnicode('foo')).to.equal('Zm9v'); + expect(utils.base64EncodeUnicode('äöü')).to.equal('w6TDtsO8'); + expect(utils.base64EncodeUnicode('😊')).to.equal('8J+Yig=='); + }); + + it('defineCustomElement', () => { + class SomeElement extends HTMLElement { + constructor() { + super(); + this.foo = 42; + } + }; + var res = utils.defineCustomElement("test-some-element", SomeElement); + expect(res).to.equal(true); + + node = document.createElement('test-some-element'); + expect(node.foo).to.equal(42); + }); +});