aboutsummaryrefslogtreecommitdiff
path: root/testlib
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-11-03 00:47:22 +0100
committerFlorian Dold <florian.dold@gmail.com>2016-11-03 00:47:22 +0100
commitd0a0695fb5d34996850723f7d4b1b59c3df909c2 (patch)
tree6141a1db06f8f359813c332b3c23f3777f00b568 /testlib
parente9a383ede7f98512f0dd351697759d75ddb67eac (diff)
downloadwallet-core-d0a0695fb5d34996850723f7d4b1b59c3df909c2.tar.xz
test harness for both browser and node
Diffstat (limited to 'testlib')
-rw-r--r--testlib/node/runtime.js (renamed from testlib/testruntime.js)8
-rw-r--r--testlib/selenium/runtime.js100
-rw-r--r--testlib/selenium/testhost.html19
-rw-r--r--testlib/talertest.ts1
4 files changed, 124 insertions, 4 deletions
diff --git a/testlib/testruntime.js b/testlib/node/runtime.js
index 236807265..29ee508cc 100644
--- a/testlib/testruntime.js
+++ b/testlib/node/runtime.js
@@ -26,7 +26,7 @@ let vm = require("vm");
let fs = require("fs");
let process = require("process");
-let emsc = require("../lib/emscripten/taler-emscripten-lib.js");
+let emsc = require("../../lib/emscripten/taler-emscripten-lib.js");
// Do it here, since it breaks 'require'' for libwrapper
let System = require("systemjs");
@@ -49,13 +49,13 @@ System.config({
console.log("TAP version 13");
-let mod = System.newModule({Module: emsc});
-let modName = System.normalizeSync(__dirname + "/../lib/emscripten/taler-emscripten-lib.js");
+let mod = System.newModule({Module: emsc, default: emsc});
+let modName = System.normalizeSync(__dirname + "/../../lib/emscripten/taler-emscripten-lib.js");
System.set(modName, mod);
let testName = process.argv[2];
-System.import("./testlib/talertest")
+System.import("testlib/talertest")
.then(tt => {
SystemJS.import(testName)
.then(() => {
diff --git a/testlib/selenium/runtime.js b/testlib/selenium/runtime.js
new file mode 100644
index 000000000..0cf6c6d18
--- /dev/null
+++ b/testlib/selenium/runtime.js
@@ -0,0 +1,100 @@
+/*
+ This file is part of TALER
+ (C) 2016 Inria
+
+ TALER is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ *
+ * @author Florian Dold
+ */
+
+"use strict";
+
+var webdriver = require('selenium-webdriver');
+var chrome = require('selenium-webdriver/chrome');
+var path = require("path");
+var process = require("process");
+
+var p = "file://" + __dirname + "/testhost.html";
+
+if (!process.argv[2]) {
+ console.log("no test script given");
+ process.exit(1);
+}
+
+var testScript = path.resolve(process.argv[2]);
+
+var script = `
+ function f() {
+ System.import("testlib/talertest")
+ .then(tt => {
+ SystemJS.import("file://${testScript}")
+ .then(() => {
+ return tt.run();
+ })
+ .then(() => {
+ window.__test_over = true;
+ })
+ .catch((e) => {
+ window.__test_over = true;
+ console.error(e)
+ });
+ })
+ .catch((e) => {
+ console.error("can't locate talertest");
+ console.error(e);
+ });
+ }
+ if (document.readyState == "complete") {
+ f();
+ } else {
+ document.addEventListener("DOMContentLoaded", f);
+ }
+`;
+
+function untilTestOver() {
+ return driver.executeScript("return window.__test_over");
+}
+
+console.log("TAP version 13");
+
+var driver = new webdriver.Builder()
+ .setLoggingPrefs({browser: 'ALL'})
+ .forBrowser('chrome')
+ .build();
+
+driver.get(p);
+driver.executeScript(script);
+driver.wait(untilTestOver);
+
+driver.manage().logs().get("browser").then((logs) => {
+ for (let l of logs) {
+ if (l.level.name != "INFO") {
+ continue;
+ }
+ if (l.message.startsWith("{")) {
+ // format not understood, sometimes messages are logged
+ // with more structure, just pass it on
+ console.log(l.message);
+ continue;
+ }
+ let s1 = l.message.indexOf(" ") + 1;
+ let s2 = l.message.indexOf(" ", s1) + 1;
+ // Skip file url and LINE:COL
+ console.log(l.message.substring(s2));
+ }
+});
+
+driver.quit();
+
diff --git a/testlib/selenium/testhost.html b/testlib/selenium/testhost.html
new file mode 100644
index 000000000..263fe6316
--- /dev/null
+++ b/testlib/selenium/testhost.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Browser Test Host</title>
+ <script src="../../lib/vendor/system-csp-production.src.js"></script>
+ <script>
+ System.config({
+ baseURL: "../../",
+ defaultJSExtensions: true,
+ meta: {
+ "lib/emscripten/taler-emscripten-lib": {
+ format: "global",
+ exports: "Module",
+ }
+ },
+ });
+ </script>
+ </head>
+</html>
diff --git a/testlib/talertest.ts b/testlib/talertest.ts
index 5dcaff457..14074620b 100644
--- a/testlib/talertest.ts
+++ b/testlib/talertest.ts
@@ -82,6 +82,7 @@ export async function run() {
await p;
console.log(`ok ${Number(i) + 1} ${lastMsg}`);
} catch (e) {
+ console.error(e);
console.log(`not ok ${Number(i) + 1} ${lastMsg}`);
}
}