michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: MARIONETTE_TIMEOUT = 60000; michael@0: michael@0: const MMS_MAX_LENGTH_SUBJECT = 40; michael@0: michael@0: SpecialPowers.addPermission("sms", true, document); michael@0: SpecialPowers.setBoolPref("dom.sms.enabled", true); michael@0: michael@0: let tasks = { michael@0: // List of test fuctions. Each of them should call |tasks.next()| when michael@0: // completed or |tasks.finish()| to jump to the last one. michael@0: _tasks: [], michael@0: _nextTaskIndex: 0, michael@0: michael@0: push: function(func) { michael@0: this._tasks.push(func); michael@0: }, michael@0: michael@0: next: function() { michael@0: let index = this._nextTaskIndex++; michael@0: let task = this._tasks[index]; michael@0: try { michael@0: task(); michael@0: } catch (ex) { michael@0: ok(false, "test task[" + index + "] throws: " + ex); michael@0: // Run last task as clean up if possible. michael@0: if (index != this._tasks.length - 1) { michael@0: this.finish(); michael@0: } michael@0: } michael@0: }, michael@0: michael@0: finish: function() { michael@0: this._tasks[this._tasks.length - 1](); michael@0: }, michael@0: michael@0: run: function() { michael@0: this.next(); michael@0: } michael@0: }; michael@0: michael@0: let manager; michael@0: michael@0: function getAllMessages(callback, filter, reverse) { michael@0: if (!filter) { michael@0: filter = new MozSmsFilter; michael@0: } michael@0: let messages = []; michael@0: let request = manager.getMessages(filter, reverse || false); michael@0: request.onsuccess = function(event) { michael@0: if (request.result) { michael@0: messages.push(request.result); michael@0: request.continue(); michael@0: return; michael@0: } michael@0: michael@0: window.setTimeout(callback.bind(null, messages), 0); michael@0: } michael@0: } michael@0: michael@0: function deleteAllMessages() { michael@0: getAllMessages(function deleteAll(messages) { michael@0: let message = messages.shift(); michael@0: if (!message) { michael@0: ok(true, "all messages deleted"); michael@0: tasks.next(); michael@0: return; michael@0: } michael@0: michael@0: let request = manager.delete(message.id); michael@0: request.onsuccess = deleteAll.bind(null, messages); michael@0: request.onerror = function(event) { michael@0: ok(false, "failed to delete all messages"); michael@0: tasks.finish(); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: tasks.push(function() { michael@0: log("Verifying initial state."); michael@0: michael@0: manager = window.navigator.mozMobileMessage; michael@0: ok(manager instanceof MozMobileMessageManager, michael@0: "manager is instance of " + manager.constructor); michael@0: michael@0: tasks.next(); michael@0: }); michael@0: michael@0: tasks.push(function() { michael@0: log("MmsMessage.attachments should be an empty array."); michael@0: michael@0: manager.onfailed = function(event) { michael@0: manager.onfailed = null; michael@0: michael@0: let message = event.message; michael@0: ok(Array.isArray(message.attachments) && message.attachments.length === 0, michael@0: "message.attachments should be an empty array."); michael@0: michael@0: tasks.next(); michael@0: }; michael@0: michael@0: // Have a long long subject causes the send fails, so we don't need michael@0: // networking here. michael@0: manager.sendMMS({ michael@0: subject: new Array(MMS_MAX_LENGTH_SUBJECT + 2).join("a"), michael@0: receivers: ["1", "2"], michael@0: attachments: [], michael@0: }); michael@0: }); michael@0: michael@0: tasks.push(deleteAllMessages); michael@0: michael@0: // WARNING: All tasks should be pushed before this!!! michael@0: tasks.push(function cleanUp() { michael@0: SpecialPowers.removePermission("sms", document); michael@0: SpecialPowers.clearUserPref("dom.sms.enabled"); michael@0: finish(); michael@0: }); michael@0: michael@0: tasks.run();