10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2006 The Android Open Source Project
30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License.
60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at
70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software
110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and
140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License.
150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony.cdma.sms;
180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.TelephonyManager;
20115632cc56f813bd21543f8532c763d7d2968046Jake Hambyimport android.test.AndroidTestCase;
21115632cc56f813bd21543f8532c763d7d2968046Jake Hambyimport android.test.suitebuilder.annotation.SmallTest;
220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23115632cc56f813bd21543f8532c763d7d2968046Jake Hambyimport com.android.internal.telephony.GsmAlphabet.TextEncodingDetails;
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.SmsHeader;
250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.cdma.SmsMessage;
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.util.HexDump;
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.ArrayList;
29115632cc56f813bd21543f8532c763d7d2968046Jake Hambyimport java.util.Arrays;
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class CdmaSmsTest extends AndroidTestCase {
32115632cc56f813bd21543f8532c763d7d2968046Jake Hamby
33115632cc56f813bd21543f8532c763d7d2968046Jake Hamby    // CJK ideographs, Hiragana, Katakana, full width letters, Cyrillic, etc.
34115632cc56f813bd21543f8532c763d7d2968046Jake Hamby    private static final String sUnicodeChars = "\u4e00\u4e01\u4e02\u4e03" +
35115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            "\u4e04\u4e05\u4e06\u4e07\u4e08\u4e09\u4e0a\u4e0b\u4e0c\u4e0d" +
36115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            "\u4e0e\u4e0f\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048" +
37115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            "\u30a1\u30a2\u30a3\u30a4\u30a5\u30a6\u30a7\u30a8" +
38115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            "\uff10\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18" +
39115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            "\uff70\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78" +
40115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            "\u0400\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408" +
41115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            "\u00a2\u00a9\u00ae\u2122";
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    // "Hello, world" in Japanese.
4448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    private static final String sHelloWorldJa = "\u3053\u3093\u306b\u3061\u306f\u4e16\u754c";
4548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testCdmaSmsAddrParsing() throws Exception {
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CdmaSmsAddress addr = CdmaSmsAddress.parse("6502531000");
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN);
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF);
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK);
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, 10);
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.origBytes.length, 10);
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] data = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10};
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < data.length; i++) {
560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(addr.origBytes[i], data[i]);
570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr = CdmaSmsAddress.parse("(650) 253-1000");
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN);
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF);
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK);
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, 10);
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.origBytes.length, 10);
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] data2 = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10};
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < data2.length; i++) {
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(addr.origBytes[i], data2[i]);
670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr = CdmaSmsAddress.parse("650.253.1000");
690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN);
700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF);
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK);
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, 10);
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.origBytes.length, 10);
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] data5 = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10};
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < data2.length; i++) {
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(addr.origBytes[i], data5[i]);
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr = CdmaSmsAddress.parse("(+886) 917 222 555");
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.ton, CdmaSmsAddress.TON_INTERNATIONAL_OR_IP);
800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF);
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK);
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, 12);
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.origBytes.length, 12);
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] data3 = {8, 8, 6, 9, 1, 7, 2, 2, 2, 5, 5, 5};
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < data3.length; i++) {
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(addr.origBytes[i], data3[i]);
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr = CdmaSmsAddress.parse("(650) *253-1000 #600");
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] data4 = {6, 5, 10, 11, 2, 5, 3, 1, 10, 10, 10, 12, 6, 10, 10};
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < data4.length; i++) {
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(addr.origBytes[i], data4[i]);
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String input = "x@y.com,a@b.com";
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr = CdmaSmsAddress.parse(input);
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.ton, CdmaSmsAddress.TON_NATIONAL_OR_EMAIL);
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR);
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_DATA_NETWORK);
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, 15);
990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.origBytes.length, 15);
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(new String(addr.origBytes), input);
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr = CdmaSmsAddress.parse("foo bar");
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN);
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR);
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_DATA_NETWORK);
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, 6);
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.origBytes.length, 6);
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(new String(addr.origBytes), "foobar");
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr = CdmaSmsAddress.parse("f\noo\tb   a\rr");
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(new String(addr.origBytes), "foobar");
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.parse("f\u0000oo bar"), null);
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.parse("f\u0007oo bar"), null);
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.parse("f\u0080oo bar"), null);
1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.parse("f\u1ECFboo\u001fbar"), null);
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.parse("f\u0080oo bar"), null);
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserData7bitGsm() throws Exception {
1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu = "00031040900112488ea794e074d69e1b7392c270326cde9e98";
1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu));
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test standard SMS", bearerData.userData.payloadStr);
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserData7bitAscii() throws Exception {
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu = "0003100160010610262d5ab500";
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu));
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("bjjj", bearerData.userData.payloadStr);
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserData7bitAsciiTwo() throws Exception {
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu = "00031001d00109104539b4d052ebb3d0";
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu));
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("SMS Rulz", bearerData.userData.payloadStr);
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserDataIa5() throws Exception {
1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu = "00031002100109184539b4d052ebb3d0";
1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu));
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("SMS Rulz", bearerData.userData.payloadStr);
1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserData7bitAsciiFeedback() throws Exception {
1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "Test standard SMS";
1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncoding = UserData.ENCODING_7BIT_ASCII;
1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncodingSet = true;
1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType);
1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(0, revBearerData.messageId);
1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.hasUserDataHeader);
1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding);
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields);
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "Test \u007f standard \u0000 SMS";
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test   standard   SMS", revBearerData.userData.payloadStr);
1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "Test \n standard \r SMS";
1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "";
1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserData7bitGsmFeedback() throws Exception {
1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "Test standard SMS";
1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET;
1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncodingSet = true;
1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType);
1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(0, revBearerData.messageId);
1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.hasUserDataHeader);
1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding);
1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields);
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "1234567";
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "";
1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "12345678901234567890123456789012345678901234567890" +
2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "12345678901234567890123456789012345678901234567890" +
2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "12345678901234567890123456789012345678901234567890" +
2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "1234567890";
2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "Test \u007f illegal \u0000 SMS chars";
2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test   illegal   SMS chars", revBearerData.userData.payloadStr);
2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "More @ testing\nis great^|^~woohoo";
2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.refNumber = 0xEE;
2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.msgCount = 2;
2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.seqNumber = 2;
2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.isEightBits = true;
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader smsHeader = new SmsHeader();
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        smsHeader.concatRef = concatRef;
2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] encodedHeader = SmsHeader.toByteArray(smsHeader);
2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.userDataHeader = smsHeader;
2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader decodedHeader = revBearerData.userData.userDataHeader;
2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber);
2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount);
2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber);
2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserDataUtf16Feedback() throws Exception {
2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "\u0160u\u1E5B\u0301r\u1ECFg\uD835\uDC1At\u00E9\u4E002\u3042";
2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncoding = UserData.ENCODING_UNICODE_16;
2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncodingSet = true;
2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType);
2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(0, revBearerData.messageId);
2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.hasUserDataHeader);
2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding);
2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields);
2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncoding = UserData.ENCODING_OCTET;
2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncodingSet = false;
2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType);
2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(0, revBearerData.messageId);
2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.hasUserDataHeader);
2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding);
2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields);
2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "1234567";
2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "";
2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testMonolithicOne() throws Exception {
2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu = "0003200010010410168d2002010503060812011101590501c706069706180000000701c108" +
2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "01c00901800a01e00b01030c01c00d01070e05039acc13880f018011020566";
2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu));
2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.messageType, BearerData.MESSAGE_TYPE_SUBMIT);
2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.messageId, 1);
2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.priority, BearerData.PRIORITY_EMERGENCY);
2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.privacy, BearerData.PRIVACY_CONFIDENTIAL);
2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userAckReq, true);
2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.readAckReq, true);
2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deliveryAckReq, true);
2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.reportReq, false);
2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.numberOfMessages, 3);
2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.alert, BearerData.ALERT_HIGH_PRIO);
2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.language, BearerData.LANGUAGE_HEBREW);
2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF);
2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.numberMode,
2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                     CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK);
2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.ton, CdmaSmsAddress.TON_UNKNOWN);
2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.numberPlan, CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN);
2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.numberOfDigits, 7);
2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.address, "3598271");
2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.displayMode, BearerData.DISPLAY_MODE_USER);
2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.depositIndex, 1382);
2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userResponseCode, 5);
2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.year, 2008);
2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.month, 11);
2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.monthDay, 1);
2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.hour, 11);
2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.minute, 1);
2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.second, 59);
2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.validityPeriodAbsolute, null);
2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.validityPeriodRelative, 193);
2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.year, 1997);
3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.month, 5);
3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.monthDay, 18);
3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.hour, 0);
3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.minute, 0);
3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.second, 0);
3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeRelative, 199);
3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.hasUserDataHeader, false);
3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userData.msgEncoding, UserData.ENCODING_7BIT_ASCII);
3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userData.numFields, 2);
3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userData.payloadStr, "hi");
3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testMonolithicTwo() throws Exception {
3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu = "0003200010010410168d200201050306081201110159050192060697061800000007013d0" +
3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "801c00901800a01e00b01030c01c00d01070e05039acc13880f018011020566";
3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu));
3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.messageType, BearerData.MESSAGE_TYPE_SUBMIT);
3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.messageId, 1);
3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.priority, BearerData.PRIORITY_EMERGENCY);
3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.privacy, BearerData.PRIVACY_CONFIDENTIAL);
3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userAckReq, true);
3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.readAckReq, true);
3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deliveryAckReq, true);
3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.reportReq, false);
3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.numberOfMessages, 3);
3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.alert, BearerData.ALERT_HIGH_PRIO);
3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.language, BearerData.LANGUAGE_HEBREW);
3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF);
3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.numberMode,
3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                     CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK);
3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.ton, CdmaSmsAddress.TON_UNKNOWN);
3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.numberPlan, CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN);
3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.numberOfDigits, 7);
3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.address, "3598271");
3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.displayMode, BearerData.DISPLAY_MODE_USER);
3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.depositIndex, 1382);
3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userResponseCode, 5);
3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.year, 2008);
3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.month, 11);
3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.monthDay, 1);
3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.hour, 11);
3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.minute, 1);
3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.second, 59);
3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.validityPeriodAbsolute, null);
3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.validityPeriodRelative, 61);
3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.year, 1997);
3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.month, 5);
3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.monthDay, 18);
3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.hour, 0);
3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.minute, 0);
3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.second, 0);
3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeRelative, 146);
3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.hasUserDataHeader, false);
3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userData.msgEncoding, UserData.ENCODING_7BIT_ASCII);
3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userData.numFields, 2);
3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userData.payloadStr, "hi");
3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserDataHeaderConcatRefFeedback() throws Exception {
3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 55;
3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.refNumber = 0xEE;
3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.msgCount = 2;
3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.seqNumber = 2;
3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.isEightBits = true;
3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader smsHeader = new SmsHeader();
3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        smsHeader.concatRef = concatRef;
3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] encodedHeader = SmsHeader.toByteArray(smsHeader);
3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader);
3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber);
3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount);
3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber);
3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits);
3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs, null);
3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "User Data Header (UDH) feedback test";
3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.userDataHeader = smsHeader;
3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] encodedSms = BearerData.encode(bearerData);
3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        decodedHeader = revBearerData.userData.userDataHeader;
3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber);
3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount);
3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber);
3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits);
3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs, null);
3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserDataHeaderIllegalConcatRef() throws Exception {
3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 55;
3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.refNumber = 0x10;
3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.msgCount = 0;
4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.seqNumber = 2;
4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.isEightBits = true;
4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader smsHeader = new SmsHeader();
4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        smsHeader.concatRef = concatRef;
4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] encodedHeader = SmsHeader.toByteArray(smsHeader);
4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader);
4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef, null);
4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.isEightBits = false;
4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedHeader = SmsHeader.toByteArray(smsHeader);
4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        decodedHeader = SmsHeader.fromByteArray(encodedHeader);
4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef, null);
4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.msgCount = 1;
4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.seqNumber = 2;
4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedHeader = SmsHeader.toByteArray(smsHeader);
4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        decodedHeader = SmsHeader.fromByteArray(encodedHeader);
4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef, null);
4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.msgCount = 1;
4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.seqNumber = 0;
4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedHeader = SmsHeader.toByteArray(smsHeader);
4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        decodedHeader = SmsHeader.fromByteArray(encodedHeader);
4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef, null);
4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.msgCount = 2;
4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.seqNumber = 1;
4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedHeader = SmsHeader.toByteArray(smsHeader);
4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        decodedHeader = SmsHeader.fromByteArray(encodedHeader);
4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.msgCount, 2);
4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.seqNumber, 1);
4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserDataHeaderMixedFeedback() throws Exception {
4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 42;
4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.refNumber = 0x34;
4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.msgCount = 5;
4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.seqNumber = 2;
4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.isEightBits = false;
4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader.PortAddrs portAddrs = new SmsHeader.PortAddrs();
4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        portAddrs.destPort = 88;
4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        portAddrs.origPort = 66;
4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        portAddrs.areEightBits = false;
4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader smsHeader = new SmsHeader();
4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        smsHeader.concatRef = concatRef;
4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        smsHeader.portAddrs = portAddrs;
4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] encodedHeader = SmsHeader.toByteArray(smsHeader);
4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader);
4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber);
4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount);
4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber);
4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits);
4520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs.destPort, portAddrs.destPort);
4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs.origPort, portAddrs.origPort);
4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs.areEightBits, portAddrs.areEightBits);
4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "User Data Header (UDH) feedback test";
4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.userDataHeader = smsHeader;
4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] encodedSms = BearerData.encode(bearerData);
4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
4610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        decodedHeader = revBearerData.userData.userDataHeader;
4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber);
4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount);
4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber);
4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits);
4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs.destPort, portAddrs.destPort);
4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs.origPort, portAddrs.origPort);
4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs.areEightBits, portAddrs.areEightBits);
4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testReplyOption() throws Exception {
4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87450080a0180";
4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test Acknowledgement 1", bd1.userData.payloadStr);
4760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, bd1.userAckReq);
4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd1.deliveryAckReq);
4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd1.readAckReq);
4790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd1.reportReq);
4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu2 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87490080a0140";
4810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test Acknowledgement 2", bd2.userData.payloadStr);
4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd2.userAckReq);
4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, bd2.deliveryAckReq);
4850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd2.readAckReq);
4860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd2.reportReq);
4870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu3 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d874d0080a0120";
4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3));
4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test Acknowledgement 3", bd3.userData.payloadStr);
4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd3.userAckReq);
4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd3.deliveryAckReq);
4920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, bd3.readAckReq);
4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd3.reportReq);
4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu4 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87510080a0110";
4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4));
4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test Acknowledgement 4", bd4.userData.payloadStr);
4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd4.userAckReq);
4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd4.deliveryAckReq);
4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd4.readAckReq);
5000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, bd4.reportReq);
5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testReplyOptionFeedback() throws Exception {
5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
5060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "test reply option";
5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userAckReq = true;
5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
5140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, revBearerData.userAckReq);
5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.deliveryAckReq);
5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.readAckReq);
5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.reportReq);
5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userAckReq = false;
5200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.deliveryAckReq = true;
5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.userAckReq);
5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, revBearerData.deliveryAckReq);
5250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.readAckReq);
5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.reportReq);
5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.deliveryAckReq = false;
5280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.readAckReq = true;
5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.userAckReq);
5320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.deliveryAckReq);
5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, revBearerData.readAckReq);
5340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.reportReq);
5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.readAckReq = false;
5360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.reportReq = true;
5370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
5380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.userAckReq);
5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.deliveryAckReq);
5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.readAckReq);
5420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, revBearerData.reportReq);
5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
5460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testNumberOfMessages() throws Exception {
5470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Note that the message text below does not properly reflect
5480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // the message count.  The author of these messages was
5490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // apparently unaware that the values are bcd encoded, and the
5500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // values being tested against (not the ones in the message
5510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // text) are actually correct.
5520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "000310409001124896a794e07595f69f199540ea759a0dc8e00b0163";
5530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
5540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test Voice mail 99", bd1.userData.payloadStr);
5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(63, bd1.numberOfMessages);
5560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu2 = "00031040900113489ea794e07595f69f199540ea759a0988c0600b0164";
5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test Voice mail 100", bd2.userData.payloadStr);
5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(64, bd2.numberOfMessages);
5600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testCallbackNum() throws Exception {
5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "00031040900112488ea794e070d436cb638bc5e035ce2f97900e06910431323334";
5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test Callback nbr", bd1.userData.payloadStr);
5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR, bd1.callbackNumber.digitMode);
5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.TON_INTERNATIONAL_OR_IP, bd1.callbackNumber.ton);
5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK, bd1.callbackNumber.numberMode);
5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.NUMBERING_PLAN_ISDN_TELEPHONY, bd1.callbackNumber.numberPlan);
5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("1234", bd1.callbackNumber.address);
5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testCallbackNumDtmf() throws Exception {
5760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "00031002300109104539b4d052ebb3d00e07052d4c90a55080";
5770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("SMS Rulz", bd1.userData.payloadStr);
5790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF, bd1.callbackNumber.digitMode);
5800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.TON_UNKNOWN, bd1.callbackNumber.ton);
5810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK, bd1.callbackNumber.numberMode);
5820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN, bd1.callbackNumber.numberPlan);
5830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("5099214001", bd1.callbackNumber.address);
5840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testCallbackNumFeedback() throws Exception {
5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
5900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
5930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "test callback number";
5940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
5950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CdmaSmsAddress addr = new CdmaSmsAddress();
5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.digitMode = CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR;
5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.ton = CdmaSmsAddress.TON_NATIONAL_OR_EMAIL;
5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.numberMode = CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK;
5990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.numberPlan = CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN;
6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.address = "8005551212";
6010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.numberOfDigits = (byte)addr.address.length();
6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.callbackNumber = addr;
6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CdmaSmsAddress revAddr = revBearerData.callbackNumber;
6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, revAddr.digitMode);
6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.ton, revAddr.ton);
6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberMode, revAddr.numberMode);
6090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberPlan, revAddr.numberPlan);
6100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, revAddr.numberOfDigits);
6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.address, revAddr.address);
6120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.address = "8*55#1012";
6130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.numberOfDigits = (byte)addr.address.length();
6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.digitMode = CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF;
6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
6170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revAddr = revBearerData.callbackNumber;
6180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, revAddr.digitMode);
6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, revAddr.numberOfDigits);
6200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.address, revAddr.address);
6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testPrivacyIndicator() throws Exception {
6250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "0003104090010c485f4194dfea34becf61b840090140";
6260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
6270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.privacy, BearerData.PRIVACY_RESTRICTED);
6280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu2 = "0003104090010c485f4194dfea34becf61b840090180";
6290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
6300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.privacy, BearerData.PRIVACY_CONFIDENTIAL);
6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu3 = "0003104090010c485f4194dfea34becf61b8400901c0";
6320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3));
6330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd3.privacy, BearerData.PRIVACY_SECRET);
6340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
6370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testPrivacyIndicatorFeedback() throws Exception {
6380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
6400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "test privacy indicator";
6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.privacy = BearerData.PRIVACY_SECRET;
6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.privacyIndicatorSet = true;
6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.userData.payloadStr, userData.payloadStr);
6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.privacyIndicatorSet, true);
6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.privacy, BearerData.PRIVACY_SECRET);
6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.privacy = BearerData.PRIVACY_RESTRICTED;
6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
6540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
6550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.privacy, BearerData.PRIVACY_RESTRICTED);
6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
6590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testMsgDeliveryAlert() throws Exception {
6600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "0003104090010d4866a794e07055965b91d040300c0100";
6610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.alert, 0);
6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.userData.payloadStr, "Test Alert 0");
6640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu2 = "0003104090010d4866a794e07055965b91d140300c0140";
6650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
6660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.alert, 1);
6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.userData.payloadStr, "Test Alert 1");
6680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu3 = "0003104090010d4866a794e07055965b91d240300c0180";
6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3));
6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd3.alert, 2);
6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd3.userData.payloadStr, "Test Alert 2");
6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu4 = "0003104090010d4866a794e07055965b91d340300c01c0";
6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4));
6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd4.alert, 3);
6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd4.userData.payloadStr, "Test Alert 3");
6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu5 = "00031000000126114F4CBCFA20DB979F3C39F2A0C9976" +
6770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            "69ED979794187665E5D1028EFA7A6840E1062D3D39A900C028000";
6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd5 = BearerData.decode(HexDump.hexStringToByteArray(pdu5));
6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd5.alert, BearerData.ALERT_MEDIUM_PRIO);
6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd5.userData.payloadStr, "test message delivery alert (with 8 bits)");
6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu6 = "00031000000126114F4CBCFA20DB979F3C39F2A0C9976" +
6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            "69ED979794187665E5D1028EFA7A6840C1062D3D39A900C00";
6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd6 = BearerData.decode(HexDump.hexStringToByteArray(pdu6));
6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd6.userData.payloadStr, "test message delivery alert (with 0 bits)");
6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd6.alertIndicatorSet, false);
6860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
6890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testMiscParams() throws Exception {
6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "00031002400109104539b4d052ebb3d00c0180";
6910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.alert, BearerData.ALERT_MEDIUM_PRIO);
6930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.userData.payloadStr, "SMS Rulz");
6940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu2 = "00031002500109104539b4d052ebb3d00801800901c0";
6950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
6960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.priority, BearerData.PRIORITY_URGENT);
6970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.privacy, BearerData.PRIVACY_SECRET);
6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.userData.payloadStr, "SMS Rulz");
6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu3 = "00031002600109104539b4d052ebb3d00901400c01c0";
7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3));
7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd3.privacy, BearerData.PRIVACY_RESTRICTED);
7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd3.alert, BearerData.ALERT_HIGH_PRIO);
7030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd3.userData.payloadStr, "SMS Rulz");
7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu4 = "00031002700109104539b4d052ebb3d00f0105";
7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4));
7060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd4.displayMode, BearerData.DISPLAY_MODE_IMMEDIATE);
7070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd4.userData.payloadStr, "SMS Rulz");
7080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville   @SmallTest
7100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testMsgDeliveryAlertFeedback() throws Exception {
7110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
7130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
7140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
7150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
7160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "test message delivery alert";
7170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
7180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.alert = BearerData.ALERT_MEDIUM_PRIO;
7190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.alertIndicatorSet = true;
7200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
7210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
7220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.userData.payloadStr, userData.payloadStr);
7230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.alertIndicatorSet, true);
7240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.alert, bearerData.alert);
7250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.alert = BearerData.ALERT_HIGH_PRIO;
7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
7280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.userData.payloadStr, userData.payloadStr);
7290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.alertIndicatorSet, true);
7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.alert, bearerData.alert);
7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
7340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testLanguageIndicator() throws Exception {
7350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "0003104090011748bea794e0731436ef3bd7c2e0352eef27a1c263fe58080d0101";
7360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
7370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.userData.payloadStr, "Test Language indicator");
7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.language, BearerData.LANGUAGE_ENGLISH);
7390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu2 = "0003104090011748bea794e0731436ef3bd7c2e0352eef27a1c263fe58080d0106";
7400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
7410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.userData.payloadStr, "Test Language indicator");
7420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.language, BearerData.LANGUAGE_CHINESE);
7430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
7460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testLanguageIndicatorFeedback() throws Exception {
7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
7490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
7500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
7510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
7520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "test language indicator";
7530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
7540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.language = BearerData.LANGUAGE_ENGLISH;
7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.languageIndicatorSet = true;
7560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
7570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.userData.payloadStr, userData.payloadStr);
7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.languageIndicatorSet, true);
7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.language, bearerData.language);
7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.language = BearerData.LANGUAGE_KOREAN;
7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
7630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
7640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.userData.payloadStr, userData.payloadStr);
7650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.languageIndicatorSet, true);
7660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.language, bearerData.language);
7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testDisplayMode() throws Exception {
7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "0003104090010c485f4194dfea34becf61b8400f0100";
7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
7730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.displayMode, BearerData.DISPLAY_MODE_IMMEDIATE);
7740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu2 = "0003104090010c485f4194dfea34becf61b8400f0140";
7750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
7760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.displayMode, BearerData.DISPLAY_MODE_DEFAULT);
7770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu3 = "0003104090010c485f4194dfea34becf61b8400f0180";
7780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3));
7790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd3.displayMode, BearerData.DISPLAY_MODE_USER);
7800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
7830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testDisplayModeFeedback() throws Exception {
7840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
7880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
7890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "test display mode";
7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
7910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.displayMode = BearerData.DISPLAY_MODE_IMMEDIATE;
7920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.displayModeSet = true;
7930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
7940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
7950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.userData.payloadStr, userData.payloadStr);
7960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.displayModeSet, true);
7970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.displayMode, bearerData.displayMode);
7980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.displayMode = BearerData.DISPLAY_MODE_USER;
7990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
8000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
8010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.userData.payloadStr, userData.payloadStr);
8020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.displayModeSet, true);
8030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.displayMode, bearerData.displayMode);
8040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
8070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testIs91() throws Exception {
8080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "000320001001070c2039acc13880";
8090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.callbackNumber.address, "3598271");
8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu4 = "000320001001080c283c314724b34e";
8120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4));
8130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd4.userData.payloadStr, "ABCDEFG");
8140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
8170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserDataHeaderWithEightCharMsg() throws Exception {
81848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        SmsHeader smsHeader = getConcatUserDataHeader(2, 2);
81948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        encodeDecodeAssertEquals("01234567", smsHeader, -1);
82048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        SmsHeader smsHeader2 = getOddLengthUserDataHeader();
82148a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        encodeDecodeAssertEquals("01234567", smsHeader2, -1);
822115632cc56f813bd21543f8532c763d7d2968046Jake Hamby    }
823115632cc56f813bd21543f8532c763d7d2968046Jake Hamby
82448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    @SmallTest
82548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    public void testShiftJis() throws Exception {
82648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        encodeDecodeAssertEquals(sHelloWorldJa, null, UserData.ENCODING_UNICODE_16);
82748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        encodeDecodeAssertEquals(sHelloWorldJa, null, UserData.ENCODING_SHIFT_JIS);
82848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    }
82948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby
83048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    @SmallTest
83148a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    public void testIgnoreReservedSubparam() throws Exception {
8320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
8330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
83448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        bearerData.messageId = 1234;
83548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        UserData userData = new UserData();
83648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        userData.payloadStr = sHelloWorldJa;
83748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        bearerData.userData = userData;
83848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        byte[] encodedSms = BearerData.encode(bearerData);
83948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        BearerData revBearerData = BearerData.decode(encodedSms);
84048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
84148a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby
84248a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        byte[] smsWithValidSubparam = Arrays.copyOf(encodedSms, encodedSms.length + 5);
84348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        smsWithValidSubparam[encodedSms.length] = 0x18; // BearerData.SUBPARAM_ID_LAST_DEFINED + 1
84448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        smsWithValidSubparam[encodedSms.length + 1] = 3;
84548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        smsWithValidSubparam[encodedSms.length + 2] = 0x12;
84648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        smsWithValidSubparam[encodedSms.length + 3] = 0x34;
84748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        smsWithValidSubparam[encodedSms.length + 4] = 0x56;
84848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        revBearerData = BearerData.decode(smsWithValidSubparam);
84948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
85048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby
85148a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        smsWithValidSubparam = Arrays.copyOf(encodedSms, encodedSms.length + 2);
85248a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        smsWithValidSubparam[encodedSms.length] = 0x18;
85348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        smsWithValidSubparam[encodedSms.length + 1] = 0;
85448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        revBearerData = BearerData.decode(smsWithValidSubparam);
85548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
85648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby
85748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        byte[] smsWithInvalidSubparam = Arrays.copyOf(encodedSms, encodedSms.length + 2);
85848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        smsWithInvalidSubparam[encodedSms.length] = 0x18;
85948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        smsWithInvalidSubparam[encodedSms.length + 1] = (byte) 1;
86048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        revBearerData = BearerData.decode(smsWithInvalidSubparam);
86148a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        assertNull(revBearerData);
86248a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    }
86348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby
86448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    // Return a user data header for a concatenated message
86548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    private static SmsHeader getConcatUserDataHeader(int index, int total) {
8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader smsHeader = new SmsHeader();
86748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
86848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        concatRef.refNumber = 0xEE;
86948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        concatRef.msgCount = total;
87048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        concatRef.seqNumber = index;
87148a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        concatRef.isEightBits = true;
87248a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        smsHeader.concatRef = concatRef;
87348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        return smsHeader;
87448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    }
87548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby
87648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    // Return a user data header of odd length to verify correct UTF-16 header padding
87748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    private static SmsHeader getOddLengthUserDataHeader() {
87848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        SmsHeader smsHeader = new SmsHeader();
87948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        SmsHeader.MiscElt miscElt = new SmsHeader.MiscElt();
88048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        miscElt.id = 0x27;  // reserved for future use; ignored on decode
88148a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        miscElt.data = new byte[]{0x12, 0x34};
88248a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        smsHeader.miscEltList.add(miscElt);
88348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        return smsHeader;
88448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    }
88548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby
88648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby    private static void encodeDecodeAssertEquals(String payload, SmsHeader smsHeader,
88748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby            int msgEncoding) throws Exception {
88848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        BearerData bearerData = new BearerData();
88948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
89048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        bearerData.messageId = 55;
8910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
892115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        userData.payloadStr = payload;
89348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        userData.userDataHeader = smsHeader;    // may be null
89448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        if (msgEncoding != -1) {
89548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby            userData.msgEncoding = msgEncoding;
89648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby            userData.msgEncodingSet = true;
89748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        }
8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
8990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] encodedSms = BearerData.encode(bearerData);
9000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
9010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
90248a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby        if (smsHeader != null) {
90348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby            assertTrue(revBearerData.hasUserDataHeader);
90448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby            byte[] encodeHeader = SmsHeader.toByteArray(smsHeader);
90548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby            byte[] decodeHeader = SmsHeader.toByteArray(revBearerData.userData.userDataHeader);
90648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby            assertTrue(Arrays.equals(encodeHeader, decodeHeader));
907115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        } else {
90848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby            assertFalse(revBearerData.hasUserDataHeader);
909115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        }
9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
9130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testFragmentText() throws Exception {
9140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean isCdmaPhone = (TelephonyManager.getDefault().getPhoneType() ==
9150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                TelephonyManager.PHONE_TYPE_CDMA);
9160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Valid 160 character ASCII text.
9170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String text1 = "123456789012345678901234567890123456789012345678901234567890" +
9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "1234567890123456789012345678901234567890123456789012345678901234567890" +
9190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "12345678901234567890123456789[";
9203ce96a061c2c6e24f4ff3bd237e18c29fc0c0108Amit Mahajan        TextEncodingDetails ted = SmsMessage.calculateLength(text1, false, true);
9210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(ted.msgCount, 1);
9220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(ted.codeUnitCount, 160);
9230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(ted.codeUnitSize, 1);
9240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (isCdmaPhone) {
9250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text1);
9260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(fragments.size(), 1);
9270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
9280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /*
9300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           This is not a valid test: we will never encode a single-segment
9310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           EMS message.  Leaving this here, since we may try to support
9320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           this in the future.
9330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Valid 160 character GSM text -- the last character is
9350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // non-ASCII, and so this will currently generate a singleton
9360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // EMS message, which is not necessarily supported by Verizon.
9370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String text2 = "123456789012345678901234567890123456789012345678901234567890" +
9380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "1234567890123456789012345678901234567890123456789012345678901234567890" +
9390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "12345678901234567890123456789\u00a3";  // Trailing pound-currency sign.
9400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ted = SmsMessage.calculateLength(text2, false);
9410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(ted.msgCount, 1);
9420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(ted.codeUnitCount, 160);
9430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(ted.codeUnitSize, 1);
9440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (isCdmaPhone) {
9450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text2);
9460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(fragments.size(), 1);
9470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
9480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        */
9490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // *IF* we supported single-segment EMS, this text would result in a
9510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // single fragment with 7-bit encoding. But we don't, so this text
9520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // results in three fragments of 16-bit encoding.
9530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String text2 = "123456789012345678901234567890123456789012345678901234567890" +
9540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "1234567890123456789012345678901234567890123456789012345678901234567890" +
9550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "12345678901234567890123456789\u00a3";  // Trailing pound-currency sign.
9563ce96a061c2c6e24f4ff3bd237e18c29fc0c0108Amit Mahajan        ted = SmsMessage.calculateLength(text2, false, true);
9570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(3, ted.msgCount);
9580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(160, ted.codeUnitCount);
9590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(3, ted.codeUnitSize);
9600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (isCdmaPhone) {
9610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text2);
9620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(3, fragments.size());
963115632cc56f813bd21543f8532c763d7d2968046Jake Hamby
964115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            for (int i = 0; i < 3; i++) {
96548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby                SmsHeader header = getConcatUserDataHeader(i + 1, 3);
96648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby                SmsHeader header2 = getOddLengthUserDataHeader();
96748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby                encodeDecodeAssertEquals(fragments.get(i), header, -1);
96848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby                encodeDecodeAssertEquals(fragments.get(i), header2, -1);
969115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            }
9700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
9710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
972115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        // Test case for multi-part UTF-16 message.
973115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        String text3 = sUnicodeChars + sUnicodeChars + sUnicodeChars;
9743ce96a061c2c6e24f4ff3bd237e18c29fc0c0108Amit Mahajan        ted = SmsMessage.calculateLength(text3, false, true);
975115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        assertEquals(3, ted.msgCount);
976115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        assertEquals(189, ted.codeUnitCount);
977115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        assertEquals(3, ted.codeUnitSize);
978115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        if (isCdmaPhone) {
979115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text3);
980115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            assertEquals(3, fragments.size());
981115632cc56f813bd21543f8532c763d7d2968046Jake Hamby
982115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            for (int i = 0; i < 3; i++) {
98348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby                SmsHeader header = getConcatUserDataHeader(i + 1, 3);
98448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby                SmsHeader header2 = getOddLengthUserDataHeader();
98548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby                encodeDecodeAssertEquals(fragments.get(i), header, -1);
98648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby                encodeDecodeAssertEquals(fragments.get(i), header2, -1);
987115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            }
988115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        }
9890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
991