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
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testCdmaSmsAddrParsing() throws Exception {
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CdmaSmsAddress addr = CdmaSmsAddress.parse("6502531000");
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN);
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF);
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK);
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, 10);
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.origBytes.length, 10);
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] data = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10};
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < data.length; i++) {
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(addr.origBytes[i], data[i]);
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr = CdmaSmsAddress.parse("(650) 253-1000");
560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN);
570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF);
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK);
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, 10);
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.origBytes.length, 10);
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] data2 = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10};
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < data2.length; i++) {
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(addr.origBytes[i], data2[i]);
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr = CdmaSmsAddress.parse("650.253.1000");
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN);
670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF);
680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK);
690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, 10);
700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.origBytes.length, 10);
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] data5 = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10};
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < data2.length; i++) {
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(addr.origBytes[i], data5[i]);
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr = CdmaSmsAddress.parse("(+886) 917 222 555");
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.ton, CdmaSmsAddress.TON_INTERNATIONAL_OR_IP);
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF);
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK);
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, 12);
800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.origBytes.length, 12);
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] data3 = {8, 8, 6, 9, 1, 7, 2, 2, 2, 5, 5, 5};
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < data3.length; i++) {
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(addr.origBytes[i], data3[i]);
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr = CdmaSmsAddress.parse("(650) *253-1000 #600");
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] data4 = {6, 5, 10, 11, 2, 5, 3, 1, 10, 10, 10, 12, 6, 10, 10};
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < data4.length; i++) {
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(addr.origBytes[i], data4[i]);
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String input = "x@y.com,a@b.com";
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr = CdmaSmsAddress.parse(input);
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.ton, CdmaSmsAddress.TON_NATIONAL_OR_EMAIL);
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR);
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_DATA_NETWORK);
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, 15);
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.origBytes.length, 15);
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(new String(addr.origBytes), input);
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr = CdmaSmsAddress.parse("foo bar");
990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN);
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR);
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_DATA_NETWORK);
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, 6);
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.origBytes.length, 6);
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(new String(addr.origBytes), "foobar");
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr = CdmaSmsAddress.parse("f\noo\tb   a\rr");
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(new String(addr.origBytes), "foobar");
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.parse("f\u0000oo bar"), null);
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.parse("f\u0007oo bar"), null);
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.parse("f\u0080oo bar"), null);
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.parse("f\u1ECFboo\u001fbar"), null);
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.parse("f\u0080oo bar"), null);
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserData7bitGsm() throws Exception {
1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu = "00031040900112488ea794e074d69e1b7392c270326cde9e98";
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu));
1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test standard SMS", bearerData.userData.payloadStr);
1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserData7bitAscii() throws Exception {
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu = "0003100160010610262d5ab500";
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu));
1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("bjjj", bearerData.userData.payloadStr);
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserData7bitAsciiTwo() throws Exception {
1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu = "00031001d00109104539b4d052ebb3d0";
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu));
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("SMS Rulz", bearerData.userData.payloadStr);
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserDataIa5() throws Exception {
1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu = "00031002100109184539b4d052ebb3d0";
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu));
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("SMS Rulz", bearerData.userData.payloadStr);
1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserData7bitAsciiFeedback() throws Exception {
1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "Test standard SMS";
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncoding = UserData.ENCODING_7BIT_ASCII;
1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncodingSet = true;
1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType);
1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(0, revBearerData.messageId);
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.hasUserDataHeader);
1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding);
1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields);
1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "Test \u007f standard \u0000 SMS";
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test   standard   SMS", revBearerData.userData.payloadStr);
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "Test \n standard \r SMS";
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "";
1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserData7bitGsmFeedback() throws Exception {
1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "Test standard SMS";
1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET;
1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncodingSet = true;
1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType);
1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(0, revBearerData.messageId);
1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.hasUserDataHeader);
1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding);
1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields);
1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "1234567";
1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "";
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "12345678901234567890123456789012345678901234567890" +
1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "12345678901234567890123456789012345678901234567890" +
1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "12345678901234567890123456789012345678901234567890" +
2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "1234567890";
2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "Test \u007f illegal \u0000 SMS chars";
2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test   illegal   SMS chars", revBearerData.userData.payloadStr);
2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "More @ testing\nis great^|^~woohoo";
2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.refNumber = 0xEE;
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.msgCount = 2;
2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.seqNumber = 2;
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.isEightBits = true;
2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader smsHeader = new SmsHeader();
2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        smsHeader.concatRef = concatRef;
2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] encodedHeader = SmsHeader.toByteArray(smsHeader);
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.userDataHeader = smsHeader;
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader decodedHeader = revBearerData.userData.userDataHeader;
2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber);
2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount);
2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber);
2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserDataUtf16Feedback() throws Exception {
2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "\u0160u\u1E5B\u0301r\u1ECFg\uD835\uDC1At\u00E9\u4E002\u3042";
2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncoding = UserData.ENCODING_UNICODE_16;
2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncodingSet = true;
2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType);
2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(0, revBearerData.messageId);
2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.hasUserDataHeader);
2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding);
2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields);
2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncoding = UserData.ENCODING_OCTET;
2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.msgEncodingSet = false;
2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType);
2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(0, revBearerData.messageId);
2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.hasUserDataHeader);
2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding);
2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields);
2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "1234567";
2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "";
2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(BearerData.encode(bearerData));
2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testMonolithicOne() throws Exception {
2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu = "0003200010010410168d2002010503060812011101590501c706069706180000000701c108" +
2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "01c00901800a01e00b01030c01c00d01070e05039acc13880f018011020566";
2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu));
2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.messageType, BearerData.MESSAGE_TYPE_SUBMIT);
2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.messageId, 1);
2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.priority, BearerData.PRIORITY_EMERGENCY);
2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.privacy, BearerData.PRIVACY_CONFIDENTIAL);
2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userAckReq, true);
2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.readAckReq, true);
2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deliveryAckReq, true);
2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.reportReq, false);
2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.numberOfMessages, 3);
2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.alert, BearerData.ALERT_HIGH_PRIO);
2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.language, BearerData.LANGUAGE_HEBREW);
2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF);
2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.numberMode,
2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                     CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK);
2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.ton, CdmaSmsAddress.TON_UNKNOWN);
2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.numberPlan, CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN);
2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.numberOfDigits, 7);
2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.address, "3598271");
2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.displayMode, BearerData.DISPLAY_MODE_USER);
2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.depositIndex, 1382);
2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userResponseCode, 5);
2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.year, 2008);
2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.month, 11);
2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.monthDay, 1);
2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.hour, 11);
2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.minute, 1);
2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.second, 59);
2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.validityPeriodAbsolute, null);
2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.validityPeriodRelative, 193);
2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.year, 1997);
2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.month, 5);
2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.monthDay, 18);
2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.hour, 0);
3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.minute, 0);
3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.second, 0);
3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeRelative, 199);
3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.hasUserDataHeader, false);
3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userData.msgEncoding, UserData.ENCODING_7BIT_ASCII);
3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userData.numFields, 2);
3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userData.payloadStr, "hi");
3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testMonolithicTwo() throws Exception {
3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu = "0003200010010410168d200201050306081201110159050192060697061800000007013d0" +
3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "801c00901800a01e00b01030c01c00d01070e05039acc13880f018011020566";
3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu));
3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.messageType, BearerData.MESSAGE_TYPE_SUBMIT);
3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.messageId, 1);
3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.priority, BearerData.PRIORITY_EMERGENCY);
3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.privacy, BearerData.PRIVACY_CONFIDENTIAL);
3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userAckReq, true);
3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.readAckReq, true);
3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deliveryAckReq, true);
3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.reportReq, false);
3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.numberOfMessages, 3);
3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.alert, BearerData.ALERT_HIGH_PRIO);
3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.language, BearerData.LANGUAGE_HEBREW);
3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF);
3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.numberMode,
3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                     CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK);
3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.ton, CdmaSmsAddress.TON_UNKNOWN);
3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.numberPlan, CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN);
3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.numberOfDigits, 7);
3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.callbackNumber.address, "3598271");
3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.displayMode, BearerData.DISPLAY_MODE_USER);
3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.depositIndex, 1382);
3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userResponseCode, 5);
3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.year, 2008);
3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.month, 11);
3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.monthDay, 1);
3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.hour, 11);
3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.minute, 1);
3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.msgCenterTimeStamp.second, 59);
3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.validityPeriodAbsolute, null);
3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.validityPeriodRelative, 61);
3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.year, 1997);
3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.month, 5);
3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.monthDay, 18);
3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.hour, 0);
3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.minute, 0);
3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeAbsolute.second, 0);
3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.deferredDeliveryTimeRelative, 146);
3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.hasUserDataHeader, false);
3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userData.msgEncoding, UserData.ENCODING_7BIT_ASCII);
3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userData.numFields, 2);
3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bearerData.userData.payloadStr, "hi");
3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserDataHeaderConcatRefFeedback() throws Exception {
3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 55;
3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.refNumber = 0xEE;
3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.msgCount = 2;
3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.seqNumber = 2;
3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.isEightBits = true;
3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader smsHeader = new SmsHeader();
3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        smsHeader.concatRef = concatRef;
3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] encodedHeader = SmsHeader.toByteArray(smsHeader);
3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader);
3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber);
3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount);
3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber);
3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits);
3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs, null);
3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "User Data Header (UDH) feedback test";
3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.userDataHeader = smsHeader;
3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] encodedSms = BearerData.encode(bearerData);
3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        decodedHeader = revBearerData.userData.userDataHeader;
3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber);
3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount);
3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber);
3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits);
3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs, null);
3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserDataHeaderIllegalConcatRef() throws Exception {
3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 55;
3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.refNumber = 0x10;
3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.msgCount = 0;
3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.seqNumber = 2;
3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.isEightBits = true;
3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader smsHeader = new SmsHeader();
4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        smsHeader.concatRef = concatRef;
4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] encodedHeader = SmsHeader.toByteArray(smsHeader);
4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader);
4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef, null);
4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.isEightBits = false;
4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedHeader = SmsHeader.toByteArray(smsHeader);
4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        decodedHeader = SmsHeader.fromByteArray(encodedHeader);
4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef, null);
4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.msgCount = 1;
4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.seqNumber = 2;
4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedHeader = SmsHeader.toByteArray(smsHeader);
4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        decodedHeader = SmsHeader.fromByteArray(encodedHeader);
4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef, null);
4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.msgCount = 1;
4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.seqNumber = 0;
4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedHeader = SmsHeader.toByteArray(smsHeader);
4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        decodedHeader = SmsHeader.fromByteArray(encodedHeader);
4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef, null);
4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.msgCount = 2;
4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.seqNumber = 1;
4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedHeader = SmsHeader.toByteArray(smsHeader);
4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        decodedHeader = SmsHeader.fromByteArray(encodedHeader);
4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.msgCount, 2);
4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.seqNumber, 1);
4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserDataHeaderMixedFeedback() throws Exception {
4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 42;
4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.refNumber = 0x34;
4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.msgCount = 5;
4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.seqNumber = 2;
4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        concatRef.isEightBits = false;
4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader.PortAddrs portAddrs = new SmsHeader.PortAddrs();
4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        portAddrs.destPort = 88;
4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        portAddrs.origPort = 66;
4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        portAddrs.areEightBits = false;
4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader smsHeader = new SmsHeader();
4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        smsHeader.concatRef = concatRef;
4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        smsHeader.portAddrs = portAddrs;
4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] encodedHeader = SmsHeader.toByteArray(smsHeader);
4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader);
4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber);
4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount);
4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber);
4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits);
4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs.destPort, portAddrs.destPort);
4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs.origPort, portAddrs.origPort);
4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs.areEightBits, portAddrs.areEightBits);
4520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "User Data Header (UDH) feedback test";
4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.userDataHeader = smsHeader;
4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] encodedSms = BearerData.encode(bearerData);
4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        decodedHeader = revBearerData.userData.userDataHeader;
4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber);
4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount);
4610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber);
4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits);
4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs.destPort, portAddrs.destPort);
4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs.origPort, portAddrs.origPort);
4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(decodedHeader.portAddrs.areEightBits, portAddrs.areEightBits);
4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testReplyOption() throws Exception {
4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87450080a0180";
4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test Acknowledgement 1", bd1.userData.payloadStr);
4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, bd1.userAckReq);
4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd1.deliveryAckReq);
4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd1.readAckReq);
4760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd1.reportReq);
4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu2 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87490080a0140";
4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
4790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test Acknowledgement 2", bd2.userData.payloadStr);
4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd2.userAckReq);
4810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, bd2.deliveryAckReq);
4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd2.readAckReq);
4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd2.reportReq);
4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu3 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d874d0080a0120";
4850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3));
4860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test Acknowledgement 3", bd3.userData.payloadStr);
4870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd3.userAckReq);
4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd3.deliveryAckReq);
4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, bd3.readAckReq);
4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd3.reportReq);
4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu4 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87510080a0110";
4920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4));
4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test Acknowledgement 4", bd4.userData.payloadStr);
4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd4.userAckReq);
4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd4.deliveryAckReq);
4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, bd4.readAckReq);
4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, bd4.reportReq);
4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testReplyOptionFeedback() throws Exception {
5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
5060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "test reply option";
5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userAckReq = true;
5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, revBearerData.userAckReq);
5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.deliveryAckReq);
5140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.readAckReq);
5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.reportReq);
5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userAckReq = false;
5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.deliveryAckReq = true;
5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
5200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.userAckReq);
5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, revBearerData.deliveryAckReq);
5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.readAckReq);
5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.reportReq);
5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.deliveryAckReq = false;
5250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.readAckReq = true;
5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
5280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.userAckReq);
5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.deliveryAckReq);
5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, revBearerData.readAckReq);
5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.reportReq);
5320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.readAckReq = false;
5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.reportReq = true;
5340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
5360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.userAckReq);
5370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.deliveryAckReq);
5380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(false, revBearerData.readAckReq);
5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(true, revBearerData.reportReq);
5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testNumberOfMessages() throws Exception {
5440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Note that the message text below does not properly reflect
5450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // the message count.  The author of these messages was
5460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // apparently unaware that the values are bcd encoded, and the
5470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // values being tested against (not the ones in the message
5480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // text) are actually correct.
5490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "000310409001124896a794e07595f69f199540ea759a0dc8e00b0163";
5500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
5510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test Voice mail 99", bd1.userData.payloadStr);
5520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(63, bd1.numberOfMessages);
5530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu2 = "00031040900113489ea794e07595f69f199540ea759a0988c0600b0164";
5540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test Voice mail 100", bd2.userData.payloadStr);
5560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(64, bd2.numberOfMessages);
5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
5600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testCallbackNum() throws Exception {
5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "00031040900112488ea794e070d436cb638bc5e035ce2f97900e06910431323334";
5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Test Callback nbr", bd1.userData.payloadStr);
5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR, bd1.callbackNumber.digitMode);
5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.TON_INTERNATIONAL_OR_IP, bd1.callbackNumber.ton);
5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK, bd1.callbackNumber.numberMode);
5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.NUMBERING_PLAN_ISDN_TELEPHONY, bd1.callbackNumber.numberPlan);
5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("1234", bd1.callbackNumber.address);
5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testCallbackNumDtmf() throws Exception {
5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "00031002300109104539b4d052ebb3d00e07052d4c90a55080";
5740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("SMS Rulz", bd1.userData.payloadStr);
5760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF, bd1.callbackNumber.digitMode);
5770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.TON_UNKNOWN, bd1.callbackNumber.ton);
5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK, bd1.callbackNumber.numberMode);
5790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN, bd1.callbackNumber.numberPlan);
5800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("5099214001", bd1.callbackNumber.address);
5810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
5840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testCallbackNumFeedback() throws Exception {
5850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
5860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
5900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "test callback number";
5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CdmaSmsAddress addr = new CdmaSmsAddress();
5930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.digitMode = CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR;
5940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.ton = CdmaSmsAddress.TON_NATIONAL_OR_EMAIL;
5950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.numberMode = CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK;
5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.numberPlan = CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN;
5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.address = "8005551212";
5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.numberOfDigits = (byte)addr.address.length();
5990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.callbackNumber = addr;
6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
6010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CdmaSmsAddress revAddr = revBearerData.callbackNumber;
6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, revAddr.digitMode);
6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.ton, revAddr.ton);
6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberMode, revAddr.numberMode);
6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberPlan, revAddr.numberPlan);
6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, revAddr.numberOfDigits);
6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.address, revAddr.address);
6090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.address = "8*55#1012";
6100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.numberOfDigits = (byte)addr.address.length();
6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        addr.digitMode = CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF;
6120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
6130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revAddr = revBearerData.callbackNumber;
6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.digitMode, revAddr.digitMode);
6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.numberOfDigits, revAddr.numberOfDigits);
6170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(addr.address, revAddr.address);
6180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testPrivacyIndicator() throws Exception {
6220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "0003104090010c485f4194dfea34becf61b840090140";
6230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.privacy, BearerData.PRIVACY_RESTRICTED);
6250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu2 = "0003104090010c485f4194dfea34becf61b840090180";
6260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
6270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.privacy, BearerData.PRIVACY_CONFIDENTIAL);
6280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu3 = "0003104090010c485f4194dfea34becf61b8400901c0";
6290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3));
6300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd3.privacy, BearerData.PRIVACY_SECRET);
6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
6340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testPrivacyIndicatorFeedback() throws Exception {
6350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
6360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
6370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
6380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
6400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "test privacy indicator";
6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.privacy = BearerData.PRIVACY_SECRET;
6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.privacyIndicatorSet = true;
6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.userData.payloadStr, userData.payloadStr);
6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.privacyIndicatorSet, true);
6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.privacy, BearerData.PRIVACY_SECRET);
6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.privacy = BearerData.PRIVACY_RESTRICTED;
6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.privacy, BearerData.PRIVACY_RESTRICTED);
6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testMsgDeliveryAlert() throws Exception {
6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "0003104090010d4866a794e07055965b91d040300c0100";
6580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
6590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.alert, 0);
6600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.userData.payloadStr, "Test Alert 0");
6610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu2 = "0003104090010d4866a794e07055965b91d140300c0140";
6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.alert, 1);
6640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.userData.payloadStr, "Test Alert 1");
6650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu3 = "0003104090010d4866a794e07055965b91d240300c0180";
6660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3));
6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd3.alert, 2);
6680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd3.userData.payloadStr, "Test Alert 2");
6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu4 = "0003104090010d4866a794e07055965b91d340300c01c0";
6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4));
6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd4.alert, 3);
6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd4.userData.payloadStr, "Test Alert 3");
6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu5 = "00031000000126114F4CBCFA20DB979F3C39F2A0C9976" +
6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            "69ED979794187665E5D1028EFA7A6840E1062D3D39A900C028000";
6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd5 = BearerData.decode(HexDump.hexStringToByteArray(pdu5));
6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd5.alert, BearerData.ALERT_MEDIUM_PRIO);
6770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd5.userData.payloadStr, "test message delivery alert (with 8 bits)");
6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu6 = "00031000000126114F4CBCFA20DB979F3C39F2A0C9976" +
6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            "69ED979794187665E5D1028EFA7A6840C1062D3D39A900C00";
6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd6 = BearerData.decode(HexDump.hexStringToByteArray(pdu6));
6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd6.userData.payloadStr, "test message delivery alert (with 0 bits)");
6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd6.alertIndicatorSet, false);
6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
6860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testMiscParams() throws Exception {
6870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "00031002400109104539b4d052ebb3d00c0180";
6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
6890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.alert, BearerData.ALERT_MEDIUM_PRIO);
6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.userData.payloadStr, "SMS Rulz");
6910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu2 = "00031002500109104539b4d052ebb3d00801800901c0";
6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
6930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.priority, BearerData.PRIORITY_URGENT);
6940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.privacy, BearerData.PRIVACY_SECRET);
6950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.userData.payloadStr, "SMS Rulz");
6960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu3 = "00031002600109104539b4d052ebb3d00901400c01c0";
6970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3));
6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd3.privacy, BearerData.PRIVACY_RESTRICTED);
6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd3.alert, BearerData.ALERT_HIGH_PRIO);
7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd3.userData.payloadStr, "SMS Rulz");
7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu4 = "00031002700109104539b4d052ebb3d00f0105";
7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4));
7030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd4.displayMode, BearerData.DISPLAY_MODE_IMMEDIATE);
7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd4.userData.payloadStr, "SMS Rulz");
7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville   @SmallTest
7070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testMsgDeliveryAlertFeedback() throws Exception {
7080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
7090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
7100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
7110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
7130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "test message delivery alert";
7140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
7150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.alert = BearerData.ALERT_MEDIUM_PRIO;
7160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.alertIndicatorSet = true;
7170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
7180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
7190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.userData.payloadStr, userData.payloadStr);
7200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.alertIndicatorSet, true);
7210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.alert, bearerData.alert);
7220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.alert = BearerData.ALERT_HIGH_PRIO;
7230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
7240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
7250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.userData.payloadStr, userData.payloadStr);
7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.alertIndicatorSet, true);
7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.alert, bearerData.alert);
7280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testLanguageIndicator() throws Exception {
7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "0003104090011748bea794e0731436ef3bd7c2e0352eef27a1c263fe58080d0101";
7330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
7340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.userData.payloadStr, "Test Language indicator");
7350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.language, BearerData.LANGUAGE_ENGLISH);
7360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu2 = "0003104090011748bea794e0731436ef3bd7c2e0352eef27a1c263fe58080d0106";
7370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.userData.payloadStr, "Test Language indicator");
7390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.language, BearerData.LANGUAGE_CHINESE);
7400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
7430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testLanguageIndicatorFeedback() throws Exception {
7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
7450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
7460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
7490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "test language indicator";
7500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
7510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.language = BearerData.LANGUAGE_ENGLISH;
7520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.languageIndicatorSet = true;
7530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
7540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.userData.payloadStr, userData.payloadStr);
7560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.languageIndicatorSet, true);
7570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.language, bearerData.language);
7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.language = BearerData.LANGUAGE_KOREAN;
7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.userData.payloadStr, userData.payloadStr);
7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.languageIndicatorSet, true);
7630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.language, bearerData.language);
7640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testDisplayMode() throws Exception {
7680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "0003104090010c485f4194dfea34becf61b8400f0100";
7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.displayMode, BearerData.DISPLAY_MODE_IMMEDIATE);
7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu2 = "0003104090010c485f4194dfea34becf61b8400f0140";
7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
7730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd2.displayMode, BearerData.DISPLAY_MODE_DEFAULT);
7740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu3 = "0003104090010c485f4194dfea34becf61b8400f0180";
7750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3));
7760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd3.displayMode, BearerData.DISPLAY_MODE_USER);
7770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
7800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testDisplayModeFeedback() throws Exception {
7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
7820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
7830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 0;
7840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.hasUserDataHeader = false;
7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.payloadStr = "test display mode";
7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
7880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.displayMode = BearerData.DISPLAY_MODE_IMMEDIATE;
7890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.displayModeSet = true;
7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte []encodedSms = BearerData.encode(bearerData);
7910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
7920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.userData.payloadStr, userData.payloadStr);
7930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.displayModeSet, true);
7940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.displayMode, bearerData.displayMode);
7950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.displayMode = BearerData.DISPLAY_MODE_USER;
7960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        encodedSms = BearerData.encode(bearerData);
7970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        revBearerData = BearerData.decode(encodedSms);
7980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.userData.payloadStr, userData.payloadStr);
7990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.displayModeSet, true);
8000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(revBearerData.displayMode, bearerData.displayMode);
8010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
8040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testIs91() throws Exception {
8050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu1 = "000320001001070c2039acc13880";
8060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
8070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd1.callbackNumber.address, "3598271");
8080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pdu4 = "000320001001080c283c314724b34e";
8090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4));
8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(bd4.userData.payloadStr, "ABCDEFG");
8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
8140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testUserDataHeaderWithEightCharMsg() throws Exception {
815115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        encodeDecodeAssertEquals("01234567", 2, 2, false);
816115632cc56f813bd21543f8532c763d7d2968046Jake Hamby    }
817115632cc56f813bd21543f8532c763d7d2968046Jake Hamby
818115632cc56f813bd21543f8532c763d7d2968046Jake Hamby    private void encodeDecodeAssertEquals(String payload, int index, int total,
819115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            boolean oddLengthHeader) throws Exception {
8200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData bearerData = new BearerData();
8210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
8220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.messageId = 55;
8230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsHeader smsHeader = new SmsHeader();
824115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        if (oddLengthHeader) {
825115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            // Odd length header to verify correct UTF-16 header padding
826115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            SmsHeader.MiscElt miscElt = new SmsHeader.MiscElt();
827115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            miscElt.id = 0x27;  // reserved for future use; ignored on decode
828115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            miscElt.data = new byte[]{0x12, 0x34};
829115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            smsHeader.miscEltList.add(miscElt);
830115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        } else {
831115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            // Even length header normally generated for concatenated SMS.
832115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef();
833115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            concatRef.refNumber = 0xEE;
834115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            concatRef.msgCount = total;
835115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            concatRef.seqNumber = index;
836115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            concatRef.isEightBits = true;
837115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            smsHeader.concatRef = concatRef;
838115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        }
839115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        byte[] encodeHeader = SmsHeader.toByteArray(smsHeader);
840115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        if (oddLengthHeader) {
841115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            assertEquals(4, encodeHeader.length);     // 5 bytes with UDH length
842115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        } else {
843115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            assertEquals(5, encodeHeader.length);     // 6 bytes with UDH length
844115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        }
8450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData userData = new UserData();
846115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        userData.payloadStr = payload;
8470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        userData.userDataHeader = smsHeader;
8480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        bearerData.userData = userData;
8490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] encodedSms = BearerData.encode(bearerData);
8500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        BearerData revBearerData = BearerData.decode(encodedSms);
8510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
852115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        assertTrue(revBearerData.hasUserDataHeader);
853115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        byte[] header = SmsHeader.toByteArray(revBearerData.userData.userDataHeader);
854115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        if (oddLengthHeader) {
855115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            assertEquals(4, header.length);     // 5 bytes with UDH length
856115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        } else {
857115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            assertEquals(5, header.length);     // 6 bytes with UDH length
858115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        }
859115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        assertTrue(Arrays.equals(encodeHeader, header));
8600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
8630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testFragmentText() throws Exception {
8640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean isCdmaPhone = (TelephonyManager.getDefault().getPhoneType() ==
8650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                TelephonyManager.PHONE_TYPE_CDMA);
8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Valid 160 character ASCII text.
8670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String text1 = "123456789012345678901234567890123456789012345678901234567890" +
8680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "1234567890123456789012345678901234567890123456789012345678901234567890" +
8690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "12345678901234567890123456789[";
8700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        TextEncodingDetails ted = SmsMessage.calculateLength(text1, false);
8710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(ted.msgCount, 1);
8720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(ted.codeUnitCount, 160);
8730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(ted.codeUnitSize, 1);
8740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (isCdmaPhone) {
8750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text1);
8760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(fragments.size(), 1);
8770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
8780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /*
8800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           This is not a valid test: we will never encode a single-segment
8810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           EMS message.  Leaving this here, since we may try to support
8820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           this in the future.
8830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Valid 160 character GSM text -- the last character is
8850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // non-ASCII, and so this will currently generate a singleton
8860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // EMS message, which is not necessarily supported by Verizon.
8870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String text2 = "123456789012345678901234567890123456789012345678901234567890" +
8880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "1234567890123456789012345678901234567890123456789012345678901234567890" +
8890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "12345678901234567890123456789\u00a3";  // Trailing pound-currency sign.
8900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ted = SmsMessage.calculateLength(text2, false);
8910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(ted.msgCount, 1);
8920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(ted.codeUnitCount, 160);
8930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(ted.codeUnitSize, 1);
8940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (isCdmaPhone) {
8950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text2);
8960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(fragments.size(), 1);
8970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        */
8990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // *IF* we supported single-segment EMS, this text would result in a
9010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // single fragment with 7-bit encoding. But we don't, so this text
9020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // results in three fragments of 16-bit encoding.
9030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String text2 = "123456789012345678901234567890123456789012345678901234567890" +
9040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "1234567890123456789012345678901234567890123456789012345678901234567890" +
9050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "12345678901234567890123456789\u00a3";  // Trailing pound-currency sign.
9060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ted = SmsMessage.calculateLength(text2, false);
9070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(3, ted.msgCount);
9080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(160, ted.codeUnitCount);
9090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(3, ted.codeUnitSize);
9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (isCdmaPhone) {
9110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text2);
9120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertEquals(3, fragments.size());
913115632cc56f813bd21543f8532c763d7d2968046Jake Hamby
914115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            for (int i = 0; i < 3; i++) {
915115632cc56f813bd21543f8532c763d7d2968046Jake Hamby                encodeDecodeAssertEquals(fragments.get(i), i + 1, 3, false);
916115632cc56f813bd21543f8532c763d7d2968046Jake Hamby                encodeDecodeAssertEquals(fragments.get(i), i + 1, 3, true);
917115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            }
9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
9190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
920115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        // Test case for multi-part UTF-16 message.
921115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        String text3 = sUnicodeChars + sUnicodeChars + sUnicodeChars;
922115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        ted = SmsMessage.calculateLength(text3, false);
923115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        assertEquals(3, ted.msgCount);
924115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        assertEquals(189, ted.codeUnitCount);
925115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        assertEquals(3, ted.codeUnitSize);
926115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        if (isCdmaPhone) {
927115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text3);
928115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            assertEquals(3, fragments.size());
929115632cc56f813bd21543f8532c763d7d2968046Jake Hamby
930115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            for (int i = 0; i < 3; i++) {
931115632cc56f813bd21543f8532c763d7d2968046Jake Hamby                encodeDecodeAssertEquals(fragments.get(i), i + 1, 3, false);
932115632cc56f813bd21543f8532c763d7d2968046Jake Hamby                encodeDecodeAssertEquals(fragments.get(i), i + 1, 3, true);
933115632cc56f813bd21543f8532c763d7d2968046Jake Hamby            }
934115632cc56f813bd21543f8532c763d7d2968046Jake Hamby        }
9350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
937