diff --git a/helpers.js b/helpers.js index 5cec15a24..adb655d53 100644 --- a/helpers.js +++ b/helpers.js @@ -565,7 +565,7 @@ function doAjax(param) { }, error: function(jqXHR, textStatus, errorThrown) { var code = jqXHR.status; - if (code == 200) {// happens sometimes when we get no response + if (code == 200) {// happens sometimes when we get no response (TODO: Fix server to return 204? instead) if (param.success_callback !== undefined) param.success_callback(null); return; diff --git a/test.html b/test.html new file mode 100644 index 000000000..467326db1 --- /dev/null +++ b/test.html @@ -0,0 +1,21 @@ + + +TextSecure test runner + + +

Run this out of the chrome-plugin:// namespace (and expect plugin state to be cleared/corrupted), not file://

+
+
+ + + + + + + + + + + + + diff --git a/test.js b/test.js new file mode 100644 index 000000000..aaf678856 --- /dev/null +++ b/test.js @@ -0,0 +1,37 @@ +// Setup dumb test wrapper +var testsdiv = $('#tests'); +function TEST(func, name) { + var funcName = name === undefined ? func + "" : name; + try { + if (func()) + testsdiv.append('

' + funcName + ' passed

'); + else + testsdiv.append('

' + funcName + ' returned false

'); + } catch (e) { + testsdiv.append('

' + funcName + ' threw ' + e + '

'); + } +} + +// Random tests to check my JS knowledge +TEST(function() { return !objectContainsKeys({}); }); +TEST(function() { return objectContainsKeys({ a: undefined }); }); +TEST(function() { return objectContainsKeys({ a: null }); }); + +// Basic sanity-checks on the crypto library +TEST(function() { + var PushMessageProto = dcodeIO.ProtoBuf.loadProtoFile("IncomingPushMessageSignal.proto").build("textsecure.PushMessageContent"); + var IncomingMessageProto = dcodeIO.ProtoBuf.loadProtoFile("IncomingPushMessageSignal.proto").build("textsecure.IncomingPushMessageSignal"); + + var text_message = new PushMessageProto(); + text_message.body = "Hi Mom"; + var server_message = {type: 0, // unencrypted + source: "+19999999999", timestamp: 42, message: text_message.encode() }; + + crypto.handleIncomingPushMessageProto(server_message); + return server_message.message.body == text_message.body && + server_message.message.attachments.length == text_message.attachments.length && + text_message.attachments.length == 0; +}, 'Unencrypted PushMessageProto "decrypt"'); + +// TODO: Run through the test vectors for the axolotl ratchet +