michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: SpecialPowers.addPermission("voicemail", true, document); michael@0: michael@0: let voicemail = window.navigator.mozVoicemail; michael@0: let serviceId = 0; michael@0: michael@0: ok(voicemail instanceof MozVoicemail); michael@0: is(voicemail.status, null); michael@0: michael@0: function sendIndicatorPDU(pdu, listener, nextTest) { michael@0: let smsCommand = "sms pdu " + pdu; michael@0: let commandCompleted = false; michael@0: let sawEvent = false; michael@0: michael@0: voicemail.addEventListener("statuschanged", function statusChanged(event) { michael@0: voicemail.removeEventListener("statuschanged", statusChanged); michael@0: michael@0: try { michael@0: listener(event); michael@0: } catch (e) { michael@0: ok(false, String(e)); michael@0: } michael@0: michael@0: sawEvent = true; michael@0: if (commandCompleted) { michael@0: nextTest(); michael@0: } michael@0: }); michael@0: michael@0: log("-> " + smsCommand); michael@0: runEmulatorCmd(smsCommand, function(result) { michael@0: log("<- " + result); michael@0: is(result[0], "OK"); michael@0: commandCompleted = true; michael@0: if (sawEvent) { michael@0: nextTest(); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: // TODO: Add tests for store/discard once they are implemented michael@0: // See RadioInterfaceLayer.js / Bug #768441 michael@0: michael@0: function isVoicemailStatus(status) { michael@0: is(voicemail.getStatus(), status); michael@0: is(voicemail.getStatus(serviceId), status); michael@0: michael@0: is(voicemail.getStatus().hasMessages, status.hasMessages); michael@0: is(voicemail.getStatus().messageCount, status.messageCount); michael@0: is(voicemail.getStatus().returnNumber, status.returnNumber); michael@0: is(voicemail.getStatus().returnMessage, status.returnMessage); michael@0: } michael@0: michael@0: const MWI_PDU_PREFIX = "0000"; michael@0: const MWI_PDU_UDH_PREFIX = "0040"; michael@0: const MWI_PID_DEFAULT = "00"; michael@0: const MWI_DCS_DISCARD_INACTIVE = "C0"; michael@0: const MWI_DCS_DISCARD_ACTIVE = "C8"; michael@0: const MWI_TIMESTAMP = "00000000000000"; michael@0: michael@0: const MWI_DEFAULT_BODY = "1 new voicemail"; michael@0: const MWI_UD_DEFAULT = PDUBuilder.buildUserData({ michael@0: body: MWI_DEFAULT_BODY michael@0: }); michael@0: michael@0: const MWI_LEVEL2_SENDER = "+15125551235"; michael@0: const MWI_LEVEL2_PDU_ADDRESS = PDUBuilder.buildAddress(MWI_LEVEL2_SENDER); michael@0: const MWI_LEVEL2_DISCARD_ACTIVE_PDU = michael@0: MWI_PDU_PREFIX + michael@0: MWI_LEVEL2_PDU_ADDRESS + michael@0: MWI_PID_DEFAULT + michael@0: MWI_DCS_DISCARD_ACTIVE + michael@0: MWI_TIMESTAMP + michael@0: MWI_UD_DEFAULT; michael@0: michael@0: function testLevel2DiscardActive() { michael@0: michael@0: function onLevel2Active(event) { michael@0: let status = event.status; michael@0: // TODO: bug 905228 - MozVoicemailStatus is not defined. michael@0: //ok(status instanceof MozVoicemailStatus); michael@0: is(status.hasMessages, true); michael@0: is(status.messageCount, -1); michael@0: is(status.returnNumber, MWI_LEVEL2_SENDER); michael@0: is(status.returnMessage, MWI_DEFAULT_BODY); michael@0: isVoicemailStatus(status); michael@0: } michael@0: michael@0: sendIndicatorPDU(MWI_LEVEL2_DISCARD_ACTIVE_PDU, michael@0: onLevel2Active, michael@0: testLevel2DiscardInactive); michael@0: michael@0: } michael@0: michael@0: const MWI_LEVEL2_DISCARD_INACTIVE_PDU = michael@0: MWI_PDU_PREFIX + michael@0: MWI_LEVEL2_PDU_ADDRESS + michael@0: MWI_PID_DEFAULT + michael@0: MWI_DCS_DISCARD_INACTIVE + michael@0: MWI_TIMESTAMP + michael@0: MWI_UD_DEFAULT; michael@0: michael@0: function testLevel2DiscardInactive() { michael@0: function onLevel2Inactive(event) { michael@0: let status = event.status; michael@0: // TODO: bug 905228 - MozVoicemailStatus is not defined. michael@0: //ok(status instanceof MozVoicemailStatus); michael@0: is(status.hasMessages, false); michael@0: is(status.messageCount, 0); michael@0: is(status.returnNumber, MWI_LEVEL2_SENDER); michael@0: is(status.returnMessage, MWI_DEFAULT_BODY); michael@0: isVoicemailStatus(status); michael@0: } michael@0: michael@0: sendIndicatorPDU(MWI_LEVEL2_DISCARD_INACTIVE_PDU, michael@0: onLevel2Inactive, michael@0: testLevel3DiscardActive); michael@0: } michael@0: michael@0: michael@0: // Tests for Level 3 MWI with a message count in the User Data Header michael@0: const MWI_LEVEL3_SENDER = "+15125551236"; michael@0: const MWI_LEVEL3_PDU_ADDRESS = PDUBuilder.buildAddress(MWI_LEVEL3_SENDER); michael@0: michael@0: const MWI_LEVEL3_ACTIVE_UDH_MSG_COUNT = 3; michael@0: const MWI_LEVEL3_ACTIVE_BODY = "3 new voicemails"; michael@0: const MWI_LEVEL3_ACTIVE_UD = PDUBuilder.buildUserData({ michael@0: headers: [{ michael@0: id: RIL.PDU_IEI_SPECIAL_SMS_MESSAGE_INDICATION, michael@0: length: 2, michael@0: octets: [ michael@0: RIL.PDU_MWI_STORE_TYPE_DISCARD, michael@0: MWI_LEVEL3_ACTIVE_UDH_MSG_COUNT michael@0: ] michael@0: }], michael@0: body: MWI_LEVEL3_ACTIVE_BODY michael@0: }); michael@0: michael@0: const MWI_LEVEL3_DISCARD_ACTIVE_PDU = michael@0: MWI_PDU_UDH_PREFIX + michael@0: MWI_LEVEL3_PDU_ADDRESS + michael@0: MWI_PID_DEFAULT + michael@0: MWI_DCS_DISCARD_ACTIVE + michael@0: MWI_TIMESTAMP + michael@0: MWI_LEVEL3_ACTIVE_UD; michael@0: michael@0: function testLevel3DiscardActive() { michael@0: michael@0: function onLevel3Active(event) { michael@0: let status = event.status; michael@0: // TODO: bug 905228 - MozVoicemailStatus is not defined. michael@0: //ok(status instanceof MozVoicemailStatus); michael@0: is(status.hasMessages, true); michael@0: is(status.messageCount, MWI_LEVEL3_ACTIVE_UDH_MSG_COUNT); michael@0: is(status.returnNumber, MWI_LEVEL3_SENDER); michael@0: is(status.returnMessage, MWI_LEVEL3_ACTIVE_BODY); michael@0: isVoicemailStatus(status); michael@0: } michael@0: michael@0: sendIndicatorPDU(MWI_LEVEL3_DISCARD_ACTIVE_PDU, michael@0: onLevel3Active, michael@0: testLevel3DiscardInactive); michael@0: } michael@0: michael@0: const MWI_LEVEL3_INACTIVE_BODY = "No unread voicemails"; michael@0: const MWI_LEVEL3_INACTIVE_UD = PDUBuilder.buildUserData({ michael@0: headers: [{ michael@0: id: RIL.PDU_IEI_SPECIAL_SMS_MESSAGE_INDICATION, michael@0: length: 2, michael@0: octets: [ michael@0: RIL.PDU_MWI_STORE_TYPE_DISCARD, michael@0: 0 // messageCount michael@0: ] michael@0: }], michael@0: body: MWI_LEVEL3_INACTIVE_BODY michael@0: }); michael@0: michael@0: const MWI_LEVEL3_DISCARD_INACTIVE_PDU = michael@0: MWI_PDU_UDH_PREFIX + michael@0: MWI_LEVEL3_PDU_ADDRESS + michael@0: MWI_PID_DEFAULT + michael@0: MWI_DCS_DISCARD_ACTIVE + michael@0: MWI_TIMESTAMP + michael@0: MWI_LEVEL3_INACTIVE_UD; michael@0: michael@0: function testLevel3DiscardInactive() { michael@0: function onLevel3Inactive(event) { michael@0: let status = event.status; michael@0: // TODO: bug 905228 - MozVoicemailStatus is not defined. michael@0: //ok(status instanceof MozVoicemailStatus); michael@0: is(status.hasMessages, false); michael@0: is(status.messageCount, 0); michael@0: is(status.returnNumber, MWI_LEVEL3_SENDER); michael@0: is(status.returnMessage, MWI_LEVEL3_INACTIVE_BODY); michael@0: isVoicemailStatus(status); michael@0: } michael@0: michael@0: sendIndicatorPDU(MWI_LEVEL3_DISCARD_INACTIVE_PDU, onLevel3Inactive, cleanUp); michael@0: } michael@0: michael@0: function cleanUp() { michael@0: SpecialPowers.removePermission("voicemail", document); michael@0: finish(); michael@0: } michael@0: michael@0: testLevel2DiscardActive();