|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 SpecialPowers.addPermission("voicemail", true, document); |
|
5 |
|
6 let voicemail = window.navigator.mozVoicemail; |
|
7 let serviceId = 0; |
|
8 |
|
9 ok(voicemail instanceof MozVoicemail); |
|
10 is(voicemail.status, null); |
|
11 |
|
12 function sendIndicatorPDU(pdu, listener, nextTest) { |
|
13 let smsCommand = "sms pdu " + pdu; |
|
14 let commandCompleted = false; |
|
15 let sawEvent = false; |
|
16 |
|
17 voicemail.addEventListener("statuschanged", function statusChanged(event) { |
|
18 voicemail.removeEventListener("statuschanged", statusChanged); |
|
19 |
|
20 try { |
|
21 listener(event); |
|
22 } catch (e) { |
|
23 ok(false, String(e)); |
|
24 } |
|
25 |
|
26 sawEvent = true; |
|
27 if (commandCompleted) { |
|
28 nextTest(); |
|
29 } |
|
30 }); |
|
31 |
|
32 log("-> " + smsCommand); |
|
33 runEmulatorCmd(smsCommand, function(result) { |
|
34 log("<- " + result); |
|
35 is(result[0], "OK"); |
|
36 commandCompleted = true; |
|
37 if (sawEvent) { |
|
38 nextTest(); |
|
39 } |
|
40 }); |
|
41 } |
|
42 |
|
43 // TODO: Add tests for store/discard once they are implemented |
|
44 // See RadioInterfaceLayer.js / Bug #768441 |
|
45 |
|
46 function isVoicemailStatus(status) { |
|
47 is(voicemail.getStatus(), status); |
|
48 is(voicemail.getStatus(serviceId), status); |
|
49 |
|
50 is(voicemail.getStatus().hasMessages, status.hasMessages); |
|
51 is(voicemail.getStatus().messageCount, status.messageCount); |
|
52 is(voicemail.getStatus().returnNumber, status.returnNumber); |
|
53 is(voicemail.getStatus().returnMessage, status.returnMessage); |
|
54 } |
|
55 |
|
56 const MWI_PDU_PREFIX = "0000"; |
|
57 const MWI_PDU_UDH_PREFIX = "0040"; |
|
58 const MWI_PID_DEFAULT = "00"; |
|
59 const MWI_DCS_DISCARD_INACTIVE = "C0"; |
|
60 const MWI_DCS_DISCARD_ACTIVE = "C8"; |
|
61 const MWI_TIMESTAMP = "00000000000000"; |
|
62 |
|
63 const MWI_DEFAULT_BODY = "1 new voicemail"; |
|
64 const MWI_UD_DEFAULT = PDUBuilder.buildUserData({ |
|
65 body: MWI_DEFAULT_BODY |
|
66 }); |
|
67 |
|
68 const MWI_LEVEL2_SENDER = "+15125551235"; |
|
69 const MWI_LEVEL2_PDU_ADDRESS = PDUBuilder.buildAddress(MWI_LEVEL2_SENDER); |
|
70 const MWI_LEVEL2_DISCARD_ACTIVE_PDU = |
|
71 MWI_PDU_PREFIX + |
|
72 MWI_LEVEL2_PDU_ADDRESS + |
|
73 MWI_PID_DEFAULT + |
|
74 MWI_DCS_DISCARD_ACTIVE + |
|
75 MWI_TIMESTAMP + |
|
76 MWI_UD_DEFAULT; |
|
77 |
|
78 function testLevel2DiscardActive() { |
|
79 |
|
80 function onLevel2Active(event) { |
|
81 let status = event.status; |
|
82 // TODO: bug 905228 - MozVoicemailStatus is not defined. |
|
83 //ok(status instanceof MozVoicemailStatus); |
|
84 is(status.hasMessages, true); |
|
85 is(status.messageCount, -1); |
|
86 is(status.returnNumber, MWI_LEVEL2_SENDER); |
|
87 is(status.returnMessage, MWI_DEFAULT_BODY); |
|
88 isVoicemailStatus(status); |
|
89 } |
|
90 |
|
91 sendIndicatorPDU(MWI_LEVEL2_DISCARD_ACTIVE_PDU, |
|
92 onLevel2Active, |
|
93 testLevel2DiscardInactive); |
|
94 |
|
95 } |
|
96 |
|
97 const MWI_LEVEL2_DISCARD_INACTIVE_PDU = |
|
98 MWI_PDU_PREFIX + |
|
99 MWI_LEVEL2_PDU_ADDRESS + |
|
100 MWI_PID_DEFAULT + |
|
101 MWI_DCS_DISCARD_INACTIVE + |
|
102 MWI_TIMESTAMP + |
|
103 MWI_UD_DEFAULT; |
|
104 |
|
105 function testLevel2DiscardInactive() { |
|
106 function onLevel2Inactive(event) { |
|
107 let status = event.status; |
|
108 // TODO: bug 905228 - MozVoicemailStatus is not defined. |
|
109 //ok(status instanceof MozVoicemailStatus); |
|
110 is(status.hasMessages, false); |
|
111 is(status.messageCount, 0); |
|
112 is(status.returnNumber, MWI_LEVEL2_SENDER); |
|
113 is(status.returnMessage, MWI_DEFAULT_BODY); |
|
114 isVoicemailStatus(status); |
|
115 } |
|
116 |
|
117 sendIndicatorPDU(MWI_LEVEL2_DISCARD_INACTIVE_PDU, |
|
118 onLevel2Inactive, |
|
119 testLevel3DiscardActive); |
|
120 } |
|
121 |
|
122 |
|
123 // Tests for Level 3 MWI with a message count in the User Data Header |
|
124 const MWI_LEVEL3_SENDER = "+15125551236"; |
|
125 const MWI_LEVEL3_PDU_ADDRESS = PDUBuilder.buildAddress(MWI_LEVEL3_SENDER); |
|
126 |
|
127 const MWI_LEVEL3_ACTIVE_UDH_MSG_COUNT = 3; |
|
128 const MWI_LEVEL3_ACTIVE_BODY = "3 new voicemails"; |
|
129 const MWI_LEVEL3_ACTIVE_UD = PDUBuilder.buildUserData({ |
|
130 headers: [{ |
|
131 id: RIL.PDU_IEI_SPECIAL_SMS_MESSAGE_INDICATION, |
|
132 length: 2, |
|
133 octets: [ |
|
134 RIL.PDU_MWI_STORE_TYPE_DISCARD, |
|
135 MWI_LEVEL3_ACTIVE_UDH_MSG_COUNT |
|
136 ] |
|
137 }], |
|
138 body: MWI_LEVEL3_ACTIVE_BODY |
|
139 }); |
|
140 |
|
141 const MWI_LEVEL3_DISCARD_ACTIVE_PDU = |
|
142 MWI_PDU_UDH_PREFIX + |
|
143 MWI_LEVEL3_PDU_ADDRESS + |
|
144 MWI_PID_DEFAULT + |
|
145 MWI_DCS_DISCARD_ACTIVE + |
|
146 MWI_TIMESTAMP + |
|
147 MWI_LEVEL3_ACTIVE_UD; |
|
148 |
|
149 function testLevel3DiscardActive() { |
|
150 |
|
151 function onLevel3Active(event) { |
|
152 let status = event.status; |
|
153 // TODO: bug 905228 - MozVoicemailStatus is not defined. |
|
154 //ok(status instanceof MozVoicemailStatus); |
|
155 is(status.hasMessages, true); |
|
156 is(status.messageCount, MWI_LEVEL3_ACTIVE_UDH_MSG_COUNT); |
|
157 is(status.returnNumber, MWI_LEVEL3_SENDER); |
|
158 is(status.returnMessage, MWI_LEVEL3_ACTIVE_BODY); |
|
159 isVoicemailStatus(status); |
|
160 } |
|
161 |
|
162 sendIndicatorPDU(MWI_LEVEL3_DISCARD_ACTIVE_PDU, |
|
163 onLevel3Active, |
|
164 testLevel3DiscardInactive); |
|
165 } |
|
166 |
|
167 const MWI_LEVEL3_INACTIVE_BODY = "No unread voicemails"; |
|
168 const MWI_LEVEL3_INACTIVE_UD = PDUBuilder.buildUserData({ |
|
169 headers: [{ |
|
170 id: RIL.PDU_IEI_SPECIAL_SMS_MESSAGE_INDICATION, |
|
171 length: 2, |
|
172 octets: [ |
|
173 RIL.PDU_MWI_STORE_TYPE_DISCARD, |
|
174 0 // messageCount |
|
175 ] |
|
176 }], |
|
177 body: MWI_LEVEL3_INACTIVE_BODY |
|
178 }); |
|
179 |
|
180 const MWI_LEVEL3_DISCARD_INACTIVE_PDU = |
|
181 MWI_PDU_UDH_PREFIX + |
|
182 MWI_LEVEL3_PDU_ADDRESS + |
|
183 MWI_PID_DEFAULT + |
|
184 MWI_DCS_DISCARD_ACTIVE + |
|
185 MWI_TIMESTAMP + |
|
186 MWI_LEVEL3_INACTIVE_UD; |
|
187 |
|
188 function testLevel3DiscardInactive() { |
|
189 function onLevel3Inactive(event) { |
|
190 let status = event.status; |
|
191 // TODO: bug 905228 - MozVoicemailStatus is not defined. |
|
192 //ok(status instanceof MozVoicemailStatus); |
|
193 is(status.hasMessages, false); |
|
194 is(status.messageCount, 0); |
|
195 is(status.returnNumber, MWI_LEVEL3_SENDER); |
|
196 is(status.returnMessage, MWI_LEVEL3_INACTIVE_BODY); |
|
197 isVoicemailStatus(status); |
|
198 } |
|
199 |
|
200 sendIndicatorPDU(MWI_LEVEL3_DISCARD_INACTIVE_PDU, onLevel3Inactive, cleanUp); |
|
201 } |
|
202 |
|
203 function cleanUp() { |
|
204 SpecialPowers.removePermission("voicemail", document); |
|
205 finish(); |
|
206 } |
|
207 |
|
208 testLevel2DiscardActive(); |