1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/mobilemessage/tests/marionette/test_phone_number_normalization.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,139 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +MARIONETTE_TIMEOUT = 60000; 1.8 + 1.9 +SpecialPowers.setBoolPref("dom.sms.enabled", true); 1.10 +SpecialPowers.addPermission("sms", true, document); 1.11 + 1.12 +let pendingEmulatorCmdCount = 0; 1.13 +function sendSmsToEmulator(from, text) { 1.14 + ++pendingEmulatorCmdCount; 1.15 + 1.16 + let cmd = "sms send " + from + " " + text; 1.17 + runEmulatorCmd(cmd, function(result) { 1.18 + --pendingEmulatorCmdCount; 1.19 + 1.20 + is(result[0], "OK", "Emulator response"); 1.21 + }); 1.22 +} 1.23 + 1.24 +let tasks = { 1.25 + // List of test fuctions. Each of them should call |tasks.next()| when 1.26 + // completed or |tasks.finish()| to jump to the last one. 1.27 + _tasks: [], 1.28 + _nextTaskIndex: 0, 1.29 + 1.30 + push: function(func) { 1.31 + this._tasks.push(func); 1.32 + }, 1.33 + 1.34 + next: function() { 1.35 + let index = this._nextTaskIndex++; 1.36 + let task = this._tasks[index]; 1.37 + try { 1.38 + task(); 1.39 + } catch (ex) { 1.40 + ok(false, "test task[" + index + "] throws: " + ex); 1.41 + // Run last task as clean up if possible. 1.42 + if (index != this._tasks.length - 1) { 1.43 + this.finish(); 1.44 + } 1.45 + } 1.46 + }, 1.47 + 1.48 + finish: function() { 1.49 + this._tasks[this._tasks.length - 1](); 1.50 + }, 1.51 + 1.52 + run: function() { 1.53 + this.next(); 1.54 + } 1.55 +}; 1.56 + 1.57 +function getAllMessages(callback, filter, reverse) { 1.58 + if (!filter) { 1.59 + filter = new MozSmsFilter; 1.60 + } 1.61 + let messages = []; 1.62 + let request = manager.getMessages(filter, reverse || false); 1.63 + request.onsuccess = function(event) { 1.64 + if (request.result) { 1.65 + messages.push(request.result); 1.66 + request.continue(); 1.67 + return; 1.68 + } 1.69 + 1.70 + window.setTimeout(callback.bind(null, messages), 0); 1.71 + } 1.72 +} 1.73 + 1.74 +function deleteAllMessages() { 1.75 + getAllMessages(function deleteAll(messages) { 1.76 + let message = messages.shift(); 1.77 + if (!message) { 1.78 + ok(true, "all messages deleted"); 1.79 + tasks.next(); 1.80 + return; 1.81 + } 1.82 + 1.83 + let request = manager.delete(message.id); 1.84 + request.onsuccess = deleteAll.bind(null, messages); 1.85 + request.onerror = function(event) { 1.86 + ok(false, "failed to delete all messages"); 1.87 + tasks.finish(); 1.88 + } 1.89 + }); 1.90 +} 1.91 + 1.92 +function validate(number, normalizedNumber) { 1.93 + log("Checking ('" + number + "', '" + normalizedNumber + "')"); 1.94 + 1.95 + let sendRequest = manager.send(number, "ping"); 1.96 + sendRequest.onsuccess = function onSendSuccess(event) { 1.97 + let sentMessage = event.target.result; 1.98 + 1.99 + manager.onreceived = function onreceived(event) { 1.100 + let receivedMessage = event.message; 1.101 + is(sentMessage.threadId, receivedMessage.threadId, 1.102 + "message threadIds are supposed to be matched"); 1.103 + 1.104 + tasks.next(); 1.105 + }; 1.106 + sendSmsToEmulator(normalizedNumber, "pong"); 1.107 + }; 1.108 + sendRequest.onerror = function onSendError(event) { 1.109 + ok(false, "failed to send message."); 1.110 + tasks.finish(); 1.111 + }; 1.112 +} 1.113 + 1.114 +let manager = window.navigator.mozMobileMessage; 1.115 +tasks.push(function() { 1.116 + log("Verifying initial state."); 1.117 + ok(manager instanceof MozMobileMessageManager, 1.118 + "manager is instance of " + manager.constructor); 1.119 + tasks.next(); 1.120 +}); 1.121 + 1.122 +tasks.push(deleteAllMessages); 1.123 + 1.124 +tasks.push(validate.bind(null, "+886-9-87-654-321", "+886987654321")); 1.125 +tasks.push(validate.bind(null, "+886 9 87654321", "+886987654321")); 1.126 +tasks.push(validate.bind(null, "+886(9)87654321", "+886987654321")); 1.127 + 1.128 +tasks.push(deleteAllMessages); 1.129 + 1.130 +// WARNING: All tasks should be pushed before this!!! 1.131 +tasks.push(function cleanUp() { 1.132 + if (pendingEmulatorCmdCount) { 1.133 + window.setTimeout(cleanUp, 100); 1.134 + return; 1.135 + } 1.136 + 1.137 + SpecialPowers.removePermission("sms", document); 1.138 + SpecialPowers.clearUserPref("dom.sms.enabled"); 1.139 + finish(); 1.140 +}); 1.141 + 1.142 +tasks.run();