1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/system/gonk/tests/test_ril_worker_stk.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,1401 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +subscriptLoader.loadSubScript("resource://gre/modules/ril_consts.js", this); 1.8 + 1.9 +function run_test() { 1.10 + run_next_test(); 1.11 +} 1.12 + 1.13 +/** 1.14 + * Helper function. 1.15 + */ 1.16 +function newUint8Worker() { 1.17 + let worker = newWorker(); 1.18 + let index = 0; // index for read 1.19 + let buf = []; 1.20 + let context = worker.ContextPool._contexts[0]; 1.21 + 1.22 + context.Buf.writeUint8 = function(value) { 1.23 + buf.push(value); 1.24 + }; 1.25 + 1.26 + context.Buf.readUint8 = function() { 1.27 + return buf[index++]; 1.28 + }; 1.29 + 1.30 + context.Buf.seekIncoming = function(offset) { 1.31 + index += offset; 1.32 + }; 1.33 + 1.34 + worker.debug = do_print; 1.35 + 1.36 + return worker; 1.37 +} 1.38 + 1.39 +function newUint8SupportOutgoingIndexWorker() { 1.40 + let worker = newWorker(); 1.41 + let index = 4; // index for read 1.42 + let buf = [0, 0, 0, 0]; // Preserved parcel size 1.43 + let context = worker.ContextPool._contexts[0]; 1.44 + 1.45 + context.Buf.writeUint8 = function(value) { 1.46 + if (context.Buf.outgoingIndex >= buf.length) { 1.47 + buf.push(value); 1.48 + } else { 1.49 + buf[context.Buf.outgoingIndex] = value; 1.50 + } 1.51 + 1.52 + context.Buf.outgoingIndex++; 1.53 + }; 1.54 + 1.55 + context.Buf.readUint8 = function() { 1.56 + return buf[index++]; 1.57 + }; 1.58 + 1.59 + context.Buf.seekIncoming = function(offset) { 1.60 + index += offset; 1.61 + }; 1.62 + 1.63 + worker.debug = do_print; 1.64 + 1.65 + return worker; 1.66 +} 1.67 + 1.68 +// Test RIL requests related to STK. 1.69 +/** 1.70 + * Verify if RIL.sendStkTerminalProfile be called. 1.71 + */ 1.72 +add_test(function test_if_send_stk_terminal_profile() { 1.73 + let worker = newUint8Worker(); 1.74 + let context = worker.ContextPool._contexts[0]; 1.75 + let profileSend = false; 1.76 + context.RIL.sendStkTerminalProfile = function(data) { 1.77 + profileSend = true; 1.78 + }; 1.79 + 1.80 + let iccStatus = { 1.81 + gsmUmtsSubscriptionAppIndex: 0, 1.82 + apps: [{ 1.83 + app_state: CARD_APPSTATE_READY, 1.84 + app_type: CARD_APPTYPE_USIM 1.85 + }], 1.86 + }; 1.87 + worker.RILQUIRKS_SEND_STK_PROFILE_DOWNLOAD = false; 1.88 + 1.89 + context.RIL._processICCStatus(iccStatus); 1.90 + 1.91 + do_check_eq(profileSend, false); 1.92 + 1.93 + run_next_test(); 1.94 +}); 1.95 + 1.96 +/** 1.97 + * Verify RIL.sendStkTerminalProfile 1.98 + */ 1.99 +add_test(function test_send_stk_terminal_profile() { 1.100 + let worker = newUint8Worker(); 1.101 + let context = worker.ContextPool._contexts[0]; 1.102 + let ril = context.RIL; 1.103 + let buf = context.Buf; 1.104 + 1.105 + ril.sendStkTerminalProfile(STK_SUPPORTED_TERMINAL_PROFILE); 1.106 + 1.107 + buf.seekIncoming(8); 1.108 + let profile = buf.readString(); 1.109 + for (let i = 0; i < STK_SUPPORTED_TERMINAL_PROFILE.length; i++) { 1.110 + do_check_eq(parseInt(profile.substring(2 * i, 2 * i + 2), 16), 1.111 + STK_SUPPORTED_TERMINAL_PROFILE[i]); 1.112 + } 1.113 + 1.114 + run_next_test(); 1.115 +}); 1.116 + 1.117 +/** 1.118 + * Verify STK terminal response 1.119 + */ 1.120 +add_test(function test_stk_terminal_response() { 1.121 + let worker = newUint8SupportOutgoingIndexWorker(); 1.122 + let context = worker.ContextPool._contexts[0]; 1.123 + let buf = context.Buf; 1.124 + let pduHelper = context.GsmPDUHelper; 1.125 + 1.126 + buf.sendParcel = function() { 1.127 + // Type 1.128 + do_check_eq(this.readInt32(), REQUEST_STK_SEND_TERMINAL_RESPONSE); 1.129 + 1.130 + // Token : we don't care 1.131 + this.readInt32(); 1.132 + 1.133 + // Data Size, 44 = 2 * (TLV_COMMAND_DETAILS_SIZE(5) + 1.134 + // TLV_DEVICE_ID_SIZE(4) + 1.135 + // TLV_RESULT_SIZE(3) + 1.136 + // TEXT LENGTH(10)) 1.137 + do_check_eq(this.readInt32(), 44); 1.138 + 1.139 + // Command Details, Type-Length-Value 1.140 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_COMMAND_DETAILS | 1.141 + COMPREHENSIONTLV_FLAG_CR); 1.142 + do_check_eq(pduHelper.readHexOctet(), 3); 1.143 + do_check_eq(pduHelper.readHexOctet(), 0x01); 1.144 + do_check_eq(pduHelper.readHexOctet(), STK_CMD_PROVIDE_LOCAL_INFO); 1.145 + do_check_eq(pduHelper.readHexOctet(), STK_LOCAL_INFO_NNA); 1.146 + 1.147 + // Device Identifies, Type-Length-Value(Source ID-Destination ID) 1.148 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_DEVICE_ID); 1.149 + do_check_eq(pduHelper.readHexOctet(), 2); 1.150 + do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_ME); 1.151 + do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_SIM); 1.152 + 1.153 + // Result 1.154 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_RESULT | 1.155 + COMPREHENSIONTLV_FLAG_CR); 1.156 + do_check_eq(pduHelper.readHexOctet(), 1); 1.157 + do_check_eq(pduHelper.readHexOctet(), STK_RESULT_OK); 1.158 + 1.159 + // Text 1.160 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_TEXT_STRING | 1.161 + COMPREHENSIONTLV_FLAG_CR); 1.162 + do_check_eq(pduHelper.readHexOctet(), 8); 1.163 + do_check_eq(pduHelper.readHexOctet(), STK_TEXT_CODING_GSM_7BIT_PACKED); 1.164 + do_check_eq(pduHelper.readSeptetsToString(7, 0, PDU_NL_IDENTIFIER_DEFAULT, 1.165 + PDU_NL_IDENTIFIER_DEFAULT), "Mozilla"); 1.166 + 1.167 + run_next_test(); 1.168 + }; 1.169 + 1.170 + let response = { 1.171 + command: { 1.172 + commandNumber: 0x01, 1.173 + typeOfCommand: STK_CMD_PROVIDE_LOCAL_INFO, 1.174 + commandQualifier: STK_LOCAL_INFO_NNA, 1.175 + options: { 1.176 + isPacked: true 1.177 + } 1.178 + }, 1.179 + input: "Mozilla", 1.180 + resultCode: STK_RESULT_OK 1.181 + }; 1.182 + context.RIL.sendStkTerminalResponse(response); 1.183 +}); 1.184 + 1.185 +// Test ComprehensionTlvHelper 1.186 + 1.187 +/** 1.188 + * Verify ComprehensionTlvHelper.writeLocationInfoTlv 1.189 + */ 1.190 +add_test(function test_write_location_info_tlv() { 1.191 + let worker = newUint8Worker(); 1.192 + let context = worker.ContextPool._contexts[0]; 1.193 + let pduHelper = context.GsmPDUHelper; 1.194 + let tlvHelper = context.ComprehensionTlvHelper; 1.195 + 1.196 + // Test with 2-digit mnc, and gsmCellId obtained from UMTS network. 1.197 + let loc = { 1.198 + mcc: "466", 1.199 + mnc: "92", 1.200 + gsmLocationAreaCode : 10291, 1.201 + gsmCellId: 19072823 1.202 + }; 1.203 + tlvHelper.writeLocationInfoTlv(loc); 1.204 + 1.205 + let tag = pduHelper.readHexOctet(); 1.206 + do_check_eq(tag, COMPREHENSIONTLV_TAG_LOCATION_INFO | 1.207 + COMPREHENSIONTLV_FLAG_CR); 1.208 + 1.209 + let length = pduHelper.readHexOctet(); 1.210 + do_check_eq(length, 9); 1.211 + 1.212 + let mcc_mnc = pduHelper.readSwappedNibbleBcdString(3); 1.213 + do_check_eq(mcc_mnc, "46692"); 1.214 + 1.215 + let lac = (pduHelper.readHexOctet() << 8) | pduHelper.readHexOctet(); 1.216 + do_check_eq(lac, 10291); 1.217 + 1.218 + let cellId = (pduHelper.readHexOctet() << 24) | 1.219 + (pduHelper.readHexOctet() << 16) | 1.220 + (pduHelper.readHexOctet() << 8) | 1.221 + (pduHelper.readHexOctet()); 1.222 + do_check_eq(cellId, 19072823); 1.223 + 1.224 + // Test with 1-digit mnc, and gsmCellId obtained from GSM network. 1.225 + loc = { 1.226 + mcc: "466", 1.227 + mnc: "02", 1.228 + gsmLocationAreaCode : 10291, 1.229 + gsmCellId: 65534 1.230 + }; 1.231 + tlvHelper.writeLocationInfoTlv(loc); 1.232 + 1.233 + tag = pduHelper.readHexOctet(); 1.234 + do_check_eq(tag, COMPREHENSIONTLV_TAG_LOCATION_INFO | 1.235 + COMPREHENSIONTLV_FLAG_CR); 1.236 + 1.237 + length = pduHelper.readHexOctet(); 1.238 + do_check_eq(length, 7); 1.239 + 1.240 + mcc_mnc = pduHelper.readSwappedNibbleBcdString(3); 1.241 + do_check_eq(mcc_mnc, "46602"); 1.242 + 1.243 + lac = (pduHelper.readHexOctet() << 8) | pduHelper.readHexOctet(); 1.244 + do_check_eq(lac, 10291); 1.245 + 1.246 + cellId = (pduHelper.readHexOctet() << 8) | (pduHelper.readHexOctet()); 1.247 + do_check_eq(cellId, 65534); 1.248 + 1.249 + // Test with 3-digit mnc, and gsmCellId obtained from GSM network. 1.250 + loc = { 1.251 + mcc: "466", 1.252 + mnc: "222", 1.253 + gsmLocationAreaCode : 10291, 1.254 + gsmCellId: 65534 1.255 + }; 1.256 + tlvHelper.writeLocationInfoTlv(loc); 1.257 + 1.258 + tag = pduHelper.readHexOctet(); 1.259 + do_check_eq(tag, COMPREHENSIONTLV_TAG_LOCATION_INFO | 1.260 + COMPREHENSIONTLV_FLAG_CR); 1.261 + 1.262 + length = pduHelper.readHexOctet(); 1.263 + do_check_eq(length, 7); 1.264 + 1.265 + mcc_mnc = pduHelper.readSwappedNibbleBcdString(3); 1.266 + do_check_eq(mcc_mnc, "466222"); 1.267 + 1.268 + lac = (pduHelper.readHexOctet() << 8) | pduHelper.readHexOctet(); 1.269 + do_check_eq(lac, 10291); 1.270 + 1.271 + cellId = (pduHelper.readHexOctet() << 8) | (pduHelper.readHexOctet()); 1.272 + do_check_eq(cellId, 65534); 1.273 + 1.274 + run_next_test(); 1.275 +}); 1.276 + 1.277 +/** 1.278 + * Verify ComprehensionTlvHelper.writeErrorNumber 1.279 + */ 1.280 +add_test(function test_write_disconnecting_cause() { 1.281 + let worker = newUint8Worker(); 1.282 + let context = worker.ContextPool._contexts[0]; 1.283 + let pduHelper = context.GsmPDUHelper; 1.284 + let tlvHelper = context.ComprehensionTlvHelper; 1.285 + 1.286 + tlvHelper.writeCauseTlv(RIL_ERROR_TO_GECKO_ERROR[ERROR_GENERIC_FAILURE]); 1.287 + let tag = pduHelper.readHexOctet(); 1.288 + do_check_eq(tag, COMPREHENSIONTLV_TAG_CAUSE | COMPREHENSIONTLV_FLAG_CR); 1.289 + let len = pduHelper.readHexOctet(); 1.290 + do_check_eq(len, 2); // We have one cause. 1.291 + let standard = pduHelper.readHexOctet(); 1.292 + do_check_eq(standard, 0x60); 1.293 + let cause = pduHelper.readHexOctet(); 1.294 + do_check_eq(cause, 0x80 | ERROR_GENERIC_FAILURE); 1.295 + 1.296 + run_next_test(); 1.297 +}); 1.298 + 1.299 +/** 1.300 + * Verify ComprehensionTlvHelper.getSizeOfLengthOctets 1.301 + */ 1.302 +add_test(function test_get_size_of_length_octets() { 1.303 + let worker = newUint8Worker(); 1.304 + let context = worker.ContextPool._contexts[0]; 1.305 + let tlvHelper = context.ComprehensionTlvHelper; 1.306 + 1.307 + let length = 0x70; 1.308 + do_check_eq(tlvHelper.getSizeOfLengthOctets(length), 1); 1.309 + 1.310 + length = 0x80; 1.311 + do_check_eq(tlvHelper.getSizeOfLengthOctets(length), 2); 1.312 + 1.313 + length = 0x180; 1.314 + do_check_eq(tlvHelper.getSizeOfLengthOctets(length), 3); 1.315 + 1.316 + length = 0x18000; 1.317 + do_check_eq(tlvHelper.getSizeOfLengthOctets(length), 4); 1.318 + 1.319 + run_next_test(); 1.320 +}); 1.321 + 1.322 +/** 1.323 + * Verify ComprehensionTlvHelper.writeLength 1.324 + */ 1.325 +add_test(function test_write_length() { 1.326 + let worker = newUint8Worker(); 1.327 + let context = worker.ContextPool._contexts[0]; 1.328 + let pduHelper = context.GsmPDUHelper; 1.329 + let tlvHelper = context.ComprehensionTlvHelper; 1.330 + 1.331 + let length = 0x70; 1.332 + tlvHelper.writeLength(length); 1.333 + do_check_eq(pduHelper.readHexOctet(), length); 1.334 + 1.335 + length = 0x80; 1.336 + tlvHelper.writeLength(length); 1.337 + do_check_eq(pduHelper.readHexOctet(), 0x81); 1.338 + do_check_eq(pduHelper.readHexOctet(), length); 1.339 + 1.340 + length = 0x180; 1.341 + tlvHelper.writeLength(length); 1.342 + do_check_eq(pduHelper.readHexOctet(), 0x82); 1.343 + do_check_eq(pduHelper.readHexOctet(), (length >> 8) & 0xff); 1.344 + do_check_eq(pduHelper.readHexOctet(), length & 0xff); 1.345 + 1.346 + length = 0x18000; 1.347 + tlvHelper.writeLength(length); 1.348 + do_check_eq(pduHelper.readHexOctet(), 0x83); 1.349 + do_check_eq(pduHelper.readHexOctet(), (length >> 16) & 0xff); 1.350 + do_check_eq(pduHelper.readHexOctet(), (length >> 8) & 0xff); 1.351 + do_check_eq(pduHelper.readHexOctet(), length & 0xff); 1.352 + 1.353 + run_next_test(); 1.354 +}); 1.355 + 1.356 +// Test Proactive commands. 1.357 +/** 1.358 + * Verify Proactive command helper : searchForNextTag 1.359 + */ 1.360 +add_test(function test_stk_proactive_command_search_next_tag() { 1.361 + let worker = newUint8Worker(); 1.362 + let context = worker.ContextPool._contexts[0]; 1.363 + let pduHelper = context.GsmPDUHelper; 1.364 + let berHelper = context.BerTlvHelper; 1.365 + let stkHelper = context.StkProactiveCmdHelper; 1.366 + 1.367 + let tag_test = [ 1.368 + 0xD0, 1.369 + 0x3C, 1.370 + 0x85, 0x0A, 0x61, 0x6C, 0x70, 0x68, 0x61, 0x20, 0x69, 0x64, 0x20, 0x31, 1.371 + 0x85, 0x0A, 0x61, 0x6C, 0x70, 0x68, 0x61, 0x20, 0x69, 0x64, 0x20, 0x32, 1.372 + 0x85, 0x0A, 0x61, 0x6C, 0x70, 0x68, 0x61, 0x20, 0x69, 0x64, 0x20, 0x33, 1.373 + 0x85, 0x0A, 0x61, 0x6C, 0x70, 0x68, 0x61, 0x20, 0x69, 0x64, 0x20, 0x34, 1.374 + 0x85, 0x0A, 0x61, 0x6C, 0x70, 0x68, 0x61, 0x20, 0x69, 0x64, 0x20, 0x35]; 1.375 + 1.376 + for (let i = 0; i < tag_test.length; i++) { 1.377 + pduHelper.writeHexOctet(tag_test[i]); 1.378 + } 1.379 + 1.380 + let berTlv = berHelper.decode(tag_test.length); 1.381 + let iter = Iterator(berTlv.value); 1.382 + let tlv = stkHelper.searchForNextTag(COMPREHENSIONTLV_TAG_ALPHA_ID, iter); 1.383 + do_check_eq(tlv.value.identifier, "alpha id 1"); 1.384 + 1.385 + tlv = stkHelper.searchForNextTag(COMPREHENSIONTLV_TAG_ALPHA_ID, iter); 1.386 + do_check_eq(tlv.value.identifier, "alpha id 2"); 1.387 + 1.388 + tlv = stkHelper.searchForNextTag(COMPREHENSIONTLV_TAG_ALPHA_ID, iter); 1.389 + do_check_eq(tlv.value.identifier, "alpha id 3"); 1.390 + 1.391 + tlv = stkHelper.searchForNextTag(COMPREHENSIONTLV_TAG_ALPHA_ID, iter); 1.392 + do_check_eq(tlv.value.identifier, "alpha id 4"); 1.393 + 1.394 + tlv = stkHelper.searchForNextTag(COMPREHENSIONTLV_TAG_ALPHA_ID, iter); 1.395 + do_check_eq(tlv.value.identifier, "alpha id 5"); 1.396 + 1.397 + run_next_test(); 1.398 +}); 1.399 + 1.400 +/** 1.401 + * Verify Proactive Command : Refresh 1.402 + */ 1.403 +add_test(function test_stk_proactive_command_refresh() { 1.404 + let worker = newUint8Worker(); 1.405 + let context = worker.ContextPool._contexts[0]; 1.406 + let pduHelper = context.GsmPDUHelper; 1.407 + let berHelper = context.BerTlvHelper; 1.408 + let stkHelper = context.StkProactiveCmdHelper; 1.409 + 1.410 + let refresh_1 = [ 1.411 + 0xD0, 1.412 + 0x10, 1.413 + 0x81, 0x03, 0x01, 0x01, 0x01, 1.414 + 0x82, 0x02, 0x81, 0x82, 1.415 + 0x92, 0x05, 0x01, 0x3F, 0x00, 0x2F, 0xE2]; 1.416 + 1.417 + for (let i = 0; i < refresh_1.length; i++) { 1.418 + pduHelper.writeHexOctet(refresh_1[i]); 1.419 + } 1.420 + 1.421 + let berTlv = berHelper.decode(refresh_1.length); 1.422 + let ctlvs = berTlv.value; 1.423 + let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.424 + do_check_eq(tlv.value.commandNumber, 0x01); 1.425 + do_check_eq(tlv.value.typeOfCommand, 0x01); 1.426 + do_check_eq(tlv.value.commandQualifier, 0x01); 1.427 + 1.428 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_FILE_LIST, ctlvs); 1.429 + do_check_eq(tlv.value.fileList, "3F002FE2"); 1.430 + 1.431 + run_next_test(); 1.432 +}); 1.433 + 1.434 +/** 1.435 + * Verify Proactive Command : Play Tone 1.436 + */ 1.437 +add_test(function test_stk_proactive_command_play_tone() { 1.438 + let worker = newUint8Worker(); 1.439 + let context = worker.ContextPool._contexts[0]; 1.440 + let pduHelper = context.GsmPDUHelper; 1.441 + let berHelper = context.BerTlvHelper; 1.442 + let stkHelper = context.StkProactiveCmdHelper; 1.443 + 1.444 + let tone_1 = [ 1.445 + 0xD0, 1.446 + 0x1B, 1.447 + 0x81, 0x03, 0x01, 0x20, 0x00, 1.448 + 0x82, 0x02, 0x81, 0x03, 1.449 + 0x85, 0x09, 0x44, 0x69, 0x61, 0x6C, 0x20, 0x54, 0x6F, 0x6E, 0x65, 1.450 + 0x8E, 0x01, 0x01, 1.451 + 0x84, 0x02, 0x01, 0x05]; 1.452 + 1.453 + for (let i = 0; i < tone_1.length; i++) { 1.454 + pduHelper.writeHexOctet(tone_1[i]); 1.455 + } 1.456 + 1.457 + let berTlv = berHelper.decode(tone_1.length); 1.458 + let ctlvs = berTlv.value; 1.459 + let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.460 + do_check_eq(tlv.value.commandNumber, 0x01); 1.461 + do_check_eq(tlv.value.typeOfCommand, 0x20); 1.462 + do_check_eq(tlv.value.commandQualifier, 0x00); 1.463 + 1.464 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_ALPHA_ID, ctlvs); 1.465 + do_check_eq(tlv.value.identifier, "Dial Tone"); 1.466 + 1.467 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TONE, ctlvs); 1.468 + do_check_eq(tlv.value.tone, STK_TONE_TYPE_DIAL_TONE); 1.469 + 1.470 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_DURATION, ctlvs); 1.471 + do_check_eq(tlv.value.timeUnit, STK_TIME_UNIT_SECOND); 1.472 + do_check_eq(tlv.value.timeInterval, 5); 1.473 + 1.474 + run_next_test(); 1.475 +}); 1.476 + 1.477 +/** 1.478 + * Verify Proactive Command : Poll Interval 1.479 + */ 1.480 +add_test(function test_stk_proactive_command_poll_interval() { 1.481 + let worker = newUint8Worker(); 1.482 + let context = worker.ContextPool._contexts[0]; 1.483 + let pduHelper = context.GsmPDUHelper; 1.484 + let berHelper = context.BerTlvHelper; 1.485 + let stkHelper = context.StkProactiveCmdHelper; 1.486 + 1.487 + let poll_1 = [ 1.488 + 0xD0, 1.489 + 0x0D, 1.490 + 0x81, 0x03, 0x01, 0x03, 0x00, 1.491 + 0x82, 0x02, 0x81, 0x82, 1.492 + 0x84, 0x02, 0x01, 0x14]; 1.493 + 1.494 + for (let i = 0; i < poll_1.length; i++) { 1.495 + pduHelper.writeHexOctet(poll_1[i]); 1.496 + } 1.497 + 1.498 + let berTlv = berHelper.decode(poll_1.length); 1.499 + let ctlvs = berTlv.value; 1.500 + let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.501 + do_check_eq(tlv.value.commandNumber, 0x01); 1.502 + do_check_eq(tlv.value.typeOfCommand, 0x03); 1.503 + do_check_eq(tlv.value.commandQualifier, 0x00); 1.504 + 1.505 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_DURATION, ctlvs); 1.506 + do_check_eq(tlv.value.timeUnit, STK_TIME_UNIT_SECOND); 1.507 + do_check_eq(tlv.value.timeInterval, 0x14); 1.508 + 1.509 + run_next_test(); 1.510 +}); 1.511 + 1.512 +/** 1.513 + * Verify Proactive Command: Display Text 1.514 + */ 1.515 +add_test(function test_read_septets_to_string() { 1.516 + let worker = newUint8Worker(); 1.517 + let context = worker.ContextPool._contexts[0]; 1.518 + let pduHelper = context.GsmPDUHelper; 1.519 + let berHelper = context.BerTlvHelper; 1.520 + let stkHelper = context.StkProactiveCmdHelper; 1.521 + 1.522 + let display_text_1 = [ 1.523 + 0xd0, 1.524 + 0x28, 1.525 + 0x81, 0x03, 0x01, 0x21, 0x80, 1.526 + 0x82, 0x02, 0x81, 0x02, 1.527 + 0x0d, 0x1d, 0x00, 0xd3, 0x30, 0x9b, 0xfc, 0x06, 0xc9, 0x5c, 0x30, 0x1a, 1.528 + 0xa8, 0xe8, 0x02, 0x59, 0xc3, 0xec, 0x34, 0xb9, 0xac, 0x07, 0xc9, 0x60, 1.529 + 0x2f, 0x58, 0xed, 0x15, 0x9b, 0xb9, 0x40, 1.530 + ]; 1.531 + 1.532 + for (let i = 0; i < display_text_1.length; i++) { 1.533 + pduHelper.writeHexOctet(display_text_1[i]); 1.534 + } 1.535 + 1.536 + let berTlv = berHelper.decode(display_text_1.length); 1.537 + let ctlvs = berTlv.value; 1.538 + let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TEXT_STRING, ctlvs); 1.539 + do_check_eq(tlv.value.textString, "Saldo 2.04 E. Validez 20/05/13. "); 1.540 + 1.541 + run_next_test(); 1.542 +}); 1.543 + 1.544 +/** 1.545 + * Verify Proactive Command: Set Up Event List. 1.546 + */ 1.547 +add_test(function test_stk_proactive_command_event_list() { 1.548 + let worker = newUint8Worker(); 1.549 + let context = worker.ContextPool._contexts[0]; 1.550 + let pduHelper = context.GsmPDUHelper; 1.551 + let berHelper = context.BerTlvHelper; 1.552 + let stkHelper = context.StkProactiveCmdHelper; 1.553 + 1.554 + let event_1 = [ 1.555 + 0xD0, 1.556 + 0x0F, 1.557 + 0x81, 0x03, 0x01, 0x05, 0x00, 1.558 + 0x82, 0x02, 0x81, 0x82, 1.559 + 0x99, 0x04, 0x00, 0x01, 0x02, 0x03]; 1.560 + 1.561 + for (let i = 0; i < event_1.length; i++) { 1.562 + pduHelper.writeHexOctet(event_1[i]); 1.563 + } 1.564 + 1.565 + let berTlv = berHelper.decode(event_1.length); 1.566 + let ctlvs = berTlv.value; 1.567 + let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.568 + do_check_eq(tlv.value.commandNumber, 0x01); 1.569 + do_check_eq(tlv.value.typeOfCommand, 0x05); 1.570 + do_check_eq(tlv.value.commandQualifier, 0x00); 1.571 + 1.572 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_EVENT_LIST, ctlvs); 1.573 + do_check_eq(Array.isArray(tlv.value.eventList), true); 1.574 + for (let i = 0; i < tlv.value.eventList.length; i++) { 1.575 + do_check_eq(tlv.value.eventList[i], i); 1.576 + } 1.577 + 1.578 + run_next_test(); 1.579 +}); 1.580 + 1.581 +/** 1.582 + * Verify Proactive Command : Get Input 1.583 + */ 1.584 +add_test(function test_stk_proactive_command_get_input() { 1.585 + let worker = newUint8Worker(); 1.586 + let context = worker.ContextPool._contexts[0]; 1.587 + let pduHelper = context.GsmPDUHelper; 1.588 + let berHelper = context.BerTlvHelper; 1.589 + let stkHelper = context.StkProactiveCmdHelper; 1.590 + let stkCmdHelper = context.StkCommandParamsFactory; 1.591 + 1.592 + let get_input_1 = [ 1.593 + 0xD0, 1.594 + 0x1E, 1.595 + 0x81, 0x03, 0x01, 0x23, 0x8F, 1.596 + 0x82, 0x02, 0x81, 0x82, 1.597 + 0x8D, 0x05, 0x04, 0x54, 0x65, 0x78, 0x74, 1.598 + 0x91, 0x02, 0x01, 0x10, 1.599 + 0x17, 0x08, 0x04, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74]; 1.600 + 1.601 + for (let i = 0; i < get_input_1.length; i++) { 1.602 + pduHelper.writeHexOctet(get_input_1[i]); 1.603 + } 1.604 + 1.605 + let berTlv = berHelper.decode(get_input_1.length); 1.606 + let ctlvs = berTlv.value; 1.607 + let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.608 + do_check_eq(tlv.value.commandNumber, 0x01); 1.609 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_GET_INPUT); 1.610 + 1.611 + let input = stkCmdHelper.createParam(tlv.value, ctlvs); 1.612 + do_check_eq(input.text, "Text"); 1.613 + do_check_eq(input.isAlphabet, true); 1.614 + do_check_eq(input.isUCS2, true); 1.615 + do_check_eq(input.hideInput, true); 1.616 + do_check_eq(input.isPacked, true); 1.617 + do_check_eq(input.isHelpAvailable, true); 1.618 + do_check_eq(input.minLength, 0x01); 1.619 + do_check_eq(input.maxLength, 0x10); 1.620 + do_check_eq(input.defaultText, "Default"); 1.621 + 1.622 + let get_input_2 = [ 1.623 + 0xD0, 1.624 + 0x11, 1.625 + 0x81, 0x03, 0x01, 0x23, 0x00, 1.626 + 0x82, 0x02, 0x81, 0x82, 1.627 + 0x8D, 0x00, 1.628 + 0x91, 0x02, 0x01, 0x10, 1.629 + 0x17, 0x00]; 1.630 + 1.631 + for (let i = 0; i < get_input_2.length; i++) { 1.632 + pduHelper.writeHexOctet(get_input_2[i]); 1.633 + } 1.634 + 1.635 + berTlv = berHelper.decode(get_input_2.length); 1.636 + ctlvs = berTlv.value; 1.637 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.638 + do_check_eq(tlv.value.commandNumber, 0x01); 1.639 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_GET_INPUT); 1.640 + 1.641 + input = stkCmdHelper.createParam(tlv.value, ctlvs); 1.642 + do_check_eq(input.text, null); 1.643 + do_check_eq(input.minLength, 0x01); 1.644 + do_check_eq(input.maxLength, 0x10); 1.645 + do_check_eq(input.defaultText, null); 1.646 + 1.647 + run_next_test(); 1.648 +}); 1.649 + 1.650 +/** 1.651 + * Verify Proactive Command : More Time 1.652 + */ 1.653 +add_test(function test_stk_proactive_command_more_time() { 1.654 + let worker = newUint8Worker(); 1.655 + let context = worker.ContextPool._contexts[0]; 1.656 + let pduHelper = context.GsmPDUHelper; 1.657 + let berHelper = context.BerTlvHelper; 1.658 + let stkHelper = context.StkProactiveCmdHelper; 1.659 + 1.660 + let more_time_1 = [ 1.661 + 0xD0, 1.662 + 0x09, 1.663 + 0x81, 0x03, 0x01, 0x02, 0x00, 1.664 + 0x82, 0x02, 0x81, 0x82]; 1.665 + 1.666 + for(let i = 0 ; i < more_time_1.length; i++) { 1.667 + pduHelper.writeHexOctet(more_time_1[i]); 1.668 + } 1.669 + 1.670 + let berTlv = berHelper.decode(more_time_1.length); 1.671 + let ctlvs = berTlv.value; 1.672 + let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.673 + do_check_eq(tlv.value.commandNumber, 0x01); 1.674 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_MORE_TIME); 1.675 + do_check_eq(tlv.value.commandQualifier, 0x00); 1.676 + 1.677 + run_next_test(); 1.678 +}); 1.679 + 1.680 +/** 1.681 + * Verify Proactive Command : Select Item 1.682 + */ 1.683 +add_test(function test_stk_proactive_command_select_item() { 1.684 + let worker = newUint8Worker(); 1.685 + let context = worker.ContextPool._contexts[0]; 1.686 + let pduHelper = context.GsmPDUHelper; 1.687 + let berHelper = context.BerTlvHelper; 1.688 + let stkHelper = context.StkProactiveCmdHelper; 1.689 + let stkFactory = context.StkCommandParamsFactory; 1.690 + 1.691 + let select_item_1 = [ 1.692 + 0xD0, 1.693 + 0x33, 1.694 + 0x81, 0x03, 0x01, 0x24, 0x00, 1.695 + 0x82, 0x02, 0x81, 0x82, 1.696 + 0x85, 0x05, 0x54, 0x69, 0x74, 0x6C, 0x65, 1.697 + 0x8F, 0x07, 0x01, 0x69, 0x74, 0x65, 0x6D, 0x20, 0x31, 1.698 + 0x8F, 0x07, 0x02, 0x69, 0x74, 0x65, 0x6D, 0x20, 0x32, 1.699 + 0x8F, 0x07, 0x03, 0x69, 0x74, 0x65, 0x6D, 0x20, 0x33, 1.700 + 0x18, 0x03, 0x10, 0x15, 0x20, 1.701 + 0x90, 0x01, 0x01 1.702 + ]; 1.703 + 1.704 + for(let i = 0 ; i < select_item_1.length; i++) { 1.705 + pduHelper.writeHexOctet(select_item_1[i]); 1.706 + } 1.707 + 1.708 + let berTlv = berHelper.decode(select_item_1.length); 1.709 + let ctlvs = berTlv.value; 1.710 + let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.711 + do_check_eq(tlv.value.commandNumber, 0x01); 1.712 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_SELECT_ITEM); 1.713 + do_check_eq(tlv.value.commandQualifier, 0x00); 1.714 + 1.715 + let menu = stkFactory.createParam(tlv.value, ctlvs); 1.716 + do_check_eq(menu.title, "Title"); 1.717 + do_check_eq(menu.items[0].identifier, 1); 1.718 + do_check_eq(menu.items[0].text, "item 1"); 1.719 + do_check_eq(menu.items[1].identifier, 2); 1.720 + do_check_eq(menu.items[1].text, "item 2"); 1.721 + do_check_eq(menu.items[2].identifier, 3); 1.722 + do_check_eq(menu.items[2].text, "item 3"); 1.723 + do_check_eq(menu.nextActionList[0], STK_CMD_SET_UP_CALL); 1.724 + do_check_eq(menu.nextActionList[1], STK_CMD_LAUNCH_BROWSER); 1.725 + do_check_eq(menu.nextActionList[2], STK_CMD_PLAY_TONE); 1.726 + do_check_eq(menu.defaultItem, 0x00); 1.727 + 1.728 + let select_item_2 = [ 1.729 + 0xD0, 1.730 + 0x33, 1.731 + 0x81, 0x03, 0x01, 0x24, 0x00, 1.732 + 0x82, 0x02, 0x81, 0x82, 1.733 + 0x85, 0x05, 0x54, 0x69, 0x74, 0x6C, 0x65, 1.734 + 0x8F, 0x07, 0x01, 0x69, 0x74, 0x65, 0x6D, 0x20, 0x31, 1.735 + 0x8F, 0x07, 0x02, 0x69, 0x74, 0x65, 0x6D, 0x20, 0x32, 1.736 + 0x8F, 0x07, 0x03, 0x69, 0x74, 0x65, 0x6D, 0x20, 0x33, 1.737 + 0x18, 0x03, 0x00, 0x15, 0x81, 1.738 + 0x90, 0x01, 0x03 1.739 + ]; 1.740 + 1.741 + for(let i = 0 ; i < select_item_2.length; i++) { 1.742 + pduHelper.writeHexOctet(select_item_2[i]); 1.743 + } 1.744 + 1.745 + berTlv = berHelper.decode(select_item_2.length); 1.746 + ctlvs = berTlv.value; 1.747 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.748 + do_check_eq(tlv.value.commandNumber, 0x01); 1.749 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_SELECT_ITEM); 1.750 + do_check_eq(tlv.value.commandQualifier, 0x00); 1.751 + 1.752 + menu = stkFactory.createParam(tlv.value, ctlvs); 1.753 + do_check_eq(menu.title, "Title"); 1.754 + do_check_eq(menu.items[0].identifier, 1); 1.755 + do_check_eq(menu.items[0].text, "item 1"); 1.756 + do_check_eq(menu.items[1].identifier, 2); 1.757 + do_check_eq(menu.items[1].text, "item 2"); 1.758 + do_check_eq(menu.items[2].identifier, 3); 1.759 + do_check_eq(menu.items[2].text, "item 3"); 1.760 + do_check_eq(menu.nextActionList[0], STK_NEXT_ACTION_NULL); 1.761 + do_check_eq(menu.nextActionList[1], STK_CMD_LAUNCH_BROWSER); 1.762 + do_check_eq(menu.nextActionList[2], STK_NEXT_ACTION_END_PROACTIVE_SESSION); 1.763 + do_check_eq(menu.defaultItem, 0x02); 1.764 + 1.765 + run_next_test(); 1.766 +}); 1.767 + 1.768 +/** 1.769 + * Verify Proactive Command : Set Up Menu 1.770 + */ 1.771 +add_test(function test_stk_proactive_command_set_up_menu() { 1.772 + let worker = newUint8Worker(); 1.773 + let context = worker.ContextPool._contexts[0]; 1.774 + let pduHelper = context.GsmPDUHelper; 1.775 + let berHelper = context.BerTlvHelper; 1.776 + let stkHelper = context.StkProactiveCmdHelper; 1.777 + let stkFactory = context.StkCommandParamsFactory; 1.778 + 1.779 + let set_up_menu_1 = [ 1.780 + 0xD0, 1.781 + 0x30, 1.782 + 0x81, 0x03, 0x01, 0x25, 0x00, 1.783 + 0x82, 0x02, 0x81, 0x82, 1.784 + 0x85, 0x05, 0x54, 0x69, 0x74, 0x6C, 0x65, 1.785 + 0x8F, 0x07, 0x01, 0x69, 0x74, 0x65, 0x6D, 0x20, 0x31, 1.786 + 0x8F, 0x07, 0x02, 0x69, 0x74, 0x65, 0x6D, 0x20, 0x32, 1.787 + 0x8F, 0x07, 0x03, 0x69, 0x74, 0x65, 0x6D, 0x20, 0x33, 1.788 + 0x18, 0x03, 0x10, 0x15, 0x20 1.789 + ]; 1.790 + 1.791 + for(let i = 0 ; i < set_up_menu_1.length; i++) { 1.792 + pduHelper.writeHexOctet(set_up_menu_1[i]); 1.793 + } 1.794 + 1.795 + let berTlv = berHelper.decode(set_up_menu_1.length); 1.796 + let ctlvs = berTlv.value; 1.797 + let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.798 + do_check_eq(tlv.value.commandNumber, 0x01); 1.799 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_SET_UP_MENU); 1.800 + do_check_eq(tlv.value.commandQualifier, 0x00); 1.801 + 1.802 + let menu = stkFactory.createParam(tlv.value, ctlvs); 1.803 + do_check_eq(menu.title, "Title"); 1.804 + do_check_eq(menu.items[0].identifier, 1); 1.805 + do_check_eq(menu.items[0].text, "item 1"); 1.806 + do_check_eq(menu.items[1].identifier, 2); 1.807 + do_check_eq(menu.items[1].text, "item 2"); 1.808 + do_check_eq(menu.items[2].identifier, 3); 1.809 + do_check_eq(menu.items[2].text, "item 3"); 1.810 + do_check_eq(menu.nextActionList[0], STK_CMD_SET_UP_CALL); 1.811 + do_check_eq(menu.nextActionList[1], STK_CMD_LAUNCH_BROWSER); 1.812 + do_check_eq(menu.nextActionList[2], STK_CMD_PLAY_TONE); 1.813 + 1.814 + let set_up_menu_2 = [ 1.815 + 0xD0, 1.816 + 0x30, 1.817 + 0x81, 0x03, 0x01, 0x25, 0x00, 1.818 + 0x82, 0x02, 0x81, 0x82, 1.819 + 0x85, 0x05, 0x54, 0x69, 0x74, 0x6C, 0x65, 1.820 + 0x8F, 0x07, 0x01, 0x69, 0x74, 0x65, 0x6D, 0x20, 0x31, 1.821 + 0x8F, 0x07, 0x02, 0x69, 0x74, 0x65, 0x6D, 0x20, 0x32, 1.822 + 0x8F, 0x07, 0x03, 0x69, 0x74, 0x65, 0x6D, 0x20, 0x33, 1.823 + 0x18, 0x03, 0x81, 0x00, 0x00 1.824 + ]; 1.825 + 1.826 + for(let i = 0 ; i < set_up_menu_2.length; i++) { 1.827 + pduHelper.writeHexOctet(set_up_menu_2[i]); 1.828 + } 1.829 + 1.830 + berTlv = berHelper.decode(set_up_menu_2.length); 1.831 + ctlvs = berTlv.value; 1.832 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.833 + do_check_eq(tlv.value.commandNumber, 0x01); 1.834 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_SET_UP_MENU); 1.835 + do_check_eq(tlv.value.commandQualifier, 0x00); 1.836 + 1.837 + let menu = stkFactory.createParam(tlv.value, ctlvs); 1.838 + do_check_eq(menu.title, "Title"); 1.839 + do_check_eq(menu.items[0].identifier, 1); 1.840 + do_check_eq(menu.items[0].text, "item 1"); 1.841 + do_check_eq(menu.items[1].identifier, 2); 1.842 + do_check_eq(menu.items[1].text, "item 2"); 1.843 + do_check_eq(menu.items[2].identifier, 3); 1.844 + do_check_eq(menu.items[2].text, "item 3"); 1.845 + do_check_eq(menu.nextActionList[0], STK_NEXT_ACTION_END_PROACTIVE_SESSION); 1.846 + do_check_eq(menu.nextActionList[1], STK_NEXT_ACTION_NULL); 1.847 + do_check_eq(menu.nextActionList[2], STK_NEXT_ACTION_NULL); 1.848 + 1.849 + run_next_test(); 1.850 +}); 1.851 + 1.852 +/** 1.853 + * Verify Proactive Command : Set Up Call 1.854 + */ 1.855 +add_test(function test_stk_proactive_command_set_up_call() { 1.856 + let worker = newUint8Worker(); 1.857 + let context = worker.ContextPool._contexts[0]; 1.858 + let pduHelper = context.GsmPDUHelper; 1.859 + let berHelper = context.BerTlvHelper; 1.860 + let stkHelper = context.StkProactiveCmdHelper; 1.861 + let cmdFactory = context.StkCommandParamsFactory; 1.862 + 1.863 + let set_up_call_1 = [ 1.864 + 0xD0, 1.865 + 0x29, 1.866 + 0x81, 0x03, 0x01, 0x10, 0x04, 1.867 + 0x82, 0x02, 0x81, 0x82, 1.868 + 0x05, 0x0A, 0x44, 0x69, 0x73, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74, 1.869 + 0x86, 0x09, 0x81, 0x10, 0x32, 0x04, 0x21, 0x43, 0x65, 0x1C, 0x2C, 1.870 + 0x05, 0x07, 0x4D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65]; 1.871 + 1.872 + for (let i = 0 ; i < set_up_call_1.length; i++) { 1.873 + pduHelper.writeHexOctet(set_up_call_1[i]); 1.874 + } 1.875 + 1.876 + let berTlv = berHelper.decode(set_up_call_1.length); 1.877 + let ctlvs = berTlv.value; 1.878 + let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.879 + do_check_eq(tlv.value.commandNumber, 0x01); 1.880 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_SET_UP_CALL); 1.881 + 1.882 + let setupCall = cmdFactory.createParam(tlv.value, ctlvs); 1.883 + do_check_eq(setupCall.address, "012340123456,1,2"); 1.884 + do_check_eq(setupCall.confirmMessage, "Disconnect"); 1.885 + do_check_eq(setupCall.callMessage, "Message"); 1.886 + 1.887 + run_next_test(); 1.888 +}); 1.889 + 1.890 +/** 1.891 + * Verify Proactive Command : Timer Management 1.892 + */ 1.893 +add_test(function test_stk_proactive_command_timer_management() { 1.894 + let worker = newUint8Worker(); 1.895 + let context = worker.ContextPool._contexts[0]; 1.896 + let pduHelper = context.GsmPDUHelper; 1.897 + let berHelper = context.BerTlvHelper; 1.898 + let stkHelper = context.StkProactiveCmdHelper; 1.899 + 1.900 + // Timer Management - Start 1.901 + let timer_management_1 = [ 1.902 + 0xD0, 1.903 + 0x11, 1.904 + 0x81, 0x03, 0x01, 0x27, 0x00, 1.905 + 0x82, 0x02, 0x81, 0x82, 1.906 + 0xA4, 0x01, 0x01, 1.907 + 0xA5, 0x03, 0x10, 0x20, 0x30 1.908 + ]; 1.909 + 1.910 + for(let i = 0 ; i < timer_management_1.length; i++) { 1.911 + pduHelper.writeHexOctet(timer_management_1[i]); 1.912 + } 1.913 + 1.914 + let berTlv = berHelper.decode(timer_management_1.length); 1.915 + let ctlvs = berTlv.value; 1.916 + let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.917 + do_check_eq(tlv.value.commandNumber, 0x01); 1.918 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_TIMER_MANAGEMENT); 1.919 + do_check_eq(tlv.value.commandQualifier, STK_TIMER_START); 1.920 + 1.921 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TIMER_IDENTIFIER, ctlvs); 1.922 + do_check_eq(tlv.value.timerId, 0x01); 1.923 + 1.924 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TIMER_VALUE, ctlvs); 1.925 + do_check_eq(tlv.value.timerValue, (0x01 * 60 * 60) + (0x02 * 60) + 0x03); 1.926 + 1.927 + // Timer Management - Deactivate 1.928 + let timer_management_2 = [ 1.929 + 0xD0, 1.930 + 0x0C, 1.931 + 0x81, 0x03, 0x01, 0x27, 0x01, 1.932 + 0x82, 0x02, 0x81, 0x82, 1.933 + 0xA4, 0x01, 0x01 1.934 + ]; 1.935 + 1.936 + for(let i = 0 ; i < timer_management_2.length; i++) { 1.937 + pduHelper.writeHexOctet(timer_management_2[i]); 1.938 + } 1.939 + 1.940 + berTlv = berHelper.decode(timer_management_2.length); 1.941 + ctlvs = berTlv.value; 1.942 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.943 + do_check_eq(tlv.value.commandNumber, 0x01); 1.944 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_TIMER_MANAGEMENT); 1.945 + do_check_eq(tlv.value.commandQualifier, STK_TIMER_DEACTIVATE); 1.946 + 1.947 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TIMER_IDENTIFIER, ctlvs); 1.948 + do_check_eq(tlv.value.timerId, 0x01); 1.949 + 1.950 + run_next_test(); 1.951 +}); 1.952 + 1.953 +/** 1.954 + * Verify Proactive Command : Provide Local Information 1.955 + */ 1.956 +add_test(function test_stk_proactive_command_provide_local_information() { 1.957 + let worker = newUint8Worker(); 1.958 + let context = worker.ContextPool._contexts[0]; 1.959 + let pduHelper = context.GsmPDUHelper; 1.960 + let berHelper = context.BerTlvHelper; 1.961 + let stkHelper = context.StkProactiveCmdHelper; 1.962 + 1.963 + // Verify IMEI 1.964 + let local_info_1 = [ 1.965 + 0xD0, 1.966 + 0x09, 1.967 + 0x81, 0x03, 0x01, 0x26, 0x01, 1.968 + 0x82, 0x02, 0x81, 0x82]; 1.969 + 1.970 + for (let i = 0; i < local_info_1.length; i++) { 1.971 + pduHelper.writeHexOctet(local_info_1[i]); 1.972 + } 1.973 + 1.974 + let berTlv = berHelper.decode(local_info_1.length); 1.975 + let ctlvs = berTlv.value; 1.976 + let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.977 + do_check_eq(tlv.value.commandNumber, 0x01); 1.978 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_PROVIDE_LOCAL_INFO); 1.979 + do_check_eq(tlv.value.commandQualifier, STK_LOCAL_INFO_IMEI); 1.980 + 1.981 + // Verify Date and Time Zone 1.982 + let local_info_2 = [ 1.983 + 0xD0, 1.984 + 0x09, 1.985 + 0x81, 0x03, 0x01, 0x26, 0x03, 1.986 + 0x82, 0x02, 0x81, 0x82]; 1.987 + 1.988 + for (let i = 0; i < local_info_2.length; i++) { 1.989 + pduHelper.writeHexOctet(local_info_2[i]); 1.990 + } 1.991 + 1.992 + berTlv = berHelper.decode(local_info_2.length); 1.993 + ctlvs = berTlv.value; 1.994 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.995 + do_check_eq(tlv.value.commandNumber, 0x01); 1.996 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_PROVIDE_LOCAL_INFO); 1.997 + do_check_eq(tlv.value.commandQualifier, STK_LOCAL_INFO_DATE_TIME_ZONE); 1.998 + 1.999 + run_next_test(); 1.1000 +}); 1.1001 + 1.1002 +/** 1.1003 + * Verify Proactive command : BIP Messages 1.1004 + */ 1.1005 +add_test(function test_stk_proactive_command_open_channel() { 1.1006 + let worker = newUint8Worker(); 1.1007 + let context = worker.ContextPool._contexts[0]; 1.1008 + let pduHelper = context.GsmPDUHelper; 1.1009 + let berHelper = context.BerTlvHelper; 1.1010 + let stkHelper = context.StkProactiveCmdHelper; 1.1011 + 1.1012 + // Open Channel 1.1013 + let open_channel = [ 1.1014 + 0xD0, 1.1015 + 0x0F, 1.1016 + 0x81, 0x03, 0x01, 0x40, 0x00, 1.1017 + 0x82, 0x02, 0x81, 0x82, 1.1018 + 0x85, 0x04, 0x4F, 0x70, 0x65, 0x6E //alpha id: "Open" 1.1019 + ]; 1.1020 + 1.1021 + for (let i = 0; i < open_channel.length; i++) { 1.1022 + pduHelper.writeHexOctet(open_channel[i]); 1.1023 + } 1.1024 + 1.1025 + let berTlv = berHelper.decode(open_channel.length); 1.1026 + let ctlvs = berTlv.value; 1.1027 + let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.1028 + do_check_eq(tlv.value.commandNumber, 0x01); 1.1029 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_OPEN_CHANNEL); 1.1030 + do_check_eq(tlv.value.commandQualifier, 0x00); 1.1031 + 1.1032 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_ALPHA_ID, ctlvs); 1.1033 + do_check_eq(tlv.value.identifier, "Open"); 1.1034 + 1.1035 + // Close Channel 1.1036 + let close_channel = [ 1.1037 + 0xD0, 1.1038 + 0x10, 1.1039 + 0x81, 0x03, 0x01, 0x41, 0x00, 1.1040 + 0x82, 0x02, 0x81, 0x82, 1.1041 + 0x85, 0x05, 0x43, 0x6C, 0x6F, 0x73, 0x65 //alpha id: "Close" 1.1042 + ]; 1.1043 + 1.1044 + for (let i = 0; i < close_channel.length; i++) { 1.1045 + pduHelper.writeHexOctet(close_channel[i]); 1.1046 + } 1.1047 + 1.1048 + berTlv = berHelper.decode(close_channel.length); 1.1049 + ctlvs = berTlv.value; 1.1050 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.1051 + do_check_eq(tlv.value.commandNumber, 0x01); 1.1052 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_CLOSE_CHANNEL); 1.1053 + do_check_eq(tlv.value.commandQualifier, 0x00); 1.1054 + 1.1055 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_ALPHA_ID, ctlvs); 1.1056 + do_check_eq(tlv.value.identifier, "Close"); 1.1057 + 1.1058 + // Receive Data 1.1059 + let receive_data = [ 1.1060 + 0XD0, 1.1061 + 0X12, 1.1062 + 0x81, 0x03, 0x01, 0x42, 0x00, 1.1063 + 0x82, 0x02, 0x81, 0x82, 1.1064 + 0x85, 0x07, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65 //alpha id: "Receive" 1.1065 + ]; 1.1066 + 1.1067 + for (let i = 0; i < receive_data.length; i++) { 1.1068 + pduHelper.writeHexOctet(receive_data[i]); 1.1069 + } 1.1070 + 1.1071 + berTlv = berHelper.decode(receive_data.length); 1.1072 + ctlvs = berTlv.value; 1.1073 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.1074 + do_check_eq(tlv.value.commandNumber, 0x01); 1.1075 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_RECEIVE_DATA); 1.1076 + do_check_eq(tlv.value.commandQualifier, 0x00); 1.1077 + 1.1078 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_ALPHA_ID, ctlvs); 1.1079 + do_check_eq(tlv.value.identifier, "Receive"); 1.1080 + 1.1081 + // Send Data 1.1082 + let send_data = [ 1.1083 + 0xD0, 1.1084 + 0x0F, 1.1085 + 0x81, 0x03, 0x01, 0x43, 0x00, 1.1086 + 0x82, 0x02, 0x81, 0x82, 1.1087 + 0x85, 0x04, 0x53, 0x65, 0x6E, 0x64 //alpha id: "Send" 1.1088 + ]; 1.1089 + 1.1090 + for (let i = 0; i < send_data.length; i++) { 1.1091 + pduHelper.writeHexOctet(send_data[i]); 1.1092 + } 1.1093 + 1.1094 + berTlv = berHelper.decode(send_data.length); 1.1095 + ctlvs = berTlv.value; 1.1096 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs); 1.1097 + do_check_eq(tlv.value.commandNumber, 0x01); 1.1098 + do_check_eq(tlv.value.typeOfCommand, STK_CMD_SEND_DATA); 1.1099 + do_check_eq(tlv.value.commandQualifier, 0x00); 1.1100 + 1.1101 + tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_ALPHA_ID, ctlvs); 1.1102 + do_check_eq(tlv.value.identifier, "Send"); 1.1103 + 1.1104 + run_next_test(); 1.1105 +}); 1.1106 + 1.1107 +/** 1.1108 + * Verify Event Download Command : Location Status 1.1109 + */ 1.1110 +add_test(function test_stk_event_download_location_status() { 1.1111 + let worker = newUint8SupportOutgoingIndexWorker(); 1.1112 + let context = worker.ContextPool._contexts[0]; 1.1113 + let buf = context.Buf; 1.1114 + let pduHelper = context.GsmPDUHelper; 1.1115 + 1.1116 + buf.sendParcel = function() { 1.1117 + // Type 1.1118 + do_check_eq(this.readInt32(), REQUEST_STK_SEND_ENVELOPE_COMMAND); 1.1119 + 1.1120 + // Token : we don't care 1.1121 + this.readInt32(); 1.1122 + 1.1123 + // Data Size, 42 = 2 * (2 + TLV_DEVICE_ID_SIZE(4) + 1.1124 + // TLV_EVENT_LIST_SIZE(3) + 1.1125 + // TLV_LOCATION_STATUS_SIZE(3) + 1.1126 + // TLV_LOCATION_INFO_GSM_SIZE(9)) 1.1127 + do_check_eq(this.readInt32(), 42); 1.1128 + 1.1129 + // BER tag 1.1130 + do_check_eq(pduHelper.readHexOctet(), BER_EVENT_DOWNLOAD_TAG); 1.1131 + 1.1132 + // BER length, 19 = TLV_DEVICE_ID_SIZE(4) + 1.1133 + // TLV_EVENT_LIST_SIZE(3) + 1.1134 + // TLV_LOCATION_STATUS_SIZE(3) + 1.1135 + // TLV_LOCATION_INFO_GSM_SIZE(9) 1.1136 + do_check_eq(pduHelper.readHexOctet(), 19); 1.1137 + 1.1138 + // Device Identifies, Type-Length-Value(Source ID-Destination ID) 1.1139 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_DEVICE_ID | 1.1140 + COMPREHENSIONTLV_FLAG_CR); 1.1141 + do_check_eq(pduHelper.readHexOctet(), 2); 1.1142 + do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_ME); 1.1143 + do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_SIM); 1.1144 + 1.1145 + // Event List, Type-Length-Value 1.1146 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_EVENT_LIST | 1.1147 + COMPREHENSIONTLV_FLAG_CR); 1.1148 + do_check_eq(pduHelper.readHexOctet(), 1); 1.1149 + do_check_eq(pduHelper.readHexOctet(), STK_EVENT_TYPE_LOCATION_STATUS); 1.1150 + 1.1151 + // Location Status, Type-Length-Value 1.1152 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_LOCATION_STATUS | 1.1153 + COMPREHENSIONTLV_FLAG_CR); 1.1154 + do_check_eq(pduHelper.readHexOctet(), 1); 1.1155 + do_check_eq(pduHelper.readHexOctet(), STK_SERVICE_STATE_NORMAL); 1.1156 + 1.1157 + // Location Info, Type-Length-Value 1.1158 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_LOCATION_INFO | 1.1159 + COMPREHENSIONTLV_FLAG_CR); 1.1160 + do_check_eq(pduHelper.readHexOctet(), 7); 1.1161 + 1.1162 + do_check_eq(pduHelper.readHexOctet(), 0x21); // MCC + MNC 1.1163 + do_check_eq(pduHelper.readHexOctet(), 0x63); 1.1164 + do_check_eq(pduHelper.readHexOctet(), 0x54); 1.1165 + do_check_eq(pduHelper.readHexOctet(), 0); // LAC 1.1166 + do_check_eq(pduHelper.readHexOctet(), 0); 1.1167 + do_check_eq(pduHelper.readHexOctet(), 0); // Cell ID 1.1168 + do_check_eq(pduHelper.readHexOctet(), 0); 1.1169 + 1.1170 + run_next_test(); 1.1171 + }; 1.1172 + 1.1173 + let event = { 1.1174 + eventType: STK_EVENT_TYPE_LOCATION_STATUS, 1.1175 + locationStatus: STK_SERVICE_STATE_NORMAL, 1.1176 + locationInfo: { 1.1177 + mcc: "123", 1.1178 + mnc: "456", 1.1179 + gsmLocationAreaCode: 0, 1.1180 + gsmCellId: 0 1.1181 + } 1.1182 + }; 1.1183 + context.RIL.sendStkEventDownload({ 1.1184 + event: event 1.1185 + }); 1.1186 +}); 1.1187 + 1.1188 +// Test Event Download commands. 1.1189 + 1.1190 +/** 1.1191 + * Verify Event Download Command : Language Selection 1.1192 + */ 1.1193 +add_test(function test_stk_event_download_language_selection() { 1.1194 + let worker = newUint8SupportOutgoingIndexWorker(); 1.1195 + let context = worker.ContextPool._contexts[0]; 1.1196 + let buf = context.Buf; 1.1197 + let pduHelper = context.GsmPDUHelper; 1.1198 + let iccHelper = context.ICCPDUHelper; 1.1199 + 1.1200 + buf.sendParcel = function() { 1.1201 + // Type 1.1202 + do_check_eq(this.readInt32(), REQUEST_STK_SEND_ENVELOPE_COMMAND); 1.1203 + 1.1204 + // Token : we don't care 1.1205 + this.readInt32(); 1.1206 + 1.1207 + // Data Size, 26 = 2 * (2 + TLV_DEVICE_ID_SIZE(4) + 1.1208 + // TLV_EVENT_LIST_SIZE(3) + 1.1209 + // TLV_LANGUAGE(4)) 1.1210 + do_check_eq(this.readInt32(), 26); 1.1211 + 1.1212 + // BER tag 1.1213 + do_check_eq(pduHelper.readHexOctet(), BER_EVENT_DOWNLOAD_TAG); 1.1214 + 1.1215 + // BER length, 19 = TLV_DEVICE_ID_SIZE(4) + 1.1216 + // TLV_EVENT_LIST_SIZE(3) + 1.1217 + // TLV_LANGUAGE(4) 1.1218 + do_check_eq(pduHelper.readHexOctet(), 11); 1.1219 + 1.1220 + // Device Identifies, Type-Length-Value(Source ID-Destination ID) 1.1221 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_DEVICE_ID | 1.1222 + COMPREHENSIONTLV_FLAG_CR); 1.1223 + do_check_eq(pduHelper.readHexOctet(), 2); 1.1224 + do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_ME); 1.1225 + do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_SIM); 1.1226 + 1.1227 + // Event List, Type-Length-Value 1.1228 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_EVENT_LIST | 1.1229 + COMPREHENSIONTLV_FLAG_CR); 1.1230 + do_check_eq(pduHelper.readHexOctet(), 1); 1.1231 + do_check_eq(pduHelper.readHexOctet(), STK_EVENT_TYPE_LANGUAGE_SELECTION); 1.1232 + 1.1233 + // Language, Type-Length-Value 1.1234 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_LANGUAGE); 1.1235 + do_check_eq(pduHelper.readHexOctet(), 2); 1.1236 + do_check_eq(iccHelper.read8BitUnpackedToString(2), "zh"); 1.1237 + 1.1238 + run_next_test(); 1.1239 + }; 1.1240 + 1.1241 + let event = { 1.1242 + eventType: STK_EVENT_TYPE_LANGUAGE_SELECTION, 1.1243 + language: "zh" 1.1244 + }; 1.1245 + context.RIL.sendStkEventDownload({ 1.1246 + event: event 1.1247 + }); 1.1248 +}); 1.1249 + 1.1250 +/** 1.1251 + * Verify Event Download Command : User Activity 1.1252 + */ 1.1253 +add_test(function test_stk_event_download_user_activity() { 1.1254 + let worker = newUint8SupportOutgoingIndexWorker(); 1.1255 + let context = worker.ContextPool._contexts[0]; 1.1256 + let buf = context.Buf; 1.1257 + let pduHelper = context.GsmPDUHelper; 1.1258 + 1.1259 + buf.sendParcel = function() { 1.1260 + // Type 1.1261 + do_check_eq(this.readInt32(), REQUEST_STK_SEND_ENVELOPE_COMMAND); 1.1262 + 1.1263 + // Token : we don't care 1.1264 + this.readInt32(); 1.1265 + 1.1266 + // Data Size, 18 = 2 * (2 + TLV_DEVICE_ID_SIZE(4) + TLV_EVENT_LIST_SIZE(3)) 1.1267 + do_check_eq(this.readInt32(), 18); 1.1268 + 1.1269 + // BER tag 1.1270 + do_check_eq(pduHelper.readHexOctet(), BER_EVENT_DOWNLOAD_TAG); 1.1271 + 1.1272 + // BER length, 7 = TLV_DEVICE_ID_SIZE(4) + TLV_EVENT_LIST_SIZE(3) 1.1273 + do_check_eq(pduHelper.readHexOctet(), 7); 1.1274 + 1.1275 + // Device Identities, Type-Length-Value(Source ID-Destination ID) 1.1276 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_DEVICE_ID | 1.1277 + COMPREHENSIONTLV_FLAG_CR); 1.1278 + do_check_eq(pduHelper.readHexOctet(), 2); 1.1279 + do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_ME); 1.1280 + do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_SIM); 1.1281 + 1.1282 + // Event List, Type-Length-Value 1.1283 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_EVENT_LIST | 1.1284 + COMPREHENSIONTLV_FLAG_CR); 1.1285 + do_check_eq(pduHelper.readHexOctet(), 1); 1.1286 + do_check_eq(pduHelper.readHexOctet(), STK_EVENT_TYPE_USER_ACTIVITY); 1.1287 + 1.1288 + run_next_test(); 1.1289 + }; 1.1290 + 1.1291 + let event = { 1.1292 + eventType: STK_EVENT_TYPE_USER_ACTIVITY 1.1293 + }; 1.1294 + context.RIL.sendStkEventDownload({ 1.1295 + event: event 1.1296 + }); 1.1297 +}); 1.1298 + 1.1299 +/** 1.1300 + * Verify Event Download Command : Idle Screen Available 1.1301 + */ 1.1302 +add_test(function test_stk_event_download_idle_screen_available() { 1.1303 + let worker = newUint8SupportOutgoingIndexWorker(); 1.1304 + let context = worker.ContextPool._contexts[0]; 1.1305 + let buf = context.Buf; 1.1306 + let pduHelper = context.GsmPDUHelper; 1.1307 + 1.1308 + buf.sendParcel = function() { 1.1309 + // Type 1.1310 + do_check_eq(this.readInt32(), REQUEST_STK_SEND_ENVELOPE_COMMAND); 1.1311 + 1.1312 + // Token : we don't care 1.1313 + this.readInt32(); 1.1314 + 1.1315 + // Data Size, 18 = 2 * (2 + TLV_DEVICE_ID_SIZE(4) + TLV_EVENT_LIST_SIZE(3)) 1.1316 + do_check_eq(this.readInt32(), 18); 1.1317 + 1.1318 + // BER tag 1.1319 + do_check_eq(pduHelper.readHexOctet(), BER_EVENT_DOWNLOAD_TAG); 1.1320 + 1.1321 + // BER length, 7 = TLV_DEVICE_ID_SIZE(4) + TLV_EVENT_LIST_SIZE(3) 1.1322 + do_check_eq(pduHelper.readHexOctet(), 7); 1.1323 + 1.1324 + // Device Identities, Type-Length-Value(Source ID-Destination ID) 1.1325 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_DEVICE_ID | 1.1326 + COMPREHENSIONTLV_FLAG_CR); 1.1327 + do_check_eq(pduHelper.readHexOctet(), 2); 1.1328 + do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_DISPLAY); 1.1329 + do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_SIM); 1.1330 + 1.1331 + // Event List, Type-Length-Value 1.1332 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_EVENT_LIST | 1.1333 + COMPREHENSIONTLV_FLAG_CR); 1.1334 + do_check_eq(pduHelper.readHexOctet(), 1); 1.1335 + do_check_eq(pduHelper.readHexOctet(), STK_EVENT_TYPE_IDLE_SCREEN_AVAILABLE); 1.1336 + 1.1337 + run_next_test(); 1.1338 + }; 1.1339 + 1.1340 + let event = { 1.1341 + eventType: STK_EVENT_TYPE_IDLE_SCREEN_AVAILABLE 1.1342 + }; 1.1343 + context.RIL.sendStkEventDownload({ 1.1344 + event: event 1.1345 + }); 1.1346 +}); 1.1347 + 1.1348 +/** 1.1349 + * Verify Event Downloaded Command :Browser Termination 1.1350 + */ 1.1351 +add_test(function test_stk_event_download_browser_termination() { 1.1352 + let worker = newUint8SupportOutgoingIndexWorker(); 1.1353 + let context = worker.ContextPool._contexts[0]; 1.1354 + let buf = context.Buf; 1.1355 + let pduHelper = context.GsmPDUHelper; 1.1356 + 1.1357 + buf.sendParcel = function() { 1.1358 + // Type 1.1359 + do_check_eq(this.readInt32(), REQUEST_STK_SEND_ENVELOPE_COMMAND); 1.1360 + 1.1361 + // Token : we don't care 1.1362 + this.readInt32(); 1.1363 + 1.1364 + // Data Size, 24 = 2 * ( 2+TLV_DEVICE_ID(4)+TLV_EVENT_LIST_SIZE(3) 1.1365 + // +TLV_BROWSER_TERMINATION_CAUSE(3) ) 1.1366 + do_check_eq(this.readInt32(), 24); 1.1367 + 1.1368 + // BER tag 1.1369 + do_check_eq(pduHelper.readHexOctet(), BER_EVENT_DOWNLOAD_TAG); 1.1370 + 1.1371 + // BER length, 10 = TLV_DEVICE_ID(4)+TLV_EVENT_LIST_SIZE(3) 1.1372 + // ++TLV_BROWSER_TERMINATION_CAUSE(3) 1.1373 + do_check_eq(pduHelper.readHexOctet(), 10); 1.1374 + 1.1375 + // Device Identities, Type-Length-Value(Source ID-Destination ID) 1.1376 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_DEVICE_ID | 1.1377 + COMPREHENSIONTLV_FLAG_CR); 1.1378 + do_check_eq(pduHelper.readHexOctet(), 2); 1.1379 + do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_ME); 1.1380 + do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_SIM); 1.1381 + 1.1382 + // Event List, Type-Length-Value 1.1383 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_EVENT_LIST | 1.1384 + COMPREHENSIONTLV_FLAG_CR); 1.1385 + do_check_eq(pduHelper.readHexOctet(), 1); 1.1386 + do_check_eq(pduHelper.readHexOctet(), STK_EVENT_TYPE_BROWSER_TERMINATION); 1.1387 + 1.1388 + // Browser Termination Case, Type-Length-Value 1.1389 + do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_BROWSER_TERMINATION_CAUSE | 1.1390 + COMPREHENSIONTLV_FLAG_CR); 1.1391 + do_check_eq(pduHelper.readHexOctet(), 1); 1.1392 + do_check_eq(pduHelper.readHexOctet(), STK_BROWSER_TERMINATION_CAUSE_USER); 1.1393 + 1.1394 + run_next_test(); 1.1395 + }; 1.1396 + 1.1397 + let event = { 1.1398 + eventType: STK_EVENT_TYPE_BROWSER_TERMINATION, 1.1399 + terminationCause: STK_BROWSER_TERMINATION_CAUSE_USER 1.1400 + }; 1.1401 + context.RIL.sendStkEventDownload({ 1.1402 + event: event 1.1403 + }); 1.1404 +});