From 122867c45c7f41b82a550a9665d34b7dda1c3ffa Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 21 Sep 2018 16:01:51 +0100 Subject: WebAssembly support! Quite a lot going on in this PR: * Updates to support recent emscripten, switching to WASM which is now the default * Use emscripten's MODULARIZE option rather than wrapping it ourself, since doing so in pre-post js doesn't work anymore. * Most changes are moving the emscripten runtime functions to top-level calls rather than in the Module object. * Get rid of duplicated NULL_BYTE_PADDING_LENGTH * Fix ciphertext_length used without being declared * Fix things that caused the closure compiler to error, eg. using OLM_OPTIONS without a declaration. * Wait until module is inited to do OLM_ERROR = olm_error() The main BREAKING CHANGE here is that the module now needs to initialise asyncronously (because it has to load the wasm file). require()ing olm now gives a function which needs to be called to create an instance. The resulting object has a promise-like then() method that can be used to detect when the module is ready. (We could use MODULARIZE_INSTANCE to return the module directly as before, rather than the function, but then we don't get the .then() method). --- javascript/test/megolm.spec.js | 7 +++++-- javascript/test/olm.spec.js | 10 ++++++++-- javascript/test/pk.spec.js | 8 ++++++-- 3 files changed, 19 insertions(+), 6 deletions(-) (limited to 'javascript/test') diff --git a/javascript/test/megolm.spec.js b/javascript/test/megolm.spec.js index 8f9d24a..9d5eb72 100644 --- a/javascript/test/megolm.spec.js +++ b/javascript/test/megolm.spec.js @@ -16,12 +16,15 @@ limitations under the License. "use strict"; -var Olm = require('../olm'); +var Olm = require('../olm')(); describe("megolm", function() { var aliceSession, bobSession; - beforeEach(function() { + beforeEach(function(done) { + Olm.then(function() { + done(); + }); aliceSession = new Olm.OutboundGroupSession(); bobSession = new Olm.InboundGroupSession(); }); diff --git a/javascript/test/olm.spec.js b/javascript/test/olm.spec.js index b7cc3ae..94fa87b 100644 --- a/javascript/test/olm.spec.js +++ b/javascript/test/olm.spec.js @@ -16,7 +16,7 @@ limitations under the License. "use strict"; -var Olm = require('../olm'); +var Olm = require('../olm')(); if (!Object.keys) { Object.keys = function(o) { @@ -30,7 +30,13 @@ describe("olm", function() { var aliceAccount, bobAccount; var aliceSession, bobSession; - beforeEach(function() { + beforeEach(function(done) { + // This should really be in a beforeAll, but jasmine-node + // doesn't support that + Olm.then(function() { + done(); + }); + aliceAccount = new Olm.Account(); bobAccount = new Olm.Account(); aliceSession = new Olm.Session(); diff --git a/javascript/test/pk.spec.js b/javascript/test/pk.spec.js index aec90ac..9f7dbfd 100644 --- a/javascript/test/pk.spec.js +++ b/javascript/test/pk.spec.js @@ -16,7 +16,7 @@ limitations under the License. "use strict"; -var Olm = require('../olm'); +var Olm = require('../olm')(); if (!Object.keys) { Object.keys = function(o) { @@ -29,7 +29,11 @@ if (!Object.keys) { describe("pk", function() { var encryption, decryption; - beforeEach(function() { + beforeEach(function(done) { + Olm.then(function() { + done(); + }); + encryption = new Olm.PkEncryption(); decryption = new Olm.PkDecryption(); }); -- cgit v1.2.3