dom/mobilemessage/tests/marionette/test_mt_sms_concatenation.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/mobilemessage/tests/marionette/test_mt_sms_concatenation.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,127 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */
     1.6 +
     1.7 +MARIONETTE_TIMEOUT = 60000;
     1.8 +MARIONETTE_HEAD_JS = 'head.js';
     1.9 +
    1.10 +const PDU_SMSC_NONE = "00"; // no SMSC Address
    1.11 +
    1.12 +const PDU_FIRST_OCTET = "40"; // RP:no, UDHI:yes, SRI:no, MMS:no, MTI:SMS-DELIVER
    1.13 +
    1.14 +const PDU_SENDER = "0A912143658709"; // +1234567890
    1.15 +const SENDER = "+1234567890";
    1.16 +
    1.17 +const PDU_PID_NORMAL = "00";
    1.18 +
    1.19 +const PDU_DCS_NORMAL_UCS2 = "08";
    1.20 +const PDU_DCS_CLASS0_UCS2 = "18";
    1.21 +const PDU_DCS_NORMAL_8BIT = "04";
    1.22 +const PDU_DCS_CLASS0_8BIT = "14";
    1.23 +
    1.24 +const PDU_TIMESTAMP = "00101000000000"; // 2000/01/01
    1.25 +
    1.26 +function byteValueToHexString(aValue) {
    1.27 +  let str = Number(aValue).toString(16).toUpperCase();
    1.28 +  return str.length == 1 ? "0" + str : str;
    1.29 +}
    1.30 +
    1.31 +let ref_num = 0;
    1.32 +function buildTextPdus(aDcs) {
    1.33 +  ref_num++;
    1.34 +
    1.35 +  let IEI_CONCATE_1 = "0003" + byteValueToHexString(ref_num) + "0301";
    1.36 +  let IEI_CONCATE_2 = "0003" + byteValueToHexString(ref_num) + "0302";
    1.37 +  let IEI_CONCATE_3 = "0003" + byteValueToHexString(ref_num) + "0303";
    1.38 +  let PDU_UDL = "08"; // UDHL(1) + UDH(5) + UCS2 Char (2)
    1.39 +  let PDU_UDHL = "05";
    1.40 +
    1.41 +  let PDU_UD_A = "0041"; // "A"
    1.42 +  let PDU_UD_B = "0042"; // "B"
    1.43 +  let PDU_UD_C = "0043"; // "C"
    1.44 +
    1.45 +  let PDU_COMMON = PDU_SMSC_NONE + PDU_FIRST_OCTET + PDU_SENDER +
    1.46 +    PDU_PID_NORMAL + aDcs + PDU_TIMESTAMP + PDU_UDL + PDU_UDHL;
    1.47 +
    1.48 +  return [
    1.49 +    PDU_COMMON + IEI_CONCATE_1 + PDU_UD_A,
    1.50 +    PDU_COMMON + IEI_CONCATE_2 + PDU_UD_B,
    1.51 +    PDU_COMMON + IEI_CONCATE_3 + PDU_UD_C
    1.52 +  ];
    1.53 +}
    1.54 +
    1.55 +function buildBinaryPdus(aDcs) {
    1.56 +  ref_num++;
    1.57 +  let IEI_PORT = "05040B8423F0";
    1.58 +
    1.59 +  let PDU_DATA1 = "C106316170706C69636174696F6E2F76" +
    1.60 +                  "6E642E7761702E6D6D732D6D65737361" +
    1.61 +                  "676500B131302E382E3133302E313800" +
    1.62 +                  "AF84B4818C82986B4430595538595347" +
    1.63 +                  "77464E446741416B4876736C58303141" +
    1.64 +                  "41414141414141008D90890380310096" +
    1.65 +                  "05EA4D4D53008A808E02024188058103" +
    1.66 +                  "015F9083687474703A2F2F6D6D732E65";
    1.67 +
    1.68 +  let PDU_DATA2 = "6D6F6D652E6E65743A383030322F6B44" +
    1.69 +                  "3059553859534777464E446741416B48" +
    1.70 +                  "76736C583031414141414141414100";
    1.71 +
    1.72 +  let PDU_COMMON = PDU_SMSC_NONE + PDU_FIRST_OCTET + PDU_SENDER +
    1.73 +    PDU_PID_NORMAL + aDcs + PDU_TIMESTAMP;
    1.74 +
    1.75 +  function construstBinaryUserData(aBinaryData, aSeqNum) {
    1.76 +    let ieiConcat = "0003" + byteValueToHexString(ref_num) + "02" +
    1.77 +                    byteValueToHexString(aSeqNum);
    1.78 +
    1.79 +    let udh = IEI_PORT + ieiConcat;
    1.80 +    let udhl = byteValueToHexString(udh.length / 2);
    1.81 +    let ud = udhl + udh + aBinaryData;
    1.82 +    let udl = byteValueToHexString(ud.length / 2);
    1.83 +
    1.84 +    return udl + ud;
    1.85 +  }
    1.86 +
    1.87 +  return [
    1.88 +    PDU_COMMON + construstBinaryUserData(PDU_DATA1, 1),
    1.89 +    PDU_COMMON + construstBinaryUserData(PDU_DATA2, 2)
    1.90 +  ];
    1.91 +}
    1.92 +
    1.93 +function verifyTextMessage(aMessage, aMessageClass) {
    1.94 +  is(aMessage.messageClass, aMessageClass, "SmsMessage class");
    1.95 +  is(aMessage.sender, SENDER, "SmsMessage sender");
    1.96 +  is(aMessage.body, "ABC", "SmsMessage body");
    1.97 +}
    1.98 +
    1.99 +function verifyBinaryMessage(aMessage) {
   1.100 +  is(aMessage.type, "mms", "MmsMessage type");
   1.101 +  is(aMessage.delivery, "not-downloaded", "MmsMessage delivery");
   1.102 +
   1.103 +  // remove duplicated M-Notification.ind for next test.
   1.104 +  return deleteMessagesById([aMessage.id]);
   1.105 +}
   1.106 +
   1.107 +function testText(aDcs, aClass) {
   1.108 +  log("testText(): aDcs = " + aDcs + ", aClass = " + aClass);
   1.109 +  return sendMultipleRawSmsToEmulatorAndWait(buildTextPdus(aDcs))
   1.110 +    .then((results) => verifyTextMessage(results[0].message, aClass));
   1.111 +}
   1.112 +
   1.113 +function testBinary(aDcs) {
   1.114 +  log("testBinary(): aDcs = " + aDcs);
   1.115 +  return sendMultipleRawSmsToEmulatorAndWait(buildBinaryPdus(aDcs))
   1.116 +    .then((results) => verifyBinaryMessage(results[0].message));
   1.117 +}
   1.118 +
   1.119 +SpecialPowers.pushPrefEnv(
   1.120 +  {"set": [["dom.mms.retrieval_mode", "manual"]]},
   1.121 +  function startTest() {
   1.122 +    startTestCommon(function testCaseMain() {
   1.123 +      return Promise.resolve()
   1.124 +        .then(() => testText(PDU_DCS_NORMAL_UCS2, "normal"))
   1.125 +        .then(() => testText(PDU_DCS_CLASS0_UCS2, "class-0"))
   1.126 +        .then(() => testBinary(PDU_DCS_NORMAL_8BIT))
   1.127 +        .then(() => testBinary(PDU_DCS_CLASS0_8BIT));
   1.128 +    });
   1.129 +  }
   1.130 +);

mercurial