Bug 795252 - Part 4: Modify xpcshell STK tests. r=yoshi
authorGeorgia Wang <gwang@mozilla.com>
Fri, 16 Aug 2013 10:23:12 +0800
changeset 143080 c17afbd7deb78860d01c0a47b7056136c5497055
parent 143079 aa56304dbe90a6f29eb094d562f2d92e00781bda
child 143081 97454fad33fbce4300e8a115ceca7752c88ad34e
push id1
push userroot
push dateMon, 20 Oct 2014 17:29:22 +0000
reviewersyoshi
bugs795252
milestone26.0a1
Bug 795252 - Part 4: Modify xpcshell STK tests. r=yoshi
dom/system/gonk/tests/test_ril_worker_icc.js
dom/system/gonk/tests/test_ril_worker_stk.js
dom/system/gonk/tests/xpcshell.ini
--- a/dom/system/gonk/tests/test_ril_worker_icc.js
+++ b/dom/system/gonk/tests/test_ril_worker_icc.js
@@ -27,44 +27,16 @@ function newUint8Worker() {
     index += offset;
   };
 
   worker.debug = do_print;
 
   return worker;
 }
 
-function newUint8SupportOutgoingIndexWorker() {
-  let worker = newWorker();
-  let index = 4;          // index for read
-  let buf = [0, 0, 0, 0]; // Preserved parcel size
-
-  worker.Buf.writeUint8 = function (value) {
-    if (worker.Buf.outgoingIndex >= buf.length) {
-      buf.push(value);
-    } else {
-      buf[worker.Buf.outgoingIndex] = value;
-    }
-
-    worker.Buf.outgoingIndex++;
-  };
-
-  worker.Buf.readUint8 = function () {
-    return buf[index++];
-  };
-
-  worker.Buf.seekIncoming = function (offset) {
-    index += offset;
-  };
-
-  worker.debug = do_print;
-
-  return worker;
-}
-
 /**
  * Verify GsmPDUHelper#readICCUCS2String()
  */
 add_test(function test_read_icc_ucs2_string() {
   let worker = newUint8Worker();
   let helper = worker.GsmPDUHelper;
 
   // 0x80
@@ -506,36 +478,16 @@ add_test(function test_is_gsm_8bit_alpha
   do_check_eq(ICCUtilsHelper.isGsm8BitAlphabet(langTable), true);
   do_check_eq(ICCUtilsHelper.isGsm8BitAlphabet(langShiftTable), true);
   do_check_eq(ICCUtilsHelper.isGsm8BitAlphabet("\uaaaa"), false);
 
   run_next_test();
 });
 
 /**
- * Verify RIL.sendStkTerminalProfile
- */
-add_test(function test_send_stk_terminal_profile() {
-  let worker = newUint8Worker();
-  let ril = worker.RIL;
-  let buf = worker.Buf;
-
-  ril.sendStkTerminalProfile(STK_SUPPORTED_TERMINAL_PROFILE);
-
-  buf.seekIncoming(8);
-  let profile = buf.readString();
-  for (let i = 0; i < STK_SUPPORTED_TERMINAL_PROFILE.length; i++) {
-    do_check_eq(parseInt(profile.substring(2 * i, 2 * i + 2), 16),
-                STK_SUPPORTED_TERMINAL_PROFILE[i]);
-  }
-
-  run_next_test();
-});
-
-/**
  * Verify RIL.iccGetCardLockState("fdn")
  */
 add_test(function test_icc_get_card_lock_state_fdn() {
   let worker = newUint8Worker();
   let ril = worker.RIL;
   let buf = worker.Buf;
 
   buf.sendParcel = function () {
@@ -565,652 +517,16 @@ add_test(function test_icc_get_card_lock
     }
 
     run_next_test();
   };
 
   ril.iccGetCardLockState({lockType: "fdn"});
 });
 
-/**
- * Verify ComprehensionTlvHelper.writeLocationInfoTlv
- */
-add_test(function test_write_location_info_tlv() {
-  let worker = newUint8Worker();
-  let pduHelper = worker.GsmPDUHelper;
-  let tlvHelper = worker.ComprehensionTlvHelper;
-
-  // Test with 2-digit mnc, and gsmCellId obtained from UMTS network.
-  let loc = {
-    mcc: "466",
-    mnc: "92",
-    gsmLocationAreaCode : 10291,
-    gsmCellId: 19072823
-  };
-  tlvHelper.writeLocationInfoTlv(loc);
-
-  let tag = pduHelper.readHexOctet();
-  do_check_eq(tag, COMPREHENSIONTLV_TAG_LOCATION_INFO |
-                   COMPREHENSIONTLV_FLAG_CR);
-
-  let length = pduHelper.readHexOctet();
-  do_check_eq(length, 9);
-
-  let mcc_mnc = pduHelper.readSwappedNibbleBcdString(3);
-  do_check_eq(mcc_mnc, "46692");
-
-  let lac = (pduHelper.readHexOctet() << 8) | pduHelper.readHexOctet();
-  do_check_eq(lac, 10291);
-
-  let cellId = (pduHelper.readHexOctet() << 24) |
-               (pduHelper.readHexOctet() << 16) |
-               (pduHelper.readHexOctet() << 8)  |
-               (pduHelper.readHexOctet());
-  do_check_eq(cellId, 19072823);
-
-  // Test with 1-digit mnc, and gsmCellId obtained from GSM network.
-  loc = {
-    mcc: "466",
-    mnc: "02",
-    gsmLocationAreaCode : 10291,
-    gsmCellId: 65534
-  };
-  tlvHelper.writeLocationInfoTlv(loc);
-
-  tag = pduHelper.readHexOctet();
-  do_check_eq(tag, COMPREHENSIONTLV_TAG_LOCATION_INFO |
-                   COMPREHENSIONTLV_FLAG_CR);
-
-  length = pduHelper.readHexOctet();
-  do_check_eq(length, 7);
-
-  mcc_mnc = pduHelper.readSwappedNibbleBcdString(3);
-  do_check_eq(mcc_mnc, "46602");
-
-  lac = (pduHelper.readHexOctet() << 8) | pduHelper.readHexOctet();
-  do_check_eq(lac, 10291);
-
-  cellId = (pduHelper.readHexOctet() << 8) | (pduHelper.readHexOctet());
-  do_check_eq(cellId, 65534);
-
-  // Test with 3-digit mnc, and gsmCellId obtained from GSM network.
-  loc = {
-    mcc: "466",
-    mnc: "222",
-    gsmLocationAreaCode : 10291,
-    gsmCellId: 65534
-  };
-  tlvHelper.writeLocationInfoTlv(loc);
-
-  tag = pduHelper.readHexOctet();
-  do_check_eq(tag, COMPREHENSIONTLV_TAG_LOCATION_INFO |
-                   COMPREHENSIONTLV_FLAG_CR);
-
-  length = pduHelper.readHexOctet();
-  do_check_eq(length, 7);
-
-  mcc_mnc = pduHelper.readSwappedNibbleBcdString(3);
-  do_check_eq(mcc_mnc, "466222");
-
-  lac = (pduHelper.readHexOctet() << 8) | pduHelper.readHexOctet();
-  do_check_eq(lac, 10291);
-
-  cellId = (pduHelper.readHexOctet() << 8) | (pduHelper.readHexOctet());
-  do_check_eq(cellId, 65534);
-
-  run_next_test();
-});
-
-/**
- * Verify ComprehensionTlvHelper.writeErrorNumber
- */
-add_test(function test_write_disconnecting_cause() {
-  let worker = newUint8Worker();
-  let pduHelper = worker.GsmPDUHelper;
-  let tlvHelper = worker.ComprehensionTlvHelper;
-
-  tlvHelper.writeCauseTlv(RIL_ERROR_TO_GECKO_ERROR[ERROR_GENERIC_FAILURE]);
-  let tag = pduHelper.readHexOctet();
-  do_check_eq(tag, COMPREHENSIONTLV_TAG_CAUSE | COMPREHENSIONTLV_FLAG_CR);
-  let len = pduHelper.readHexOctet();
-  do_check_eq(len, 2);  // We have one cause.
-  let standard = pduHelper.readHexOctet();
-  do_check_eq(standard, 0x60);
-  let cause = pduHelper.readHexOctet();
-  do_check_eq(cause, 0x80 | ERROR_GENERIC_FAILURE);
-
-  run_next_test();
-});
-
-/**
- * Verify ComprehensionTlvHelper.getSizeOfLengthOctets
- */
-add_test(function test_get_size_of_length_octets() {
-  let worker = newUint8Worker();
-  let tlvHelper = worker.ComprehensionTlvHelper;
-
-  let length = 0x70;
-  do_check_eq(tlvHelper.getSizeOfLengthOctets(length), 1);
-
-  length = 0x80;
-  do_check_eq(tlvHelper.getSizeOfLengthOctets(length), 2);
-
-  length = 0x180;
-  do_check_eq(tlvHelper.getSizeOfLengthOctets(length), 3);
-
-  length = 0x18000;
-  do_check_eq(tlvHelper.getSizeOfLengthOctets(length), 4);
-
-  run_next_test();
-});
-
-/**
- * Verify ComprehensionTlvHelper.writeLength
- */
-add_test(function test_write_length() {
-  let worker = newUint8Worker();
-  let pduHelper = worker.GsmPDUHelper;
-  let tlvHelper = worker.ComprehensionTlvHelper;
-
-  let length = 0x70;
-  tlvHelper.writeLength(length);
-  do_check_eq(pduHelper.readHexOctet(), length);
-
-  length = 0x80;
-  tlvHelper.writeLength(length);
-  do_check_eq(pduHelper.readHexOctet(), 0x81);
-  do_check_eq(pduHelper.readHexOctet(), length);
-
-  length = 0x180;
-  tlvHelper.writeLength(length);
-  do_check_eq(pduHelper.readHexOctet(), 0x82);
-  do_check_eq(pduHelper.readHexOctet(), (length >> 8) & 0xff);
-  do_check_eq(pduHelper.readHexOctet(), length & 0xff);
-
-  length = 0x18000;
-  tlvHelper.writeLength(length);
-  do_check_eq(pduHelper.readHexOctet(), 0x83);
-  do_check_eq(pduHelper.readHexOctet(), (length >> 16) & 0xff);
-  do_check_eq(pduHelper.readHexOctet(), (length >> 8) & 0xff);
-  do_check_eq(pduHelper.readHexOctet(), length & 0xff);
-
-  run_next_test();
-});
-
-/**
- * Verify Proactive Command : Refresh
- */
-add_test(function test_stk_proactive_command_refresh() {
-  let worker = newUint8Worker();
-  let pduHelper = worker.GsmPDUHelper;
-  let berHelper = worker.BerTlvHelper;
-  let stkHelper = worker.StkProactiveCmdHelper;
-
-  let refresh_1 = [
-    0xD0,
-    0x10,
-    0x81, 0x03, 0x01, 0x01, 0x01,
-    0x82, 0x02, 0x81, 0x82,
-    0x92, 0x05, 0x01, 0x3F, 0x00, 0x2F, 0xE2];
-
-  for (let i = 0; i < refresh_1.length; i++) {
-    pduHelper.writeHexOctet(refresh_1[i]);
-  }
-
-  let berTlv = berHelper.decode(refresh_1.length);
-  let ctlvs = berTlv.value;
-  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
-  do_check_eq(tlv.value.commandNumber, 0x01);
-  do_check_eq(tlv.value.typeOfCommand, 0x01);
-  do_check_eq(tlv.value.commandQualifier, 0x01);
-
-  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_FILE_LIST, ctlvs);
-  do_check_eq(tlv.value.fileList, "3F002FE2");
-
-  run_next_test();
-});
-
-/**
- * Verify Proactive Command : Play Tone
- */
-add_test(function test_stk_proactive_command_play_tone() {
-  let worker = newUint8Worker();
-  let pduHelper = worker.GsmPDUHelper;
-  let berHelper = worker.BerTlvHelper;
-  let stkHelper = worker.StkProactiveCmdHelper;
-
-  let tone_1 = [
-    0xD0,
-    0x1B,
-    0x81, 0x03, 0x01, 0x20, 0x00,
-    0x82, 0x02, 0x81, 0x03,
-    0x85, 0x09, 0x44, 0x69, 0x61, 0x6C, 0x20, 0x54, 0x6F, 0x6E, 0x65,
-    0x8E, 0x01, 0x01,
-    0x84, 0x02, 0x01, 0x05];
-
-  for (let i = 0; i < tone_1.length; i++) {
-    pduHelper.writeHexOctet(tone_1[i]);
-  }
-
-  let berTlv = berHelper.decode(tone_1.length);
-  let ctlvs = berTlv.value;
-  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
-  do_check_eq(tlv.value.commandNumber, 0x01);
-  do_check_eq(tlv.value.typeOfCommand, 0x20);
-  do_check_eq(tlv.value.commandQualifier, 0x00);
-
-  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_ALPHA_ID, ctlvs);
-  do_check_eq(tlv.value.identifier, "Dial Tone");
-
-  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TONE, ctlvs);
-  do_check_eq(tlv.value.tone, STK_TONE_TYPE_DIAL_TONE);
-
-  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_DURATION, ctlvs);
-  do_check_eq(tlv.value.timeUnit, STK_TIME_UNIT_SECOND);
-  do_check_eq(tlv.value.timeInterval, 5);
-
-  run_next_test();
-});
-
-/**
- * Verify Proactive Command : Poll Interval
- */
-add_test(function test_stk_proactive_command_poll_interval() {
-  let worker = newUint8Worker();
-  let pduHelper = worker.GsmPDUHelper;
-  let berHelper = worker.BerTlvHelper;
-  let stkHelper = worker.StkProactiveCmdHelper;
-
-  let poll_1 = [
-    0xD0,
-    0x0D,
-    0x81, 0x03, 0x01, 0x03, 0x00,
-    0x82, 0x02, 0x81, 0x82,
-    0x84, 0x02, 0x01, 0x14];
-
-  for (let i = 0; i < poll_1.length; i++) {
-    pduHelper.writeHexOctet(poll_1[i]);
-  }
-
-  let berTlv = berHelper.decode(poll_1.length);
-  let ctlvs = berTlv.value;
-  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
-  do_check_eq(tlv.value.commandNumber, 0x01);
-  do_check_eq(tlv.value.typeOfCommand, 0x03);
-  do_check_eq(tlv.value.commandQualifier, 0x00);
-
-  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_DURATION, ctlvs);
-  do_check_eq(tlv.value.timeUnit, STK_TIME_UNIT_SECOND);
-  do_check_eq(tlv.value.timeInterval, 0x14);
-
-  run_next_test();
-});
-
-/**
- * Verify Proactive Command: Display Text
- */
-add_test(function test_read_septets_to_string() {
-  let worker = newUint8Worker();
-  let pduHelper = worker.GsmPDUHelper;
-  let berHelper = worker.BerTlvHelper;
-  let stkHelper = worker.StkProactiveCmdHelper;
-
-  let display_text_1 = [
-    0xd0,
-    0x28,
-    0x81, 0x03, 0x01, 0x21, 0x80,
-    0x82, 0x02, 0x81, 0x02,
-    0x0d, 0x1d, 0x00, 0xd3, 0x30, 0x9b, 0xfc, 0x06, 0xc9, 0x5c, 0x30, 0x1a,
-    0xa8, 0xe8, 0x02, 0x59, 0xc3, 0xec, 0x34, 0xb9, 0xac, 0x07, 0xc9, 0x60,
-    0x2f, 0x58, 0xed, 0x15, 0x9b, 0xb9, 0x40,
-  ];
-
-  for (let i = 0; i < display_text_1.length; i++) {
-    pduHelper.writeHexOctet(display_text_1[i]);
-  }
-
-  let berTlv = berHelper.decode(display_text_1.length);
-  let ctlvs = berTlv.value;
-  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TEXT_STRING, ctlvs);
-  do_check_eq(tlv.value.textString, "Saldo 2.04 E. Validez 20/05/13. ");
-
-  run_next_test();
-});
-
-add_test(function test_stk_proactive_command_event_list() {
-  let worker = newUint8Worker();
-  let pduHelper = worker.GsmPDUHelper;
-  let berHelper = worker.BerTlvHelper;
-  let stkHelper = worker.StkProactiveCmdHelper;
-
-  let event_1 = [
-    0xD0,
-    0x0F,
-    0x81, 0x03, 0x01, 0x05, 0x00,
-    0x82, 0x02, 0x81, 0x82,
-    0x99, 0x04, 0x00, 0x01, 0x02, 0x03];
-
-  for (let i = 0; i < event_1.length; i++) {
-    pduHelper.writeHexOctet(event_1[i]);
-  }
-
-  let berTlv = berHelper.decode(event_1.length);
-  let ctlvs = berTlv.value;
-  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
-  do_check_eq(tlv.value.commandNumber, 0x01);
-  do_check_eq(tlv.value.typeOfCommand, 0x05);
-  do_check_eq(tlv.value.commandQualifier, 0x00);
-
-  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_EVENT_LIST, ctlvs);
-  do_check_eq(Array.isArray(tlv.value.eventList), true);
-  for (let i = 0; i < tlv.value.eventList.length; i++) {
-    do_check_eq(tlv.value.eventList[i], i);
-  }
-
-  run_next_test();
-});
-
-/**
- * Verify Proactive Command : Get Input
- */
-add_test(function test_stk_proactive_command_get_input() {
-  let worker = newUint8Worker();
-  let pduHelper = worker.GsmPDUHelper;
-  let berHelper = worker.BerTlvHelper;
-  let stkHelper = worker.StkProactiveCmdHelper;
-  let stkCmdHelper = worker.StkCommandParamsFactory;
-
-  let get_input_1 = [
-    0xD0,
-    0x1E,
-    0x81, 0x03, 0x01, 0x23, 0x8F,
-    0x82, 0x02, 0x81, 0x82,
-    0x8D, 0x05, 0x04, 0x54, 0x65, 0x78, 0x74,
-    0x91, 0x02, 0x01, 0x10,
-    0x17, 0x08, 0x04, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74];
-
-  for (let i = 0; i < get_input_1.length; i++) {
-    pduHelper.writeHexOctet(get_input_1[i]);
-  }
-
-  let berTlv = berHelper.decode(get_input_1.length);
-  let ctlvs = berTlv.value;
-  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
-  do_check_eq(tlv.value.commandNumber, 0x01);
-  do_check_eq(tlv.value.typeOfCommand, STK_CMD_GET_INPUT);
-
-  let input = stkCmdHelper.createParam(tlv.value, ctlvs);
-  do_check_eq(input.text, "Text");
-  do_check_eq(input.isAlphabet, true);
-  do_check_eq(input.isUCS2, true);
-  do_check_eq(input.hideInput, true);
-  do_check_eq(input.isPacked, true);
-  do_check_eq(input.isHelpAvailable, true);
-  do_check_eq(input.minLength, 0x01);
-  do_check_eq(input.maxLength, 0x10);
-  do_check_eq(input.defaultText, "Default");
-
-  let get_input_2 = [
-    0xD0,
-    0x11,
-    0x81, 0x03, 0x01, 0x23, 0x00,
-    0x82, 0x02, 0x81, 0x82,
-    0x8D, 0x00,
-    0x91, 0x02, 0x01, 0x10,
-    0x17, 0x00];
-
-  for (let i = 0; i < get_input_2.length; i++) {
-    pduHelper.writeHexOctet(get_input_2[i]);
-  }
-
-  berTlv = berHelper.decode(get_input_2.length);
-  ctlvs = berTlv.value;
-  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
-  do_check_eq(tlv.value.commandNumber, 0x01);
-  do_check_eq(tlv.value.typeOfCommand, STK_CMD_GET_INPUT);
-
-  input = stkCmdHelper.createParam(tlv.value, ctlvs);
-  do_check_eq(input.text, null);
-  do_check_eq(input.minLength, 0x01);
-  do_check_eq(input.maxLength, 0x10);
-  do_check_eq(input.defaultText, null);
-
-  run_next_test();
-});
-
-add_test(function test_spn_display_condition() {
-  let worker = newWorker({
-    postRILMessage: function fakePostRILMessage(data) {
-      // Do nothing
-    },
-    postMessage: function fakePostMessage(message) {
-      // Do nothing
-    }
-  });
-  let RIL = worker.RIL;
-  let ICCUtilsHelper = worker.ICCUtilsHelper;
-
-  // Test updateDisplayCondition runs before any of SIM file is ready.
-  do_check_eq(ICCUtilsHelper.updateDisplayCondition(), true);
-  do_check_eq(RIL.iccInfo.isDisplayNetworkNameRequired, true);
-  do_check_eq(RIL.iccInfo.isDisplaySpnRequired, false);
-
-  // Test with value.
-  function testDisplayCondition(iccDisplayCondition,
-                                iccMcc, iccMnc, plmnMcc, plmnMnc,
-                                expectedIsDisplayNetworkNameRequired,
-                                expectedIsDisplaySPNRequired,
-                                callback) {
-    RIL.iccInfoPrivate.spnDisplayCondition = iccDisplayCondition;
-    RIL.iccInfo = {
-      mcc: iccMcc,
-      mnc: iccMnc
-    };
-    RIL.operator = {
-      mcc: plmnMcc,
-      mnc: plmnMnc
-    };
-
-    do_check_eq(ICCUtilsHelper.updateDisplayCondition(), true);
-    do_check_eq(RIL.iccInfo.isDisplayNetworkNameRequired, expectedIsDisplayNetworkNameRequired);
-    do_check_eq(RIL.iccInfo.isDisplaySpnRequired, expectedIsDisplaySPNRequired);
-    do_timeout(0, callback);
-  };
-
-  function testDisplayConditions(func, caseArray, oncomplete) {
-    (function do_call(index) {
-      let next = index < (caseArray.length - 1) ? do_call.bind(null, index + 1) : oncomplete;
-      caseArray[index].push(next);
-      func.apply(null, caseArray[index]);
-    })(0);
-  }
-
-  testDisplayConditions(testDisplayCondition, [
-    [1, 123, 456, 123, 456, true, true],
-    [0, 123, 456, 123, 456, false, true],
-    [2, 123, 456, 123, 457, false, false],
-    [0, 123, 456, 123, 457, false, true],
-  ], run_next_test);
-});
-
-/**
- * Verify Proactive Command : More Time
- */
-add_test(function test_stk_proactive_command_more_time() {
-  let worker = newUint8Worker();
-  let pduHelper = worker.GsmPDUHelper;
-  let berHelper = worker.BerTlvHelper;
-  let stkHelper = worker.StkProactiveCmdHelper;
-
-  let more_time_1 = [
-    0xD0,
-    0x09,
-    0x81, 0x03, 0x01, 0x02, 0x00,
-    0x82, 0x02, 0x81, 0x82];
-
-  for(let i = 0 ; i < more_time_1.length; i++) {
-    pduHelper.writeHexOctet(more_time_1[i]);
-  }
-
-  let berTlv = berHelper.decode(more_time_1.length);
-  let ctlvs = berTlv.value;
-  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
-  do_check_eq(tlv.value.commandNumber, 0x01);
-  do_check_eq(tlv.value.typeOfCommand, STK_CMD_MORE_TIME);
-  do_check_eq(tlv.value.commandQualifier, 0x00);
-
-  run_next_test();
-});
-
-/**
- * Verify Proactive Command : Set Up Call
- */
-add_test(function test_stk_proactive_command_set_up_call() {
-  let worker = newUint8Worker();
-  let pduHelper = worker.GsmPDUHelper;
-  let berHelper = worker.BerTlvHelper;
-  let stkHelper = worker.StkProactiveCmdHelper;
-  let cmdFactory = worker.StkCommandParamsFactory;
-
-  let set_up_call_1 = [
-    0xD0,
-    0x29,
-    0x81, 0x03, 0x01, 0x10, 0x04,
-    0x82, 0x02, 0x81, 0x82,
-    0x05, 0x0A, 0x44, 0x69, 0x73, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74,
-    0x86, 0x09, 0x81, 0x10, 0x32, 0x04, 0x21, 0x43, 0x65, 0x1C, 0x2C,
-    0x05, 0x07, 0x4D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65];
-
-  for (let i = 0 ; i < set_up_call_1.length; i++) {
-    pduHelper.writeHexOctet(set_up_call_1[i]);
-  }
-
-  let berTlv = berHelper.decode(set_up_call_1.length);
-  let ctlvs = berTlv.value;
-  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
-  do_check_eq(tlv.value.commandNumber, 0x01);
-  do_check_eq(tlv.value.typeOfCommand, STK_CMD_SET_UP_CALL);
-
-  let setupCall = cmdFactory.createParam(tlv.value, ctlvs);
-  do_check_eq(setupCall.address, "012340123456,1,2");
-  do_check_eq(setupCall.confirmMessage, "Disconnect");
-  do_check_eq(setupCall.callMessage, "Message");
-
-  run_next_test();
-});
-
-add_test(function test_read_pnn() {
-  let worker = newUint8Worker();
-  let helper = worker.GsmPDUHelper;
-  let record = worker.ICCRecordHelper;
-  let buf    = worker.Buf;
-  let io     = worker.ICCIOHelper;
-  let ril    = worker.RIL;
-
-  io.loadLinearFixedEF = function fakeLoadLinearFixedEF(options) {
-    let records = [
-      // Record 1 - fullName: 'Long1', shortName: 'Short1'
-      [0x43, 0x06, 0x85, 0xCC, 0xB7, 0xFB, 0x1C, 0x03,
-       0x45, 0x07, 0x86, 0x53, 0xF4, 0x5B, 0x4E, 0x8F, 0x01,
-       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF],
-      // Record 2 - fullName: 'Long2'
-      [0x43, 0x06, 0x85, 0xCC, 0xB7, 0xFB, 0x2C, 0x03,
-       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF],
-      // Record 3 - Unused bytes
-      [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF],
-    ];
-
-    // Fake get response
-    options.totalRecords = records.length;
-    options.recordSize = records[0].length;
-
-    options.p1 = options.p1 || 1;
-
-    let record = records[options.p1 - 1];
-
-    // Write data size
-    buf.writeUint32(record.length * 2);
-
-    // Write record
-    for (let i = 0; i < record.length; i++) {
-      helper.writeHexOctet(record[i]);
-    }
-
-    // Write string delimiter
-    buf.writeStringDelimiter(record.length * 2);
-
-    if (options.callback) {
-      options.callback(options);
-    }
-  };
-
-  io.loadNextRecord = function fakeLoadNextRecord(options) {
-    options.p1++;
-    io.loadLinearFixedEF(options);
-  };
-
-  record.readPNN();
-
-  do_check_eq(ril.iccInfoPrivate.PNN.length, 2);
-  do_check_eq(ril.iccInfoPrivate.PNN[0].fullName, "Long1");
-  do_check_eq(ril.iccInfoPrivate.PNN[0].shortName, "Short1");
-  do_check_eq(ril.iccInfoPrivate.PNN[1].fullName, "Long2");
-  do_check_eq(ril.iccInfoPrivate.PNN[1].shortName, undefined);
-
-  run_next_test();
-});
-
-add_test(function read_network_name() {
-  let worker = newUint8Worker();
-  let helper = worker.GsmPDUHelper;
-  let buf = worker.Buf;
-
-  // Returning length of byte.
-  function writeNetworkName(isUCS2, requireCi, name) {
-    let codingOctet = 0x80;
-    let len;
-    if (requireCi) {
-      codingOctet |= 0x08;
-    }
-
-    if (isUCS2) {
-      codingOctet |= 0x10;
-      len = name.length * 2;
-    } else {
-      let spare = (8 - (name.length * 7) % 8) % 8;
-      codingOctet |= spare;
-      len = Math.ceil(name.length * 7 / 8);
-    }
-    helper.writeHexOctet(codingOctet);
-
-    if (isUCS2) {
-      helper.writeUCS2String(name);
-    } else {
-      helper.writeStringAsSeptets(name, 0, 0, 0);
-    }
-
-    return len + 1; // codingOctet.
-  }
-
-  function testNetworkName(isUCS2, requireCi, name) {
-    let len = writeNetworkName(isUCS2, requireCi, name);
-    do_check_eq(helper.readNetworkName(len), name);
-  }
-
-  testNetworkName( true,  true, "Test Network Name1");
-  testNetworkName( true, false, "Test Network Name2");
-  testNetworkName(false,  true, "Test Network Name3");
-  testNetworkName(false, false, "Test Network Name4");
-
-  run_next_test();
-});
-
 add_test(function test_get_network_name_from_icc() {
   let worker = newUint8Worker();
   let RIL = worker.RIL;
   let ICCUtilsHelper = worker.ICCUtilsHelper;
 
   function testGetNetworkNameFromICC(operatorData, expectedResult) {
     let result = ICCUtilsHelper.getNetworkNameFromICC(operatorData.mcc,
                                                       operatorData.mnc,
@@ -1294,126 +610,16 @@ add_test(function test_get_network_name_
   // Current PLMN is not HPLMN, and according to LAC, we should get
   // the thrid PNN record.
   testGetNetworkNameFromICC({mcc: 321, mnc: 654, lac: 0x0001},
                             {longName: "PNN3Long", shortName: "PNN3Short"});
 
   run_next_test();
 });
 
-/**
- * Verify Proactive Command : Timer Management
- */
-add_test(function test_stk_proactive_command_timer_management() {
-  let worker = newUint8Worker();
-  let pduHelper = worker.GsmPDUHelper;
-  let berHelper = worker.BerTlvHelper;
-  let stkHelper = worker.StkProactiveCmdHelper;
-
-  // Timer Management - Start
-  let timer_management_1 = [
-    0xD0,
-    0x11,
-    0x81, 0x03, 0x01, 0x27, 0x00,
-    0x82, 0x02, 0x81, 0x82,
-    0xA4, 0x01, 0x01,
-    0xA5, 0x03, 0x10, 0x20, 0x30
-  ];
-
-  for(let i = 0 ; i < timer_management_1.length; i++) {
-    pduHelper.writeHexOctet(timer_management_1[i]);
-  }
-
-  let berTlv = berHelper.decode(timer_management_1.length);
-  let ctlvs = berTlv.value;
-  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
-  do_check_eq(tlv.value.commandNumber, 0x01);
-  do_check_eq(tlv.value.typeOfCommand, STK_CMD_TIMER_MANAGEMENT);
-  do_check_eq(tlv.value.commandQualifier, STK_TIMER_START);
-
-  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TIMER_IDENTIFIER, ctlvs);
-  do_check_eq(tlv.value.timerId, 0x01);
-
-  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TIMER_VALUE, ctlvs);
-  do_check_eq(tlv.value.timerValue, (0x01 * 60 * 60) + (0x02 * 60) + 0x03);
-
-  // Timer Management - Deactivate
-  let timer_management_2 = [
-    0xD0,
-    0x0C,
-    0x81, 0x03, 0x01, 0x27, 0x01,
-    0x82, 0x02, 0x81, 0x82,
-    0xA4, 0x01, 0x01
-  ];
-
-  for(let i = 0 ; i < timer_management_2.length; i++) {
-    pduHelper.writeHexOctet(timer_management_2[i]);
-  }
-
-  berTlv = berHelper.decode(timer_management_2.length);
-  ctlvs = berTlv.value;
-  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
-  do_check_eq(tlv.value.commandNumber, 0x01);
-  do_check_eq(tlv.value.typeOfCommand, STK_CMD_TIMER_MANAGEMENT);
-  do_check_eq(tlv.value.commandQualifier, STK_TIMER_DEACTIVATE);
-
-  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TIMER_IDENTIFIER, ctlvs);
-  do_check_eq(tlv.value.timerId, 0x01);
-
-  run_next_test();
-});
-
-/**
- * Verify Proactive Command : Provide Local Information
- */
-add_test(function test_stk_proactive_command_provide_local_information() {
-  let worker = newUint8Worker();
-  let pduHelper = worker.GsmPDUHelper;
-  let berHelper = worker.BerTlvHelper;
-  let stkHelper = worker.StkProactiveCmdHelper;
-
-  // Verify IMEI
-  let local_info_1 = [
-    0xD0,
-    0x09,
-    0x81, 0x03, 0x01, 0x26, 0x01,
-    0x82, 0x02, 0x81, 0x82];
-
-  for (let i = 0; i < local_info_1.length; i++) {
-    pduHelper.writeHexOctet(local_info_1[i]);
-  }
-
-  let berTlv = berHelper.decode(local_info_1.length);
-  let ctlvs = berTlv.value;
-  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
-  do_check_eq(tlv.value.commandNumber, 0x01);
-  do_check_eq(tlv.value.typeOfCommand, STK_CMD_PROVIDE_LOCAL_INFO);
-  do_check_eq(tlv.value.commandQualifier, STK_LOCAL_INFO_IMEI);
-
-  // Verify Date and Time Zone
-  let local_info_2 = [
-    0xD0,
-    0x09,
-    0x81, 0x03, 0x01, 0x26, 0x03,
-    0x82, 0x02, 0x81, 0x82];
-
-  for (let i = 0; i < local_info_2.length; i++) {
-    pduHelper.writeHexOctet(local_info_2[i]);
-  }
-
-  berTlv = berHelper.decode(local_info_2.length);
-  ctlvs = berTlv.value;
-  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
-  do_check_eq(tlv.value.commandNumber, 0x01);
-  do_check_eq(tlv.value.typeOfCommand, STK_CMD_PROVIDE_LOCAL_INFO);
-  do_check_eq(tlv.value.commandQualifier, STK_LOCAL_INFO_DATE_TIME_ZONE);
-
-  run_next_test();
-});
-
 add_test(function test_path_id_for_spid_and_spn() {
   let worker = newWorker({
     postRILMessage: function fakePostRILMessage(data) {
       // Do nothing
     },
     postMessage: function fakePostMessage(message) {
       // Do nothing
     }});
@@ -1489,269 +695,16 @@ add_test(function test_parse_pbr_tlvs() 
   do_check_eq(pbr.anr1.fileId, 0x4f12);
   do_check_eq(pbr.ccp1.fileId, 0x4F3D);
   do_check_eq(pbr.ext1.fileId, 0x4F4A);
 
   run_next_test();
 });
 
 /**
- * Verify Event Download Command : Location Status
- */
-add_test(function test_stk_event_download_location_status() {
-  let worker = newUint8SupportOutgoingIndexWorker();
-  let buf = worker.Buf;
-  let pduHelper = worker.GsmPDUHelper;
-
-  buf.sendParcel = function () {
-    // Type
-    do_check_eq(this.readUint32(), REQUEST_STK_SEND_ENVELOPE_COMMAND);
-
-    // Token : we don't care
-    this.readUint32();
-
-    // Data Size, 42 = 2 * (2 + TLV_DEVICE_ID_SIZE(4) +
-    //                      TLV_EVENT_LIST_SIZE(3) +
-    //                      TLV_LOCATION_STATUS_SIZE(3) +
-    //                      TLV_LOCATION_INFO_GSM_SIZE(9))
-    do_check_eq(this.readUint32(), 42);
-
-    // BER tag
-    do_check_eq(pduHelper.readHexOctet(), BER_EVENT_DOWNLOAD_TAG);
-
-    // BER length, 19 = TLV_DEVICE_ID_SIZE(4) +
-    //                  TLV_EVENT_LIST_SIZE(3) +
-    //                  TLV_LOCATION_STATUS_SIZE(3) +
-    //                  TLV_LOCATION_INFO_GSM_SIZE(9)
-    do_check_eq(pduHelper.readHexOctet(), 19);
-
-    // Device Identifies, Type-Length-Value(Source ID-Destination ID)
-    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_DEVICE_ID |
-                                          COMPREHENSIONTLV_FLAG_CR);
-    do_check_eq(pduHelper.readHexOctet(), 2);
-    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_ME);
-    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_SIM);
-
-    // Event List, Type-Length-Value
-    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_EVENT_LIST |
-                                          COMPREHENSIONTLV_FLAG_CR);
-    do_check_eq(pduHelper.readHexOctet(), 1);
-    do_check_eq(pduHelper.readHexOctet(), STK_EVENT_TYPE_LOCATION_STATUS);
-
-    // Location Status, Type-Length-Value
-    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_LOCATION_STATUS |
-                                          COMPREHENSIONTLV_FLAG_CR);
-    do_check_eq(pduHelper.readHexOctet(), 1);
-    do_check_eq(pduHelper.readHexOctet(), STK_SERVICE_STATE_NORMAL);
-
-    // Location Info, Type-Length-Value
-    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_LOCATION_INFO |
-                                          COMPREHENSIONTLV_FLAG_CR);
-    do_check_eq(pduHelper.readHexOctet(), 7);
-
-    do_check_eq(pduHelper.readHexOctet(), 0x21); // MCC + MNC
-    do_check_eq(pduHelper.readHexOctet(), 0x63);
-    do_check_eq(pduHelper.readHexOctet(), 0x54);
-    do_check_eq(pduHelper.readHexOctet(), 0); // LAC
-    do_check_eq(pduHelper.readHexOctet(), 0);
-    do_check_eq(pduHelper.readHexOctet(), 0); // Cell ID
-    do_check_eq(pduHelper.readHexOctet(), 0);
-
-    run_next_test();
-  };
-
-  let event = {
-    eventType: STK_EVENT_TYPE_LOCATION_STATUS,
-    locationStatus: STK_SERVICE_STATE_NORMAL,
-    locationInfo: {
-      mcc: "123",
-      mnc: "456",
-      gsmLocationAreaCode: 0,
-      gsmCellId: 0
-    }
-  };
-  worker.RIL.sendStkEventDownload({
-    event: event
-  });
-});
-
-/**
- * Verify STK terminal response
- */
-add_test(function test_stk_terminal_response() {
-  let worker = newUint8SupportOutgoingIndexWorker();
-  let buf = worker.Buf;
-  let pduHelper = worker.GsmPDUHelper;
-
-  buf.sendParcel = function () {
-    // Type
-    do_check_eq(this.readUint32(), REQUEST_STK_SEND_TERMINAL_RESPONSE);
-
-    // Token : we don't care
-    this.readUint32();
-
-    // Data Size, 44 = 2 * (TLV_COMMAND_DETAILS_SIZE(5) +
-    //                      TLV_DEVICE_ID_SIZE(4) +
-    //                      TLV_RESULT_SIZE(3) +
-    //                      TEXT LENGTH(10))
-    do_check_eq(this.readUint32(), 44);
-
-    // Command Details, Type-Length-Value
-    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_COMMAND_DETAILS |
-                                          COMPREHENSIONTLV_FLAG_CR);
-    do_check_eq(pduHelper.readHexOctet(), 3);
-    do_check_eq(pduHelper.readHexOctet(), 0x01);
-    do_check_eq(pduHelper.readHexOctet(), STK_CMD_PROVIDE_LOCAL_INFO);
-    do_check_eq(pduHelper.readHexOctet(), STK_LOCAL_INFO_NNA);
-
-    // Device Identifies, Type-Length-Value(Source ID-Destination ID)
-    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_DEVICE_ID);
-    do_check_eq(pduHelper.readHexOctet(), 2);
-    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_ME);
-    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_SIM);
-
-    // Result
-    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_RESULT |
-                                          COMPREHENSIONTLV_FLAG_CR);
-    do_check_eq(pduHelper.readHexOctet(), 1);
-    do_check_eq(pduHelper.readHexOctet(), STK_RESULT_OK);
-
-    // Text
-    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_TEXT_STRING |
-                                          COMPREHENSIONTLV_FLAG_CR);
-    do_check_eq(pduHelper.readHexOctet(), 8);
-    do_check_eq(pduHelper.readHexOctet(), STK_TEXT_CODING_GSM_7BIT_PACKED);
-    do_check_eq(pduHelper.readSeptetsToString(7, 0, PDU_NL_IDENTIFIER_DEFAULT,
-                PDU_NL_IDENTIFIER_DEFAULT), "Mozilla");
-
-    run_next_test();
-  };
-
-  let response = {
-    command: {
-      commandNumber: 0x01,
-      typeOfCommand: STK_CMD_PROVIDE_LOCAL_INFO,
-      commandQualifier: STK_LOCAL_INFO_NNA,
-      options: {
-        isPacked: true
-      }
-    },
-    input: "Mozilla",
-    resultCode: STK_RESULT_OK
-  };
-  worker.RIL.sendStkTerminalResponse(response);
-});
-
-/**
- * Verify Event Download Command : Language Selection
- */
-add_test(function test_stk_event_download_language_selection() {
-  let worker = newUint8SupportOutgoingIndexWorker();
-  let buf = worker.Buf;
-  let pduHelper = worker.GsmPDUHelper;
-
-  buf.sendParcel = function () {
-    // Type
-    do_check_eq(this.readUint32(), REQUEST_STK_SEND_ENVELOPE_COMMAND);
-
-    // Token : we don't care
-    this.readUint32();
-
-    // Data Size, 26 = 2 * (2 + TLV_DEVICE_ID_SIZE(4) +
-    //                      TLV_EVENT_LIST_SIZE(3) +
-    //                      TLV_LANGUAGE(4))
-    do_check_eq(this.readUint32(), 26);
-
-    // BER tag
-    do_check_eq(pduHelper.readHexOctet(), BER_EVENT_DOWNLOAD_TAG);
-
-    // BER length, 19 = TLV_DEVICE_ID_SIZE(4) +
-    //                  TLV_EVENT_LIST_SIZE(3) +
-    //                  TLV_LANGUAGE(4)
-    do_check_eq(pduHelper.readHexOctet(), 11);
-
-    // Device Identifies, Type-Length-Value(Source ID-Destination ID)
-    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_DEVICE_ID |
-                                          COMPREHENSIONTLV_FLAG_CR);
-    do_check_eq(pduHelper.readHexOctet(), 2);
-    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_ME);
-    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_SIM);
-
-    // Event List, Type-Length-Value
-    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_EVENT_LIST |
-                                          COMPREHENSIONTLV_FLAG_CR);
-    do_check_eq(pduHelper.readHexOctet(), 1);
-    do_check_eq(pduHelper.readHexOctet(), STK_EVENT_TYPE_LANGUAGE_SELECTION);
-
-    // Language, Type-Length-Value
-    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_LANGUAGE);
-    do_check_eq(pduHelper.readHexOctet(), 2);
-    do_check_eq(pduHelper.read8BitUnpackedToString(2), "zh");
-
-    run_next_test();
-  };
-
-  let event = {
-    eventType: STK_EVENT_TYPE_LANGUAGE_SELECTION,
-    language: "zh"
-  };
-  worker.RIL.sendStkEventDownload({
-    event: event
-  });
-});
-
-/**
- * Verify Event Download Command : Idle Screen Available
- */
-add_test(function test_stk_event_download_idle_screen_available() {
-  let worker = newUint8SupportOutgoingIndexWorker();
-  let buf = worker.Buf;
-  let pduHelper = worker.GsmPDUHelper;
-
-  buf.sendParcel = function () {
-    // Type
-    do_check_eq(this.readUint32(), REQUEST_STK_SEND_ENVELOPE_COMMAND);
-
-    // Token : we don't care
-    this.readUint32();
-
-    // Data Size, 18 = 2 * (2 + TLV_DEVICE_ID_SIZE(4) + TLV_EVENT_LIST_SIZE(3))
-    do_check_eq(this.readUint32(), 18);
-
-    // BER tag
-    do_check_eq(pduHelper.readHexOctet(), BER_EVENT_DOWNLOAD_TAG);
-
-    // BER length, 7 = TLV_DEVICE_ID_SIZE(4) + TLV_EVENT_LIST_SIZE(3)
-    do_check_eq(pduHelper.readHexOctet(), 7);
-
-    // Device Identities, Type-Length-Value(Source ID-Destination ID)
-    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_DEVICE_ID |
-                                          COMPREHENSIONTLV_FLAG_CR);
-    do_check_eq(pduHelper.readHexOctet(), 2);
-    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_DISPLAY);
-    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_SIM);
-
-    // Event List, Type-Length-Value
-    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_EVENT_LIST |
-                                          COMPREHENSIONTLV_FLAG_CR);
-    do_check_eq(pduHelper.readHexOctet(), 1);
-    do_check_eq(pduHelper.readHexOctet(), STK_EVENT_TYPE_IDLE_SCREEN_AVAILABLE);
-
-    run_next_test();
-  };
-
-  let event = {
-    eventType: STK_EVENT_TYPE_IDLE_SCREEN_AVAILABLE
-  };
-  worker.RIL.sendStkEventDownload({
-    event: event
-  });
-});
-
-/**
  * Verify ICCIOHelper.loadLinearFixedEF with recordSize.
  */
 add_test(function test_load_linear_fixed_ef() {
   let worker = newUint8Worker();
   let ril = worker.RIL;
   let io = worker.ICCIOHelper;
 
   io.getResponse = function fakeGetResponse(options) {
new file mode 100644
--- /dev/null
+++ b/dom/system/gonk/tests/test_ril_worker_stk.js
@@ -0,0 +1,927 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+subscriptLoader.loadSubScript("resource://gre/modules/ril_consts.js", this);
+
+function run_test() {
+  run_next_test();
+}
+
+/**
+ * Helper function.
+ */
+function newUint8Worker() {
+  let worker = newWorker();
+  let index = 0; // index for read
+  let buf = [];
+
+  worker.Buf.writeUint8 = function (value) {
+    buf.push(value);
+  };
+
+  worker.Buf.readUint8 = function () {
+    return buf[index++];
+  };
+
+  worker.Buf.seekIncoming = function (offset) {
+    index += offset;
+  };
+
+  worker.debug = do_print;
+
+  return worker;
+}
+
+function newUint8SupportOutgoingIndexWorker() {
+  let worker = newWorker();
+  let index = 4;          // index for read
+  let buf = [0, 0, 0, 0]; // Preserved parcel size
+
+  worker.Buf.writeUint8 = function (value) {
+    if (worker.Buf.outgoingIndex >= buf.length) {
+      buf.push(value);
+    } else {
+      buf[worker.Buf.outgoingIndex] = value;
+    }
+
+    worker.Buf.outgoingIndex++;
+  };
+
+  worker.Buf.readUint8 = function () {
+    return buf[index++];
+  };
+
+  worker.Buf.seekIncoming = function (offset) {
+    index += offset;
+  };
+
+  worker.debug = do_print;
+
+  return worker;
+}
+
+// Test RIL requests related to STK.
+
+/**
+ * Verify RIL.sendStkTerminalProfile
+ */
+add_test(function test_send_stk_terminal_profile() {
+  let worker = newUint8Worker();
+  let ril = worker.RIL;
+  let buf = worker.Buf;
+
+  ril.sendStkTerminalProfile(STK_SUPPORTED_TERMINAL_PROFILE);
+
+  buf.seekIncoming(8);
+  let profile = buf.readString();
+  for (let i = 0; i < STK_SUPPORTED_TERMINAL_PROFILE.length; i++) {
+    do_check_eq(parseInt(profile.substring(2 * i, 2 * i + 2), 16),
+                STK_SUPPORTED_TERMINAL_PROFILE[i]);
+  }
+
+  run_next_test();
+});
+
+/**
+ * Verify STK terminal response
+ */
+add_test(function test_stk_terminal_response() {
+  let worker = newUint8SupportOutgoingIndexWorker();
+  let buf = worker.Buf;
+  let pduHelper = worker.GsmPDUHelper;
+
+  buf.sendParcel = function () {
+    // Type
+    do_check_eq(this.readUint32(), REQUEST_STK_SEND_TERMINAL_RESPONSE);
+
+    // Token : we don't care
+    this.readUint32();
+
+    // Data Size, 44 = 2 * (TLV_COMMAND_DETAILS_SIZE(5) +
+    //                      TLV_DEVICE_ID_SIZE(4) +
+    //                      TLV_RESULT_SIZE(3) +
+    //                      TEXT LENGTH(10))
+    do_check_eq(this.readUint32(), 44);
+
+    // Command Details, Type-Length-Value
+    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_COMMAND_DETAILS |
+                                          COMPREHENSIONTLV_FLAG_CR);
+    do_check_eq(pduHelper.readHexOctet(), 3);
+    do_check_eq(pduHelper.readHexOctet(), 0x01);
+    do_check_eq(pduHelper.readHexOctet(), STK_CMD_PROVIDE_LOCAL_INFO);
+    do_check_eq(pduHelper.readHexOctet(), STK_LOCAL_INFO_NNA);
+
+    // Device Identifies, Type-Length-Value(Source ID-Destination ID)
+    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_DEVICE_ID);
+    do_check_eq(pduHelper.readHexOctet(), 2);
+    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_ME);
+    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_SIM);
+
+    // Result
+    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_RESULT |
+                                          COMPREHENSIONTLV_FLAG_CR);
+    do_check_eq(pduHelper.readHexOctet(), 1);
+    do_check_eq(pduHelper.readHexOctet(), STK_RESULT_OK);
+
+    // Text
+    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_TEXT_STRING |
+                                          COMPREHENSIONTLV_FLAG_CR);
+    do_check_eq(pduHelper.readHexOctet(), 8);
+    do_check_eq(pduHelper.readHexOctet(), STK_TEXT_CODING_GSM_7BIT_PACKED);
+    do_check_eq(pduHelper.readSeptetsToString(7, 0, PDU_NL_IDENTIFIER_DEFAULT,
+                PDU_NL_IDENTIFIER_DEFAULT), "Mozilla");
+
+    run_next_test();
+  };
+
+  let response = {
+    command: {
+      commandNumber: 0x01,
+      typeOfCommand: STK_CMD_PROVIDE_LOCAL_INFO,
+      commandQualifier: STK_LOCAL_INFO_NNA,
+      options: {
+        isPacked: true
+      }
+    },
+    input: "Mozilla",
+    resultCode: STK_RESULT_OK
+  };
+  worker.RIL.sendStkTerminalResponse(response);
+});
+
+// Test ComprehensionTlvHelper
+
+/**
+ * Verify ComprehensionTlvHelper.writeLocationInfoTlv
+ */
+add_test(function test_write_location_info_tlv() {
+  let worker = newUint8Worker();
+  let pduHelper = worker.GsmPDUHelper;
+  let tlvHelper = worker.ComprehensionTlvHelper;
+
+  // Test with 2-digit mnc, and gsmCellId obtained from UMTS network.
+  let loc = {
+    mcc: "466",
+    mnc: "92",
+    gsmLocationAreaCode : 10291,
+    gsmCellId: 19072823
+  };
+  tlvHelper.writeLocationInfoTlv(loc);
+
+  let tag = pduHelper.readHexOctet();
+  do_check_eq(tag, COMPREHENSIONTLV_TAG_LOCATION_INFO |
+                   COMPREHENSIONTLV_FLAG_CR);
+
+  let length = pduHelper.readHexOctet();
+  do_check_eq(length, 9);
+
+  let mcc_mnc = pduHelper.readSwappedNibbleBcdString(3);
+  do_check_eq(mcc_mnc, "46692");
+
+  let lac = (pduHelper.readHexOctet() << 8) | pduHelper.readHexOctet();
+  do_check_eq(lac, 10291);
+
+  let cellId = (pduHelper.readHexOctet() << 24) |
+               (pduHelper.readHexOctet() << 16) |
+               (pduHelper.readHexOctet() << 8)  |
+               (pduHelper.readHexOctet());
+  do_check_eq(cellId, 19072823);
+
+  // Test with 1-digit mnc, and gsmCellId obtained from GSM network.
+  loc = {
+    mcc: "466",
+    mnc: "02",
+    gsmLocationAreaCode : 10291,
+    gsmCellId: 65534
+  };
+  tlvHelper.writeLocationInfoTlv(loc);
+
+  tag = pduHelper.readHexOctet();
+  do_check_eq(tag, COMPREHENSIONTLV_TAG_LOCATION_INFO |
+                   COMPREHENSIONTLV_FLAG_CR);
+
+  length = pduHelper.readHexOctet();
+  do_check_eq(length, 7);
+
+  mcc_mnc = pduHelper.readSwappedNibbleBcdString(3);
+  do_check_eq(mcc_mnc, "46602");
+
+  lac = (pduHelper.readHexOctet() << 8) | pduHelper.readHexOctet();
+  do_check_eq(lac, 10291);
+
+  cellId = (pduHelper.readHexOctet() << 8) | (pduHelper.readHexOctet());
+  do_check_eq(cellId, 65534);
+
+  // Test with 3-digit mnc, and gsmCellId obtained from GSM network.
+  loc = {
+    mcc: "466",
+    mnc: "222",
+    gsmLocationAreaCode : 10291,
+    gsmCellId: 65534
+  };
+  tlvHelper.writeLocationInfoTlv(loc);
+
+  tag = pduHelper.readHexOctet();
+  do_check_eq(tag, COMPREHENSIONTLV_TAG_LOCATION_INFO |
+                   COMPREHENSIONTLV_FLAG_CR);
+
+  length = pduHelper.readHexOctet();
+  do_check_eq(length, 7);
+
+  mcc_mnc = pduHelper.readSwappedNibbleBcdString(3);
+  do_check_eq(mcc_mnc, "466222");
+
+  lac = (pduHelper.readHexOctet() << 8) | pduHelper.readHexOctet();
+  do_check_eq(lac, 10291);
+
+  cellId = (pduHelper.readHexOctet() << 8) | (pduHelper.readHexOctet());
+  do_check_eq(cellId, 65534);
+
+  run_next_test();
+});
+
+/**
+ * Verify ComprehensionTlvHelper.writeErrorNumber
+ */
+add_test(function test_write_disconnecting_cause() {
+  let worker = newUint8Worker();
+  let pduHelper = worker.GsmPDUHelper;
+  let tlvHelper = worker.ComprehensionTlvHelper;
+
+  tlvHelper.writeCauseTlv(RIL_ERROR_TO_GECKO_ERROR[ERROR_GENERIC_FAILURE]);
+  let tag = pduHelper.readHexOctet();
+  do_check_eq(tag, COMPREHENSIONTLV_TAG_CAUSE | COMPREHENSIONTLV_FLAG_CR);
+  let len = pduHelper.readHexOctet();
+  do_check_eq(len, 2);  // We have one cause.
+  let standard = pduHelper.readHexOctet();
+  do_check_eq(standard, 0x60);
+  let cause = pduHelper.readHexOctet();
+  do_check_eq(cause, 0x80 | ERROR_GENERIC_FAILURE);
+
+  run_next_test();
+});
+
+/**
+ * Verify ComprehensionTlvHelper.getSizeOfLengthOctets
+ */
+add_test(function test_get_size_of_length_octets() {
+  let worker = newUint8Worker();
+  let tlvHelper = worker.ComprehensionTlvHelper;
+
+  let length = 0x70;
+  do_check_eq(tlvHelper.getSizeOfLengthOctets(length), 1);
+
+  length = 0x80;
+  do_check_eq(tlvHelper.getSizeOfLengthOctets(length), 2);
+
+  length = 0x180;
+  do_check_eq(tlvHelper.getSizeOfLengthOctets(length), 3);
+
+  length = 0x18000;
+  do_check_eq(tlvHelper.getSizeOfLengthOctets(length), 4);
+
+  run_next_test();
+});
+
+/**
+ * Verify ComprehensionTlvHelper.writeLength
+ */
+add_test(function test_write_length() {
+  let worker = newUint8Worker();
+  let pduHelper = worker.GsmPDUHelper;
+  let tlvHelper = worker.ComprehensionTlvHelper;
+
+  let length = 0x70;
+  tlvHelper.writeLength(length);
+  do_check_eq(pduHelper.readHexOctet(), length);
+
+  length = 0x80;
+  tlvHelper.writeLength(length);
+  do_check_eq(pduHelper.readHexOctet(), 0x81);
+  do_check_eq(pduHelper.readHexOctet(), length);
+
+  length = 0x180;
+  tlvHelper.writeLength(length);
+  do_check_eq(pduHelper.readHexOctet(), 0x82);
+  do_check_eq(pduHelper.readHexOctet(), (length >> 8) & 0xff);
+  do_check_eq(pduHelper.readHexOctet(), length & 0xff);
+
+  length = 0x18000;
+  tlvHelper.writeLength(length);
+  do_check_eq(pduHelper.readHexOctet(), 0x83);
+  do_check_eq(pduHelper.readHexOctet(), (length >> 16) & 0xff);
+  do_check_eq(pduHelper.readHexOctet(), (length >> 8) & 0xff);
+  do_check_eq(pduHelper.readHexOctet(), length & 0xff);
+
+  run_next_test();
+});
+
+// Test Proactive commands.
+
+/**
+ * Verify Proactive Command : Refresh
+ */
+add_test(function test_stk_proactive_command_refresh() {
+  let worker = newUint8Worker();
+  let pduHelper = worker.GsmPDUHelper;
+  let berHelper = worker.BerTlvHelper;
+  let stkHelper = worker.StkProactiveCmdHelper;
+
+  let refresh_1 = [
+    0xD0,
+    0x10,
+    0x81, 0x03, 0x01, 0x01, 0x01,
+    0x82, 0x02, 0x81, 0x82,
+    0x92, 0x05, 0x01, 0x3F, 0x00, 0x2F, 0xE2];
+
+  for (let i = 0; i < refresh_1.length; i++) {
+    pduHelper.writeHexOctet(refresh_1[i]);
+  }
+
+  let berTlv = berHelper.decode(refresh_1.length);
+  let ctlvs = berTlv.value;
+  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
+  do_check_eq(tlv.value.commandNumber, 0x01);
+  do_check_eq(tlv.value.typeOfCommand, 0x01);
+  do_check_eq(tlv.value.commandQualifier, 0x01);
+
+  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_FILE_LIST, ctlvs);
+  do_check_eq(tlv.value.fileList, "3F002FE2");
+
+  run_next_test();
+});
+
+/**
+ * Verify Proactive Command : Play Tone
+ */
+add_test(function test_stk_proactive_command_play_tone() {
+  let worker = newUint8Worker();
+  let pduHelper = worker.GsmPDUHelper;
+  let berHelper = worker.BerTlvHelper;
+  let stkHelper = worker.StkProactiveCmdHelper;
+
+  let tone_1 = [
+    0xD0,
+    0x1B,
+    0x81, 0x03, 0x01, 0x20, 0x00,
+    0x82, 0x02, 0x81, 0x03,
+    0x85, 0x09, 0x44, 0x69, 0x61, 0x6C, 0x20, 0x54, 0x6F, 0x6E, 0x65,
+    0x8E, 0x01, 0x01,
+    0x84, 0x02, 0x01, 0x05];
+
+  for (let i = 0; i < tone_1.length; i++) {
+    pduHelper.writeHexOctet(tone_1[i]);
+  }
+
+  let berTlv = berHelper.decode(tone_1.length);
+  let ctlvs = berTlv.value;
+  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
+  do_check_eq(tlv.value.commandNumber, 0x01);
+  do_check_eq(tlv.value.typeOfCommand, 0x20);
+  do_check_eq(tlv.value.commandQualifier, 0x00);
+
+  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_ALPHA_ID, ctlvs);
+  do_check_eq(tlv.value.identifier, "Dial Tone");
+
+  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TONE, ctlvs);
+  do_check_eq(tlv.value.tone, STK_TONE_TYPE_DIAL_TONE);
+
+  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_DURATION, ctlvs);
+  do_check_eq(tlv.value.timeUnit, STK_TIME_UNIT_SECOND);
+  do_check_eq(tlv.value.timeInterval, 5);
+
+  run_next_test();
+});
+
+/**
+ * Verify Proactive Command : Poll Interval
+ */
+add_test(function test_stk_proactive_command_poll_interval() {
+  let worker = newUint8Worker();
+  let pduHelper = worker.GsmPDUHelper;
+  let berHelper = worker.BerTlvHelper;
+  let stkHelper = worker.StkProactiveCmdHelper;
+
+  let poll_1 = [
+    0xD0,
+    0x0D,
+    0x81, 0x03, 0x01, 0x03, 0x00,
+    0x82, 0x02, 0x81, 0x82,
+    0x84, 0x02, 0x01, 0x14];
+
+  for (let i = 0; i < poll_1.length; i++) {
+    pduHelper.writeHexOctet(poll_1[i]);
+  }
+
+  let berTlv = berHelper.decode(poll_1.length);
+  let ctlvs = berTlv.value;
+  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
+  do_check_eq(tlv.value.commandNumber, 0x01);
+  do_check_eq(tlv.value.typeOfCommand, 0x03);
+  do_check_eq(tlv.value.commandQualifier, 0x00);
+
+  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_DURATION, ctlvs);
+  do_check_eq(tlv.value.timeUnit, STK_TIME_UNIT_SECOND);
+  do_check_eq(tlv.value.timeInterval, 0x14);
+
+  run_next_test();
+});
+
+/**
+ * Verify Proactive Command: Display Text
+ */
+add_test(function test_read_septets_to_string() {
+  let worker = newUint8Worker();
+  let pduHelper = worker.GsmPDUHelper;
+  let berHelper = worker.BerTlvHelper;
+  let stkHelper = worker.StkProactiveCmdHelper;
+
+  let display_text_1 = [
+    0xd0,
+    0x28,
+    0x81, 0x03, 0x01, 0x21, 0x80,
+    0x82, 0x02, 0x81, 0x02,
+    0x0d, 0x1d, 0x00, 0xd3, 0x30, 0x9b, 0xfc, 0x06, 0xc9, 0x5c, 0x30, 0x1a,
+    0xa8, 0xe8, 0x02, 0x59, 0xc3, 0xec, 0x34, 0xb9, 0xac, 0x07, 0xc9, 0x60,
+    0x2f, 0x58, 0xed, 0x15, 0x9b, 0xb9, 0x40,
+  ];
+
+  for (let i = 0; i < display_text_1.length; i++) {
+    pduHelper.writeHexOctet(display_text_1[i]);
+  }
+
+  let berTlv = berHelper.decode(display_text_1.length);
+  let ctlvs = berTlv.value;
+  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TEXT_STRING, ctlvs);
+  do_check_eq(tlv.value.textString, "Saldo 2.04 E. Validez 20/05/13. ");
+
+  run_next_test();
+});
+
+/**
+ * Verify Proactive Command: Set Up Event List.
+ */
+add_test(function test_stk_proactive_command_event_list() {
+  let worker = newUint8Worker();
+  let pduHelper = worker.GsmPDUHelper;
+  let berHelper = worker.BerTlvHelper;
+  let stkHelper = worker.StkProactiveCmdHelper;
+
+  let event_1 = [
+    0xD0,
+    0x0F,
+    0x81, 0x03, 0x01, 0x05, 0x00,
+    0x82, 0x02, 0x81, 0x82,
+    0x99, 0x04, 0x00, 0x01, 0x02, 0x03];
+
+  for (let i = 0; i < event_1.length; i++) {
+    pduHelper.writeHexOctet(event_1[i]);
+  }
+
+  let berTlv = berHelper.decode(event_1.length);
+  let ctlvs = berTlv.value;
+  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
+  do_check_eq(tlv.value.commandNumber, 0x01);
+  do_check_eq(tlv.value.typeOfCommand, 0x05);
+  do_check_eq(tlv.value.commandQualifier, 0x00);
+
+  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_EVENT_LIST, ctlvs);
+  do_check_eq(Array.isArray(tlv.value.eventList), true);
+  for (let i = 0; i < tlv.value.eventList.length; i++) {
+    do_check_eq(tlv.value.eventList[i], i);
+  }
+
+  run_next_test();
+});
+
+/**
+ * Verify Proactive Command : Get Input
+ */
+add_test(function test_stk_proactive_command_get_input() {
+  let worker = newUint8Worker();
+  let pduHelper = worker.GsmPDUHelper;
+  let berHelper = worker.BerTlvHelper;
+  let stkHelper = worker.StkProactiveCmdHelper;
+  let stkCmdHelper = worker.StkCommandParamsFactory;
+
+  let get_input_1 = [
+    0xD0,
+    0x1E,
+    0x81, 0x03, 0x01, 0x23, 0x8F,
+    0x82, 0x02, 0x81, 0x82,
+    0x8D, 0x05, 0x04, 0x54, 0x65, 0x78, 0x74,
+    0x91, 0x02, 0x01, 0x10,
+    0x17, 0x08, 0x04, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74];
+
+  for (let i = 0; i < get_input_1.length; i++) {
+    pduHelper.writeHexOctet(get_input_1[i]);
+  }
+
+  let berTlv = berHelper.decode(get_input_1.length);
+  let ctlvs = berTlv.value;
+  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
+  do_check_eq(tlv.value.commandNumber, 0x01);
+  do_check_eq(tlv.value.typeOfCommand, STK_CMD_GET_INPUT);
+
+  let input = stkCmdHelper.createParam(tlv.value, ctlvs);
+  do_check_eq(input.text, "Text");
+  do_check_eq(input.isAlphabet, true);
+  do_check_eq(input.isUCS2, true);
+  do_check_eq(input.hideInput, true);
+  do_check_eq(input.isPacked, true);
+  do_check_eq(input.isHelpAvailable, true);
+  do_check_eq(input.minLength, 0x01);
+  do_check_eq(input.maxLength, 0x10);
+  do_check_eq(input.defaultText, "Default");
+
+  let get_input_2 = [
+    0xD0,
+    0x11,
+    0x81, 0x03, 0x01, 0x23, 0x00,
+    0x82, 0x02, 0x81, 0x82,
+    0x8D, 0x00,
+    0x91, 0x02, 0x01, 0x10,
+    0x17, 0x00];
+
+  for (let i = 0; i < get_input_2.length; i++) {
+    pduHelper.writeHexOctet(get_input_2[i]);
+  }
+
+  berTlv = berHelper.decode(get_input_2.length);
+  ctlvs = berTlv.value;
+  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
+  do_check_eq(tlv.value.commandNumber, 0x01);
+  do_check_eq(tlv.value.typeOfCommand, STK_CMD_GET_INPUT);
+
+  input = stkCmdHelper.createParam(tlv.value, ctlvs);
+  do_check_eq(input.text, null);
+  do_check_eq(input.minLength, 0x01);
+  do_check_eq(input.maxLength, 0x10);
+  do_check_eq(input.defaultText, null);
+
+  run_next_test();
+});
+
+/**
+ * Verify Proactive Command : More Time
+ */
+add_test(function test_stk_proactive_command_more_time() {
+  let worker = newUint8Worker();
+  let pduHelper = worker.GsmPDUHelper;
+  let berHelper = worker.BerTlvHelper;
+  let stkHelper = worker.StkProactiveCmdHelper;
+
+  let more_time_1 = [
+    0xD0,
+    0x09,
+    0x81, 0x03, 0x01, 0x02, 0x00,
+    0x82, 0x02, 0x81, 0x82];
+
+  for(let i = 0 ; i < more_time_1.length; i++) {
+    pduHelper.writeHexOctet(more_time_1[i]);
+  }
+
+  let berTlv = berHelper.decode(more_time_1.length);
+  let ctlvs = berTlv.value;
+  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
+  do_check_eq(tlv.value.commandNumber, 0x01);
+  do_check_eq(tlv.value.typeOfCommand, STK_CMD_MORE_TIME);
+  do_check_eq(tlv.value.commandQualifier, 0x00);
+
+  run_next_test();
+});
+
+/**
+ * Verify Proactive Command : Set Up Call
+ */
+add_test(function test_stk_proactive_command_set_up_call() {
+  let worker = newUint8Worker();
+  let pduHelper = worker.GsmPDUHelper;
+  let berHelper = worker.BerTlvHelper;
+  let stkHelper = worker.StkProactiveCmdHelper;
+  let cmdFactory = worker.StkCommandParamsFactory;
+
+  let set_up_call_1 = [
+    0xD0,
+    0x29,
+    0x81, 0x03, 0x01, 0x10, 0x04,
+    0x82, 0x02, 0x81, 0x82,
+    0x05, 0x0A, 0x44, 0x69, 0x73, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74,
+    0x86, 0x09, 0x81, 0x10, 0x32, 0x04, 0x21, 0x43, 0x65, 0x1C, 0x2C,
+    0x05, 0x07, 0x4D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65];
+
+  for (let i = 0 ; i < set_up_call_1.length; i++) {
+    pduHelper.writeHexOctet(set_up_call_1[i]);
+  }
+
+  let berTlv = berHelper.decode(set_up_call_1.length);
+  let ctlvs = berTlv.value;
+  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
+  do_check_eq(tlv.value.commandNumber, 0x01);
+  do_check_eq(tlv.value.typeOfCommand, STK_CMD_SET_UP_CALL);
+
+  let setupCall = cmdFactory.createParam(tlv.value, ctlvs);
+  do_check_eq(setupCall.address, "012340123456,1,2");
+  do_check_eq(setupCall.confirmMessage, "Disconnect");
+  do_check_eq(setupCall.callMessage, "Message");
+
+  run_next_test();
+});
+
+/**
+ * Verify Proactive Command : Timer Management
+ */
+add_test(function test_stk_proactive_command_timer_management() {
+  let worker = newUint8Worker();
+  let pduHelper = worker.GsmPDUHelper;
+  let berHelper = worker.BerTlvHelper;
+  let stkHelper = worker.StkProactiveCmdHelper;
+
+  // Timer Management - Start
+  let timer_management_1 = [
+    0xD0,
+    0x11,
+    0x81, 0x03, 0x01, 0x27, 0x00,
+    0x82, 0x02, 0x81, 0x82,
+    0xA4, 0x01, 0x01,
+    0xA5, 0x03, 0x10, 0x20, 0x30
+  ];
+
+  for(let i = 0 ; i < timer_management_1.length; i++) {
+    pduHelper.writeHexOctet(timer_management_1[i]);
+  }
+
+  let berTlv = berHelper.decode(timer_management_1.length);
+  let ctlvs = berTlv.value;
+  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
+  do_check_eq(tlv.value.commandNumber, 0x01);
+  do_check_eq(tlv.value.typeOfCommand, STK_CMD_TIMER_MANAGEMENT);
+  do_check_eq(tlv.value.commandQualifier, STK_TIMER_START);
+
+  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TIMER_IDENTIFIER, ctlvs);
+  do_check_eq(tlv.value.timerId, 0x01);
+
+  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TIMER_VALUE, ctlvs);
+  do_check_eq(tlv.value.timerValue, (0x01 * 60 * 60) + (0x02 * 60) + 0x03);
+
+  // Timer Management - Deactivate
+  let timer_management_2 = [
+    0xD0,
+    0x0C,
+    0x81, 0x03, 0x01, 0x27, 0x01,
+    0x82, 0x02, 0x81, 0x82,
+    0xA4, 0x01, 0x01
+  ];
+
+  for(let i = 0 ; i < timer_management_2.length; i++) {
+    pduHelper.writeHexOctet(timer_management_2[i]);
+  }
+
+  berTlv = berHelper.decode(timer_management_2.length);
+  ctlvs = berTlv.value;
+  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
+  do_check_eq(tlv.value.commandNumber, 0x01);
+  do_check_eq(tlv.value.typeOfCommand, STK_CMD_TIMER_MANAGEMENT);
+  do_check_eq(tlv.value.commandQualifier, STK_TIMER_DEACTIVATE);
+
+  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_TIMER_IDENTIFIER, ctlvs);
+  do_check_eq(tlv.value.timerId, 0x01);
+
+  run_next_test();
+});
+
+/**
+ * Verify Proactive Command : Provide Local Information
+ */
+add_test(function test_stk_proactive_command_provide_local_information() {
+  let worker = newUint8Worker();
+  let pduHelper = worker.GsmPDUHelper;
+  let berHelper = worker.BerTlvHelper;
+  let stkHelper = worker.StkProactiveCmdHelper;
+
+  // Verify IMEI
+  let local_info_1 = [
+    0xD0,
+    0x09,
+    0x81, 0x03, 0x01, 0x26, 0x01,
+    0x82, 0x02, 0x81, 0x82];
+
+  for (let i = 0; i < local_info_1.length; i++) {
+    pduHelper.writeHexOctet(local_info_1[i]);
+  }
+
+  let berTlv = berHelper.decode(local_info_1.length);
+  let ctlvs = berTlv.value;
+  let tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
+  do_check_eq(tlv.value.commandNumber, 0x01);
+  do_check_eq(tlv.value.typeOfCommand, STK_CMD_PROVIDE_LOCAL_INFO);
+  do_check_eq(tlv.value.commandQualifier, STK_LOCAL_INFO_IMEI);
+
+  // Verify Date and Time Zone
+  let local_info_2 = [
+    0xD0,
+    0x09,
+    0x81, 0x03, 0x01, 0x26, 0x03,
+    0x82, 0x02, 0x81, 0x82];
+
+  for (let i = 0; i < local_info_2.length; i++) {
+    pduHelper.writeHexOctet(local_info_2[i]);
+  }
+
+  berTlv = berHelper.decode(local_info_2.length);
+  ctlvs = berTlv.value;
+  tlv = stkHelper.searchForTag(COMPREHENSIONTLV_TAG_COMMAND_DETAILS, ctlvs);
+  do_check_eq(tlv.value.commandNumber, 0x01);
+  do_check_eq(tlv.value.typeOfCommand, STK_CMD_PROVIDE_LOCAL_INFO);
+  do_check_eq(tlv.value.commandQualifier, STK_LOCAL_INFO_DATE_TIME_ZONE);
+
+  run_next_test();
+});
+
+/**
+ * Verify Event Download Command : Location Status
+ */
+add_test(function test_stk_event_download_location_status() {
+  let worker = newUint8SupportOutgoingIndexWorker();
+  let buf = worker.Buf;
+  let pduHelper = worker.GsmPDUHelper;
+
+  buf.sendParcel = function () {
+    // Type
+    do_check_eq(this.readUint32(), REQUEST_STK_SEND_ENVELOPE_COMMAND);
+
+    // Token : we don't care
+    this.readUint32();
+
+    // Data Size, 42 = 2 * (2 + TLV_DEVICE_ID_SIZE(4) +
+    //                      TLV_EVENT_LIST_SIZE(3) +
+    //                      TLV_LOCATION_STATUS_SIZE(3) +
+    //                      TLV_LOCATION_INFO_GSM_SIZE(9))
+    do_check_eq(this.readUint32(), 42);
+
+    // BER tag
+    do_check_eq(pduHelper.readHexOctet(), BER_EVENT_DOWNLOAD_TAG);
+
+    // BER length, 19 = TLV_DEVICE_ID_SIZE(4) +
+    //                  TLV_EVENT_LIST_SIZE(3) +
+    //                  TLV_LOCATION_STATUS_SIZE(3) +
+    //                  TLV_LOCATION_INFO_GSM_SIZE(9)
+    do_check_eq(pduHelper.readHexOctet(), 19);
+
+    // Device Identifies, Type-Length-Value(Source ID-Destination ID)
+    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_DEVICE_ID |
+                                          COMPREHENSIONTLV_FLAG_CR);
+    do_check_eq(pduHelper.readHexOctet(), 2);
+    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_ME);
+    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_SIM);
+
+    // Event List, Type-Length-Value
+    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_EVENT_LIST |
+                                          COMPREHENSIONTLV_FLAG_CR);
+    do_check_eq(pduHelper.readHexOctet(), 1);
+    do_check_eq(pduHelper.readHexOctet(), STK_EVENT_TYPE_LOCATION_STATUS);
+
+    // Location Status, Type-Length-Value
+    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_LOCATION_STATUS |
+                                          COMPREHENSIONTLV_FLAG_CR);
+    do_check_eq(pduHelper.readHexOctet(), 1);
+    do_check_eq(pduHelper.readHexOctet(), STK_SERVICE_STATE_NORMAL);
+
+    // Location Info, Type-Length-Value
+    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_LOCATION_INFO |
+                                          COMPREHENSIONTLV_FLAG_CR);
+    do_check_eq(pduHelper.readHexOctet(), 7);
+
+    do_check_eq(pduHelper.readHexOctet(), 0x21); // MCC + MNC
+    do_check_eq(pduHelper.readHexOctet(), 0x63);
+    do_check_eq(pduHelper.readHexOctet(), 0x54);
+    do_check_eq(pduHelper.readHexOctet(), 0); // LAC
+    do_check_eq(pduHelper.readHexOctet(), 0);
+    do_check_eq(pduHelper.readHexOctet(), 0); // Cell ID
+    do_check_eq(pduHelper.readHexOctet(), 0);
+
+    run_next_test();
+  };
+
+  let event = {
+    eventType: STK_EVENT_TYPE_LOCATION_STATUS,
+    locationStatus: STK_SERVICE_STATE_NORMAL,
+    locationInfo: {
+      mcc: "123",
+      mnc: "456",
+      gsmLocationAreaCode: 0,
+      gsmCellId: 0
+    }
+  };
+  worker.RIL.sendStkEventDownload({
+    event: event
+  });
+});
+
+// Test Event Download commands.
+
+/**
+ * Verify Event Download Command : Language Selection
+ */
+add_test(function test_stk_event_download_language_selection() {
+  let worker = newUint8SupportOutgoingIndexWorker();
+  let buf = worker.Buf;
+  let pduHelper = worker.GsmPDUHelper;
+
+  buf.sendParcel = function () {
+    // Type
+    do_check_eq(this.readUint32(), REQUEST_STK_SEND_ENVELOPE_COMMAND);
+
+    // Token : we don't care
+    this.readUint32();
+
+    // Data Size, 26 = 2 * (2 + TLV_DEVICE_ID_SIZE(4) +
+    //                      TLV_EVENT_LIST_SIZE(3) +
+    //                      TLV_LANGUAGE(4))
+    do_check_eq(this.readUint32(), 26);
+
+    // BER tag
+    do_check_eq(pduHelper.readHexOctet(), BER_EVENT_DOWNLOAD_TAG);
+
+    // BER length, 19 = TLV_DEVICE_ID_SIZE(4) +
+    //                  TLV_EVENT_LIST_SIZE(3) +
+    //                  TLV_LANGUAGE(4)
+    do_check_eq(pduHelper.readHexOctet(), 11);
+
+    // Device Identifies, Type-Length-Value(Source ID-Destination ID)
+    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_DEVICE_ID |
+                                          COMPREHENSIONTLV_FLAG_CR);
+    do_check_eq(pduHelper.readHexOctet(), 2);
+    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_ME);
+    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_SIM);
+
+    // Event List, Type-Length-Value
+    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_EVENT_LIST |
+                                          COMPREHENSIONTLV_FLAG_CR);
+    do_check_eq(pduHelper.readHexOctet(), 1);
+    do_check_eq(pduHelper.readHexOctet(), STK_EVENT_TYPE_LANGUAGE_SELECTION);
+
+    // Language, Type-Length-Value
+    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_LANGUAGE);
+    do_check_eq(pduHelper.readHexOctet(), 2);
+    do_check_eq(pduHelper.read8BitUnpackedToString(2), "zh");
+
+    run_next_test();
+  };
+
+  let event = {
+    eventType: STK_EVENT_TYPE_LANGUAGE_SELECTION,
+    language: "zh"
+  };
+  worker.RIL.sendStkEventDownload({
+    event: event
+  });
+});
+
+/**
+ * Verify Event Download Command : Idle Screen Available
+ */
+add_test(function test_stk_event_download_idle_screen_available() {
+  let worker = newUint8SupportOutgoingIndexWorker();
+  let buf = worker.Buf;
+  let pduHelper = worker.GsmPDUHelper;
+
+  buf.sendParcel = function () {
+    // Type
+    do_check_eq(this.readUint32(), REQUEST_STK_SEND_ENVELOPE_COMMAND);
+
+    // Token : we don't care
+    this.readUint32();
+
+    // Data Size, 18 = 2 * (2 + TLV_DEVICE_ID_SIZE(4) + TLV_EVENT_LIST_SIZE(3))
+    do_check_eq(this.readUint32(), 18);
+
+    // BER tag
+    do_check_eq(pduHelper.readHexOctet(), BER_EVENT_DOWNLOAD_TAG);
+
+    // BER length, 7 = TLV_DEVICE_ID_SIZE(4) + TLV_EVENT_LIST_SIZE(3)
+    do_check_eq(pduHelper.readHexOctet(), 7);
+
+    // Device Identities, Type-Length-Value(Source ID-Destination ID)
+    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_DEVICE_ID |
+                                          COMPREHENSIONTLV_FLAG_CR);
+    do_check_eq(pduHelper.readHexOctet(), 2);
+    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_DISPLAY);
+    do_check_eq(pduHelper.readHexOctet(), STK_DEVICE_ID_SIM);
+
+    // Event List, Type-Length-Value
+    do_check_eq(pduHelper.readHexOctet(), COMPREHENSIONTLV_TAG_EVENT_LIST |
+                                          COMPREHENSIONTLV_FLAG_CR);
+    do_check_eq(pduHelper.readHexOctet(), 1);
+    do_check_eq(pduHelper.readHexOctet(), STK_EVENT_TYPE_IDLE_SCREEN_AVAILABLE);
+
+    run_next_test();
+  };
+
+  let event = {
+    eventType: STK_EVENT_TYPE_IDLE_SCREEN_AVAILABLE
+  };
+  worker.RIL.sendStkEventDownload({
+    event: event
+  });
+});
--- a/dom/system/gonk/tests/xpcshell.ini
+++ b/dom/system/gonk/tests/xpcshell.ini
@@ -11,8 +11,9 @@ tail =
 [test_ril_worker_cellbroadcast.js]
 [test_ril_worker_ruim.js]
 [test_ril_worker_cw.js]
 [test_ril_worker_clir.js]
 [test_ril_worker_clip.js]
 [test_ril_worker_ssn.js]
 [test_ril_worker_voiceprivacy.js]
 [test_ril_worker_ecm.js]
+[test_ril_worker_stk.js]