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