From 218580e9f84567606f039ae6a3c5ef5ecfd34f67 Mon Sep 17 00:00:00 2001
From: Christoph Reiter <reiter.christoph@gmail.com>
Date: Tue, 6 Aug 2019 14:21:49 +0200
Subject: [PATCH] Add unit test support

---
 packages/common/.gitignore       |  5 +++++
 packages/common/.gitlab-ci.yml   | 19 +++++++++++++++++++
 packages/common/.gitmodules      |  0
 packages/common/karma.conf.js    | 23 +++++++++++++++++++++++
 packages/common/package.json     | 23 ++++++++++++++++++++++-
 packages/common/rollup.config.js | 23 +++++++++++++++++++++++
 packages/common/test/unit.js     | 24 ++++++++++++++++++++++++
 7 files changed, 116 insertions(+), 1 deletion(-)
 create mode 100644 packages/common/.gitignore
 create mode 100644 packages/common/.gitlab-ci.yml
 create mode 100644 packages/common/.gitmodules
 create mode 100644 packages/common/karma.conf.js
 create mode 100644 packages/common/rollup.config.js
 create mode 100644 packages/common/test/unit.js

diff --git a/packages/common/.gitignore b/packages/common/.gitignore
new file mode 100644
index 00000000..e62f92aa
--- /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 00000000..c1159ca5
--- /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 00000000..e69de29b
diff --git a/packages/common/karma.conf.js b/packages/common/karma.conf.js
new file mode 100644
index 00000000..901e0780
--- /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 845728d5..6f014fd5 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 00000000..2116f8eb
--- /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 00000000..a7849e10
--- /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);
+    });
+});
-- 
GitLab