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 com.android.internal.telephony.gsm.SimTlv;
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.IccUtils;
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport junit.framework.TestCase;
220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.test.suitebuilder.annotation.SmallTest;
230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class SimUtilsTest extends TestCase {
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @SmallTest
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testBasic() throws Exception {
290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] data, data2;
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /*
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * bcdToString()
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         */
340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // An EF[ICCID] record
360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        data = IccUtils.hexStringToBytes("981062400510444868f2");
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("8901260450014484862", IccUtils.bcdToString(data, 0, data.length));
380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // skip the first and last bytes
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("0126045001448486", IccUtils.bcdToString(data, 1, data.length - 2));
410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Stops on invalid BCD value
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        data = IccUtils.hexStringToBytes("98E062400510444868f2");
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("890", IccUtils.bcdToString(data, 0, data.length));
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // skip the high nibble 'F' since some PLMNs have it
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        data = IccUtils.hexStringToBytes("98F062400510444868f2");
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("890260450014484862", IccUtils.bcdToString(data, 0, data.length));
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /*
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * gsmBcdByteToInt()
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         */
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(98, IccUtils.gsmBcdByteToInt((byte) 0x89));
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Out of range is treated as 0
570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(8, IccUtils.gsmBcdByteToInt((byte) 0x8c));
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /*
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * cdmaBcdByteToInt()
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         */
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(89, IccUtils.cdmaBcdByteToInt((byte) 0x89));
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Out of range is treated as 0
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(80, IccUtils.cdmaBcdByteToInt((byte) 0x8c));
670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /*
690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * adnStringFieldToString()
700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         */
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        data = IccUtils.hexStringToBytes("00566f696365204d61696c07918150367742f3ffffffffffff");
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Again, skip prepended 0
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // (this is an EF[ADN] record)
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Voice Mail", IccUtils.adnStringFieldToString(data, 1, data.length - 15));
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        data = IccUtils.hexStringToBytes("809673539A5764002F004DFFFFFFFFFF");
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // (this is from an EF[ADN] record)
800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("\u9673\u539A\u5764/M", IccUtils.adnStringFieldToString(data, 0, data.length));
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        data = IccUtils.hexStringToBytes("810A01566fec6365204de0696cFFFFFF");
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // (this is made up to test since I don't have a real one)
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("Vo\u00ECce M\u00E0il", IccUtils.adnStringFieldToString(data, 0, data.length));
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        data = IccUtils.hexStringToBytes("820505302D82d32d31");
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Example from 3GPP TS 11.11 V18.1.3.0 annex B
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals("-\u0532\u0583-1", IccUtils.adnStringFieldToString(data, 0, data.length));
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
92