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;
180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport junit.framework.TestCase;
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.test.suitebuilder.annotation.SmallTest;
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.AdnRecord;
23d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccUtils;
24d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenka
250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide}
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class AdnRecordTest extends TestCase {
290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testBasic() throws Exception {
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        AdnRecord adn;
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Typical record
360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn = new AdnRecord(
380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                IccUtils.hexStringToBytes("566F696365204D61696C07918150367742F3FFFFFFFFFFFF"));
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Voice Mail", adn.getAlphaTag());
410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("+18056377243", adn.getNumber());
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(adn.isEmpty());
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Empty records, empty strings
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn = new AdnRecord(
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                IccUtils.hexStringToBytes("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"));
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("", adn.getAlphaTag());
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("", adn.getNumber());
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(adn.isEmpty());
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Record too short
560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn = new AdnRecord(IccUtils.hexStringToBytes( "FF"));
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("", adn.getAlphaTag());
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("", adn.getNumber());
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(adn.isEmpty());
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // TOA = 0xff ("control string")
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn = new AdnRecord(
670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                IccUtils.hexStringToBytes("566F696365204D61696C07FF8150367742F3FFFFFFFFFFFF"));
680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Voice Mail", adn.getAlphaTag());
700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("18056377243", adn.getNumber());
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(adn.isEmpty());
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // TOA = 0x81 (unknown)
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn = new AdnRecord(
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                IccUtils.hexStringToBytes("566F696365204D61696C07818150367742F3FFFFFFFFFFFF"));
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Voice Mail", adn.getAlphaTag());
800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("18056377243", adn.getNumber());
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(adn.isEmpty());
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Number Length is too long
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn = new AdnRecord(
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                IccUtils.hexStringToBytes("566F696365204D61696C0F918150367742F3FFFFFFFFFFFF"));
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Voice Mail", adn.getAlphaTag());
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("", adn.getNumber());
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(adn.isEmpty());
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Number Length is zero (invalid)
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn = new AdnRecord(
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                IccUtils.hexStringToBytes("566F696365204D61696C00918150367742F3FFFFFFFFFFFF"));
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Voice Mail", adn.getAlphaTag());
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("", adn.getNumber());
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(adn.isEmpty());
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Number Length is 2, first number byte is FF, TOA is international
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn = new AdnRecord(
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                IccUtils.hexStringToBytes("566F696365204D61696C0291FF50367742F3FFFFFFFFFFFF"));
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Voice Mail", adn.getAlphaTag());
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("", adn.getNumber());
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(adn.isEmpty());
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Number Length is 2, first number digit is valid, TOA is international
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn = new AdnRecord(
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                IccUtils.hexStringToBytes("566F696365204D61696C0291F150367742F3FFFFFFFFFFFF"));
1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Voice Mail", adn.getAlphaTag());
1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("+1", adn.getNumber());
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(adn.isEmpty());
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // An extended record
1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn = new AdnRecord(
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                IccUtils.hexStringToBytes(
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        "4164676A6DFFFFFFFFFFFFFFFFFFFFFF0B918188551512C221436587FF01"));
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Adgjm", adn.getAlphaTag());
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("+18885551212,12345678", adn.getNumber());
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(adn.isEmpty());
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(adn.hasExtendedRecord());
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn.appendExtRecord(IccUtils.hexStringToBytes("0206092143658709ffffffffff"));
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Adgjm", adn.getAlphaTag());
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("+18885551212,12345678901234567890", adn.getNumber());
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(adn.isEmpty());
1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // An extended record with an invalid extension
1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn = new AdnRecord(
1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                IccUtils.hexStringToBytes(
1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        "4164676A6DFFFFFFFFFFFFFFFFFFFFFF0B918188551512C221436587FF01"));
1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Adgjm", adn.getAlphaTag());
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("+18885551212,12345678", adn.getNumber());
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(adn.isEmpty());
1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(adn.hasExtendedRecord());
1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn.appendExtRecord(IccUtils.hexStringToBytes("0106092143658709ffffffffff"));
1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Adgjm", adn.getAlphaTag());
1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("+18885551212,12345678", adn.getNumber());
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(adn.isEmpty());
1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // An extended record with an invalid extension
1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn = new AdnRecord(
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                IccUtils.hexStringToBytes(
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        "4164676A6DFFFFFFFFFFFFFFFFFFFFFF0B918188551512C221436587FF01"));
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Adgjm", adn.getAlphaTag());
1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("+18885551212,12345678", adn.getNumber());
1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(adn.isEmpty());
1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(adn.hasExtendedRecord());
1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adn.appendExtRecord(IccUtils.hexStringToBytes("020B092143658709ffffffffff"));
1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Adgjm", adn.getAlphaTag());
1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("+18885551212,12345678", adn.getNumber());
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(adn.isEmpty());
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
180