/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.dx.util; import com.android.dex.util.ByteArrayByteInput; import com.android.dex.Leb128; import java.io.IOException; import java.util.Arrays; import junit.framework.TestCase; public final class Leb128UtilsTest extends TestCase { public void testDecodeUnsignedLeb() throws IOException { assertEquals(0, Leb128.readUnsignedLeb128(new ByteArrayByteInput((byte) 0))); assertEquals(1, Leb128.readUnsignedLeb128(new ByteArrayByteInput((byte) 1))); assertEquals(127, Leb128.readUnsignedLeb128(new ByteArrayByteInput((byte) 0x7f))); assertEquals(16256, Leb128.readUnsignedLeb128( new ByteArrayByteInput((byte) 0x80, (byte) 0x7f))); } public void testEncodeUnsignedLeb() throws IOException { assertEquals(new byte[] { 0 }, encodeUnsignedLeb(0)); assertEquals(new byte[] { 1 }, encodeUnsignedLeb(1)); assertEquals(new byte[] { 0x7f }, encodeUnsignedLeb(127)); assertEquals(new byte[] { (byte) 0x80, 0x7f }, encodeUnsignedLeb(16256)); assertEquals(new byte[] { (byte) 0xb4, 0x07 }, encodeUnsignedLeb(0x3b4)); assertEquals(new byte[] { (byte) 0x8c, 0x08 }, encodeUnsignedLeb(0x40c)); assertEquals(new byte[] { (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, 0xf }, encodeUnsignedLeb(0xffffffff)); } public void testDecodeSignedLeb() throws IOException { assertEquals(0, Leb128.readSignedLeb128(new ByteArrayByteInput((byte) 0))); assertEquals(1, Leb128.readSignedLeb128(new ByteArrayByteInput((byte) 1))); assertEquals(-1, Leb128.readSignedLeb128(new ByteArrayByteInput((byte) 0x7f))); assertEquals(0x3c, Leb128.readSignedLeb128(new ByteArrayByteInput((byte) 0x3c))); assertEquals(-128, Leb128.readSignedLeb128( new ByteArrayByteInput((byte) 0x80, (byte) 0x7f))); } public void testEncodeSignedLeb() throws IOException { assertEquals(new byte[] { 0 }, encodeSignedLeb(0)); assertEquals(new byte[] { 1 }, encodeSignedLeb(1)); assertEquals(new byte[] { 0x7f }, encodeSignedLeb(-1)); assertEquals(new byte[] { (byte) 0x80, 0x7f }, encodeSignedLeb(-128)); } private byte[] encodeSignedLeb(int value) { ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput(5); Leb128.writeSignedLeb128(out, value); return out.toByteArray(); } private byte[] encodeUnsignedLeb(int value) { ByteArrayAnnotatedOutput out = new ByteArrayAnnotatedOutput(5); Leb128.writeUnsignedLeb128(out, value); return out.toByteArray(); } private void assertEquals(byte[] expected, byte[] actual) { assertTrue(Arrays.toString(actual), Arrays.equals(expected, actual)); } }