xref: /aosp_15_r20/dalvik/dx/junit-tests/com/android/dex/EncodedValueReaderTest.java (revision 055d459012065f78d96b68be8421640240ddf631)
1*055d4590SKeyi Gui /*
2*055d4590SKeyi Gui  * Copyright (C) 2011 The Android Open Source Project
3*055d4590SKeyi Gui  *
4*055d4590SKeyi Gui  * Licensed under the Apache License, Version 2.0 (the "License");
5*055d4590SKeyi Gui  * you may not use this file except in compliance with the License.
6*055d4590SKeyi Gui  * You may obtain a copy of the License at
7*055d4590SKeyi Gui  *
8*055d4590SKeyi Gui  *      http://www.apache.org/licenses/LICENSE-2.0
9*055d4590SKeyi Gui  *
10*055d4590SKeyi Gui  * Unless required by applicable law or agreed to in writing, software
11*055d4590SKeyi Gui  * distributed under the License is distributed on an "AS IS" BASIS,
12*055d4590SKeyi Gui  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*055d4590SKeyi Gui  * See the License for the specific language governing permissions and
14*055d4590SKeyi Gui  * limitations under the License.
15*055d4590SKeyi Gui  */
16*055d4590SKeyi Gui 
17*055d4590SKeyi Gui package com.android.dex;
18*055d4590SKeyi Gui 
19*055d4590SKeyi Gui import com.android.dex.util.ByteArrayByteInput;
20*055d4590SKeyi Gui import junit.framework.TestCase;
21*055d4590SKeyi Gui 
22*055d4590SKeyi Gui public final class EncodedValueReaderTest extends TestCase {
23*055d4590SKeyi Gui 
testReadByte()24*055d4590SKeyi Gui     public void testReadByte() {
25*055d4590SKeyi Gui         assertEquals((byte) 0x80, readerOf(0, 0x80).readByte());
26*055d4590SKeyi Gui         assertEquals((byte) 0xff, readerOf(0, 0xff).readByte());
27*055d4590SKeyi Gui         assertEquals((byte) 0x00, readerOf(0, 0x00).readByte());
28*055d4590SKeyi Gui         assertEquals((byte) 0x01, readerOf(0, 0x01).readByte());
29*055d4590SKeyi Gui         assertEquals((byte) 0x7f, readerOf(0, 0x7f).readByte());
30*055d4590SKeyi Gui     }
31*055d4590SKeyi Gui 
testReadShort()32*055d4590SKeyi Gui     public void testReadShort() {
33*055d4590SKeyi Gui         assertEquals((short) 0x8000, readerOf(34, 0x00, 0x80).readShort());
34*055d4590SKeyi Gui         assertEquals((short)      0, readerOf( 2, 0x00).readShort());
35*055d4590SKeyi Gui         assertEquals((short)   0xab, readerOf(34, 0xab, 0x00).readShort());
36*055d4590SKeyi Gui         assertEquals((short) 0xabcd, readerOf(34, 0xcd, 0xab).readShort());
37*055d4590SKeyi Gui         assertEquals((short) 0x7FFF, readerOf(34, 0xff, 0x7f).readShort());
38*055d4590SKeyi Gui     }
39*055d4590SKeyi Gui 
testReadInt()40*055d4590SKeyi Gui     public void testReadInt() {
41*055d4590SKeyi Gui         assertEquals(0x80000000, readerOf(100, 0x00, 0x00, 0x00, 0x80).readInt());
42*055d4590SKeyi Gui         assertEquals(      0x00, readerOf(  4, 0x00).readInt());
43*055d4590SKeyi Gui         assertEquals(      0xab, readerOf( 36, 0xab, 0x00).readInt());
44*055d4590SKeyi Gui         assertEquals(    0xabcd, readerOf( 68, 0xcd, 0xab, 0x00).readInt());
45*055d4590SKeyi Gui         assertEquals(  0xabcdef, readerOf(100, 0xef, 0xcd, 0xab, 0x00).readInt());
46*055d4590SKeyi Gui         assertEquals(0xabcdef01, readerOf(100, 0x01, 0xef, 0xcd, 0xab).readInt());
47*055d4590SKeyi Gui         assertEquals(0x7fffffff, readerOf(100, 0xff, 0xff, 0xff, 127).readInt());
48*055d4590SKeyi Gui     }
49*055d4590SKeyi Gui 
testReadLong()50*055d4590SKeyi Gui     public void testReadLong() {
51*055d4590SKeyi Gui         assertEquals(0x8000000000000000L, readerOf( -26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80).readLong());
52*055d4590SKeyi Gui         assertEquals(              0x00L, readerOf(   6, 0x00).readLong());
53*055d4590SKeyi Gui         assertEquals(              0xabL, readerOf(  38, 0xab, 0x00).readLong());
54*055d4590SKeyi Gui         assertEquals(            0xabcdL, readerOf(  70, 0xcd, 0xab, 0x00).readLong());
55*055d4590SKeyi Gui         assertEquals(          0xabcdefL, readerOf( 102, 0xef, 0xcd, 0xab, 0x00).readLong());
56*055d4590SKeyi Gui         assertEquals(        0xabcdef01L, readerOf(-122, 0x01, 0xef, 0xcd, 0xab, 0x00).readLong());
57*055d4590SKeyi Gui         assertEquals(      0xabcdef0123L, readerOf( -90, 0x23, 0x01, 0xef, 0xcd, 0xab, 0x00).readLong());
58*055d4590SKeyi Gui         assertEquals(    0xabcdef012345L, readerOf( -58, 0x45, 0x23, 0x01, 0xef, 0xcd, 0xab, 0x00).readLong());
59*055d4590SKeyi Gui         assertEquals(  0xabcdef01234567L, readerOf( -26, 0x67, 0x45, 0x23, 0x01, 0xef, 0xcd, 0xab, 0x00).readLong());
60*055d4590SKeyi Gui         assertEquals(0xabcdef0123456789L, readerOf( -26, 0x89, 0x67, 0x45, 0x23, 0x01, 0xef, 0xcd, 0xab).readLong());
61*055d4590SKeyi Gui         assertEquals(0x7fffffffffffffffL, readerOf( -26, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f).readLong());
62*055d4590SKeyi Gui     }
63*055d4590SKeyi Gui 
testReadFloat()64*055d4590SKeyi Gui     public void testReadFloat() {
65*055d4590SKeyi Gui         assertEquals(Float.NEGATIVE_INFINITY, readerOf(48, -128, -1).readFloat());
66*055d4590SKeyi Gui         assertEquals(Float.POSITIVE_INFINITY, readerOf(48, -128, 127).readFloat());
67*055d4590SKeyi Gui         assertEquals(Float.NaN, readerOf(48, -64, 127).readFloat());
68*055d4590SKeyi Gui         assertEquals(-0.0f, readerOf(16, -128).readFloat());
69*055d4590SKeyi Gui         assertEquals(0.0f, readerOf(16, 0).readFloat());
70*055d4590SKeyi Gui         assertEquals(0.5f, readerOf(16, 63).readFloat());
71*055d4590SKeyi Gui         assertEquals(1f, readerOf(48, -128, 63).readFloat());
72*055d4590SKeyi Gui         assertEquals(1.0E06f, readerOf(80, 36, 116, 73).readFloat());
73*055d4590SKeyi Gui         assertEquals(1.0E12f, readerOf(112, -91, -44, 104, 83).readFloat());
74*055d4590SKeyi Gui     }
75*055d4590SKeyi Gui 
testReadDouble()76*055d4590SKeyi Gui     public void testReadDouble() {
77*055d4590SKeyi Gui         assertEquals(Double.NEGATIVE_INFINITY, readerOf(49, -16, -1).readDouble());
78*055d4590SKeyi Gui         assertEquals(Double.POSITIVE_INFINITY, readerOf(49, -16, 127).readDouble());
79*055d4590SKeyi Gui         assertEquals(Double.NaN, readerOf(49, -8, 127).readDouble());
80*055d4590SKeyi Gui         assertEquals(-0.0, readerOf(17, -128).readDouble());
81*055d4590SKeyi Gui         assertEquals(0.0, readerOf(17, 0).readDouble());
82*055d4590SKeyi Gui         assertEquals(0.5, readerOf(49, -32, 63).readDouble());
83*055d4590SKeyi Gui         assertEquals(1.0, readerOf(49, -16, 63).readDouble());
84*055d4590SKeyi Gui         assertEquals(1.0E06, readerOf(113, -128, -124, 46, 65).readDouble());
85*055d4590SKeyi Gui         assertEquals(1.0E12, readerOf(-111, -94, -108, 26, 109, 66).readDouble());
86*055d4590SKeyi Gui         assertEquals(1.0E24, readerOf(-15, -76, -99, -39, 121, 67, 120, -22, 68).readDouble());
87*055d4590SKeyi Gui     }
88*055d4590SKeyi Gui 
testReadChar()89*055d4590SKeyi Gui     public void testReadChar() {
90*055d4590SKeyi Gui         assertEquals('\u0000', readerOf( 3, 0x00).readChar());
91*055d4590SKeyi Gui         assertEquals('\u00ab', readerOf( 3, 0xab).readChar());
92*055d4590SKeyi Gui         assertEquals('\uabcd', readerOf(35, 0xcd, 0xab).readChar());
93*055d4590SKeyi Gui         assertEquals('\uffff', readerOf(35, 0xff, 0xff).readChar());
94*055d4590SKeyi Gui     }
95*055d4590SKeyi Gui 
testReadBoolean()96*055d4590SKeyi Gui     public void testReadBoolean() {
97*055d4590SKeyi Gui         assertEquals(true, readerOf(63).readBoolean());
98*055d4590SKeyi Gui         assertEquals(false, readerOf(31).readBoolean());
99*055d4590SKeyi Gui     }
100*055d4590SKeyi Gui 
testReadNull()101*055d4590SKeyi Gui     public void testReadNull() {
102*055d4590SKeyi Gui         readerOf(30).readNull();
103*055d4590SKeyi Gui     }
104*055d4590SKeyi Gui 
testReadReference()105*055d4590SKeyi Gui     public void testReadReference() {
106*055d4590SKeyi Gui         assertEquals(      0xab, readerOf(0x17, 0xab).readString());
107*055d4590SKeyi Gui         assertEquals(    0xabcd, readerOf(0x37, 0xcd, 0xab).readString());
108*055d4590SKeyi Gui         assertEquals(  0xabcdef, readerOf(0x57, 0xef, 0xcd, 0xab).readString());
109*055d4590SKeyi Gui         assertEquals(0xabcdef01, readerOf(0x77, 0x01, 0xef, 0xcd, 0xab).readString());
110*055d4590SKeyi Gui     }
111*055d4590SKeyi Gui 
testReadWrongType()112*055d4590SKeyi Gui     public void testReadWrongType() {
113*055d4590SKeyi Gui         try {
114*055d4590SKeyi Gui             readerOf(0x17, 0xab).readField();
115*055d4590SKeyi Gui             fail();
116*055d4590SKeyi Gui         } catch (IllegalStateException expected) {
117*055d4590SKeyi Gui         }
118*055d4590SKeyi Gui     }
119*055d4590SKeyi Gui 
readerOf(int... bytes)120*055d4590SKeyi Gui     private EncodedValueReader readerOf(int... bytes) {
121*055d4590SKeyi Gui         byte[] data = new byte[bytes.length];
122*055d4590SKeyi Gui         for (int i = 0; i < bytes.length; i++) {
123*055d4590SKeyi Gui             data[i] = (byte) bytes[i];
124*055d4590SKeyi Gui         }
125*055d4590SKeyi Gui         return new EncodedValueReader(new ByteArrayByteInput(data));
126*055d4590SKeyi Gui     }
127*055d4590SKeyi Gui }
128