17dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver/* 27dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * Copyright 2012, Google Inc. 37dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * All rights reserved. 47dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * 57dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * Redistribution and use in source and binary forms, with or without 67dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * modification, are permitted provided that the following conditions are 77dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * met: 87dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * 97dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * * Redistributions of source code must retain the above copyright 107dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * notice, this list of conditions and the following disclaimer. 117dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * * Redistributions in binary form must reproduce the above 127dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * copyright notice, this list of conditions and the following disclaimer 137dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * in the documentation and/or other materials provided with the 147dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * distribution. 157dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * * Neither the name of Google Inc. nor the names of its 167dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * contributors may be used to endorse or promote products derived from 177dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * this software without specific prior written permission. 187dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * 197dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 207dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 217dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 227dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 237dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 247dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 257dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 267dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 277dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 287dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 297dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 307dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver */ 317dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 327dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverpackage org.jf.dexlib2.writer; 337dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 347dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport junit.framework.Assert; 357dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport org.jf.dexlib2.ValueType; 367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport org.jf.util.ExceptionWithContext; 377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport org.jf.util.NakedByteArrayOutputStream; 387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport org.junit.Before; 397dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport org.junit.Test; 407dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 417dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport java.io.IOException; 427dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport java.util.Arrays; 437dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport java.util.Random; 447dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 451bf6f2324541df184689fdb2c0d8188af5221784Ben Gruverpublic class DexDataWriterTest { 467dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private Random random; 477dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private NakedByteArrayOutputStream output = new NakedByteArrayOutputStream(); 487dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private int startPosition; 491bf6f2324541df184689fdb2c0d8188af5221784Ben Gruver private DexDataWriter writer; 507dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 517dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Before 527dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void setup() throws IOException { 537dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver // use a predefined seed, so we get a deterministic result 547dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver random = new Random(); 557dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver output.reset(); 567dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver startPosition = 123; 577dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver int bufferSize = 256; 581bf6f2324541df184689fdb2c0d8188af5221784Ben Gruver writer = new DexDataWriter(output, startPosition, bufferSize); 597dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 607dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 617dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver // Note: we use int[] rather than byte[] so that we don't have to cast every value when manually constructing an 627dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver // array. 637dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private void expectData(int... bytes) throws IOException { 647dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver Assert.assertEquals(startPosition+bytes.length, writer.getPosition()); 657dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 667dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.flush(); 677dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver byte[] writtenData = output.getBuffer(); 687dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 697dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver for (int i=0; i<bytes.length; i++) { 707dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver Assert.assertEquals(String.format("Values not equal at index %d", i), (byte)bytes[i], writtenData[i]); 717dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 727dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 737dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 747dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private void expectData(byte[] bytes) throws IOException { 757dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver Assert.assertEquals(startPosition+bytes.length, writer.getPosition()); 767dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 777dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.flush(); 787dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver byte[] writtenData = output.getBuffer(); 797dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 807dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver for (int i=0; i<bytes.length; i++) { 817dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver Assert.assertEquals(String.format("Values not equal at index %d", i), bytes[i], writtenData[i]); 827dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 837dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 847dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 857dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 867dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteByte() throws IOException { 877dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver byte[] arr = new byte[257]; 887dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver for (int i=0; i<256; i++) { 897dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver arr[i] = (byte)i; 907dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(i); 917dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 927dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver arr[256] = (byte)0x80; 937dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(0x180); 947dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 957dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(arr); 967dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 977dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 987dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 997dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteByteArray() throws IOException { 1007dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver byte[] arr = new byte[345]; 1017dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver random.nextBytes(arr); 1027dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(arr); 1037dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1047dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(arr); 1057dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 1067dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1077dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 1087dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteByteArrayWithLengthAndOffset() throws IOException { 1097dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver byte[] arr = new byte[345]; 1107dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver random.nextBytes(arr); 1117dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(arr, 10, 300); 1127dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1137dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(Arrays.copyOfRange(arr, 10, 310)); 1147dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 1157dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1167dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 1177dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteLong() throws IOException { 1187dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeLong(0x1122334455667788L); 1197dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeLong(-0x1122334455667788L); 1207dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1217dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 1227dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 0x78, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE); 1237dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 1247dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1257dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 1267dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteInt() throws IOException { 1277dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeInt(0x11223344); 1287dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeInt(-0x11223344); 1297dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1307dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(0x44, 0x33, 0x22, 0x11, 1317dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 0xBC, 0xCC, 0xDD, 0xEE); 1327dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 1337dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1347dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 1357dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteShort() throws IOException { 1367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeShort(0); 1377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeShort(0x1122); 1387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeShort(-0x1122); 1397dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeShort(0x7FFF); 1407dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeShort(-0x8000); 1417dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1427dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(0x00, 0x00, 1437dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 0x22, 0x11, 1447dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 0xDE, 0xEE, 1457dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 0xFF, 0x7F, 1467dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 0x00, 0x80); 1477dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 1487dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1497dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test(expected=ExceptionWithContext.class) 1507dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteShortOutOfBounds() throws IOException { 1517dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeShort(0x8000); 1527dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 1537dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1547dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test(expected=ExceptionWithContext.class) 1557dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteShortOutOfBounds2() throws IOException { 1567dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeShort(-0x8001); 1577dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 1587dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1597dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 1607dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteUshort() throws IOException { 1617dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeUshort(0); 1627dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeUshort(0x1122); 1637dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeUshort(0x8899); 1647dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeUshort(0xFFFF); 1657dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1667dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(0x00, 0x00, 1677dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 0x22, 0x11, 1687dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 0x99, 0x88, 1697dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 0xFF, 0xFF); 1707dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 1717dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1727dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test(expected=ExceptionWithContext.class) 1737dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteUshortOutOfBounds() throws IOException { 1747dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeUshort(-1); 1757dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 1767dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1777dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test(expected=ExceptionWithContext.class) 1787dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteUshortOutOfBounds2() throws IOException { 1797dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeUshort(0x10000); 1807dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 1817dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1827dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 1837dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteUbyte() throws IOException { 1847dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeUbyte(0); 1857dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeUbyte(1); 1867dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeUbyte(0x12); 1877dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeUbyte(0xFF); 1887dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1897dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(0x00, 0x01, 0x12, 0xFF); 1907dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 1917dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1927dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test(expected=ExceptionWithContext.class) 1937dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteUbyteOutOfBounds() throws IOException { 1947dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeUbyte(-1); 1957dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 1967dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1977dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test(expected=ExceptionWithContext.class) 1987dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteUbyteOutOfBounds2() throws IOException { 1997dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeUbyte(256); 2007dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 2017dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2027dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 2037dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteEncodedValueHeader() throws IOException { 2047dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeEncodedValueHeader(0x2, 0x1); 2057dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2067dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(0x22); 2077dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 2087dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2097dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private void testWriteEncodedIntHelper(int integerValue, int... encodedValue) throws IOException { 2107dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver setup(); 2117dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeEncodedInt(ValueType.INT, integerValue); 2127dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2137dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver int[] arr = new int[encodedValue.length+1]; 2147dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver arr[0] = ValueType.INT | ((encodedValue.length-1) << 5); 2157dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver System.arraycopy(encodedValue, 0, arr, 1, encodedValue.length); 2167dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(arr); 2177dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 2187dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2197dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 2207dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteEncodedInt() throws IOException { 2217dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0x00, 0x00); 2227dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0x40, 0x40); 2237dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0x7f, 0x7f); 2247dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0xff, 0xff, 0x00); 2257dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0xffff80, 0x80, 0xff, 0xff, 0x00); 2267dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0xffffff80, 0x80); 2277dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0xffffffff, 0xff); 2287dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0x100, 0x00, 0x01); 2297dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0x7fff, 0xff, 0x7f); 2307dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0x8000, 0x00, 0x80, 0x00); 2317dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0xffff8000, 0x00, 0x80); 2327dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0x10000, 0x00, 0x00, 0x01); 2337dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0x10203, 0x03, 0x02, 0x01); 2347dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0x810203, 0x03, 0x02, 0x81, 0x00); 2357dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0xff810203, 0x03, 0x02, 0x81); 2367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0x1000000, 0x00, 0x00, 0x00, 0x01); 2377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0x1020304, 0x04, 0x03, 0x02, 0x01); 2387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0x7fffffff, 0xff, 0xff, 0xff, 0x7f); 2397dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0x80000000, 0x00, 0x00, 0x00, 0x80); 2407dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedIntHelper(0x80000001, 0x01, 0x00, 0x00, 0x80); 2417dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 2427dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2437dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private void testWriteEncodedUintHelper(int integerValue, int... encodedValue) throws IOException { 2447dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver setup(); 2457dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeEncodedUint(ValueType.METHOD, integerValue); 2467dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2477dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver int[] arr = new int[encodedValue.length+1]; 2487dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver arr[0] = ValueType.METHOD | ((encodedValue.length-1) << 5); 2497dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver System.arraycopy(encodedValue, 0, arr, 1, encodedValue.length); 2507dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(arr); 2517dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 2527dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2537dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 2547dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteEncodedUint() throws IOException { 2557dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x00, 0x00); 2567dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x01, 0x01); 2577dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x40, 0x40); 2587dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x7f, 0x7f); 2597dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x80, 0x80); 2607dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x81, 0x81); 2617dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0xff, 0xff); 2627dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x100, 0x00, 0x01); 2637dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x180, 0x80, 0x01); 2647dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x8080, 0x80, 0x80); 2657dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x1234, 0x34, 0x12); 2667dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x1000, 0x00, 0x10); 2677dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x8000, 0x00, 0x80); 2687dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0xff00, 0x00, 0xff); 2697dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0xffff, 0xff, 0xff); 2707dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x10000, 0x00, 0x00, 0x01); 2717dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x1ffff, 0xff, 0xff, 0x01); 2727dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x80ffff, 0xff, 0xff, 0x80); 2737dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0xffffff, 0xff, 0xff, 0xff); 2747dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x1000000, 0x00, 0x00, 0x00, 0x01); 2757dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x1020304, 0x04, 0x03, 0x02, 0x01); 2767dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x80000000, 0x00, 0x00, 0x00, 0x80); 2777dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0x80ffffff, 0xff, 0xff, 0xff, 0x80); 2787dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedUintHelper(0xffffffff, 0xff, 0xff, 0xff, 0xff); 2797dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 2807dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2817dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private void testWriteEncodedLongHelper(long longValue, int... encodedValue) throws IOException { 2827dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver setup(); 2837dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeEncodedLong(ValueType.LONG, longValue); 2847dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2857dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver int[] arr = new int[encodedValue.length+1]; 2867dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver arr[0] = ValueType.LONG | ((encodedValue.length-1) << 5); 2877dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver System.arraycopy(encodedValue, 0, arr, 1, encodedValue.length); 2887dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(arr); 2897dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 2907dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2917dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 2927dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteEncodedLong() throws IOException { 2937dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x00L, 0x00); 2947dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x40L, 0x40); 2957dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x7fL, 0x7f); 2967dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0xffL, 0xff, 0x00); 2977dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0xffffffffffffff80L, 0x80); 2987dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0xffffffffffffffffL, 0xff); 2997dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3007dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x100L, 0x00, 0x01); 3017dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x7fffL, 0xff, 0x7f); 3027dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x8000L, 0x00, 0x80, 0x00); 3037dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0xffffffffffff8000L, 0x00, 0x80); 3047dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3057dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x10000L, 0x00, 0x00, 0x01); 3067dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x10203L, 0x03, 0x02, 0x01); 3077dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x810203L, 0x03, 0x02, 0x81, 0x00); 3087dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0xffffffffff810203L, 0x03, 0x02, 0x81); 3097dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3107dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x1000000L, 0x00, 0x00, 0x00, 0x01); 3117dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x1020304L, 0x04, 0x03, 0x02, 0x01); 3127dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x7fffffffL, 0xff, 0xff, 0xff, 0x7f); 3137dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x80000000L, 0x00, 0x00, 0x00, 0x80, 0x00); 3147dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0xffffffff80000000L, 0x00, 0x00, 0x00, 0x80); 3157dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0xffffffff80000001L, 0x01, 0x00, 0x00, 0x80); 3167dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3177dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x100000000L, 0x00, 0x00, 0x00, 0x00, 0x01); 3187dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x102030405L, 0x05, 0x04, 0x03, 0x02, 0x01); 3197dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x7fffffffffL, 0xff, 0xff, 0xff, 0xff, 0x7f); 3207dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x8000000000L, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00); 3217dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0xffffff8000000000L, 0x00, 0x00, 0x00, 0x00, 0x80); 3227dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0xffffff8000000001L, 0x01, 0x00, 0x00, 0x00, 0x80); 3237dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3247dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x10000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); 3257dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x10203040506L, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01); 3267dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x7fffffffffffL, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f); 3277dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x800000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00); 3287dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0xffff800000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80); 3297dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0xffff800000000001L, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80); 3307dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3317dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x1000000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); 3327dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x1020304050607L, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01); 3337dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x7fffffffffffffL, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f); 3347dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x80000000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00); 3357dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0xff80000000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80); 3367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0xff80000000000001L, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80); 3377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x100000000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); 3397dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x102030405060708L, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01); 3407dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x7fffffffffffffffL, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f); 3417dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x8000000000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80); 3427dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x8000000000000001L, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80); 3437dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0xfeffffffffffffffL, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe); 3447dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3457dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteEncodedLongHelper(0x123456789ABCDEF0L, 0xF0, 0xDE, 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12); 3467dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 3477dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3487dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private void testWriteRightZeroExtendedIntHelper(int intValue, int... encodedValue) throws IOException { 3497dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver setup(); 3507dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeRightZeroExtendedInt(ValueType.FLOAT, intValue); 3517dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3527dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver int[] arr = new int[encodedValue.length+1]; 3537dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver arr[0] = ValueType.FLOAT | ((encodedValue.length-1) << 5); 3547dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver System.arraycopy(encodedValue, 0, arr, 1, encodedValue.length); 3557dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(arr); 3567dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 3577dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3587dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 3597dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteRightZeroExtendedInt() throws IOException { 3607dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0, 0x00); 3617dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3627dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x01000000, 0x01); 3637dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x7f000000, 0x7f); 3647dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x80000000, 0x80); 3657dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0xf0000000, 0xf0); 3667dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0xff000000, 0xff); 3677dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3687dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x010000, 0x01, 0x00); 3697dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x01100000, 0x10, 0x01); 3707dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x7f100000, 0x10, 0x7f); 3717dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x80100000, 0x10, 0x80); 3727dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0xf0100000, 0x10, 0xf0); 3737dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0xff100000, 0x10, 0xff); 3747dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0xff000000, 0xff); 3757dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3767dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x0100, 0x01, 0x00, 0x00); 3777dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x01101000, 0x10, 0x10, 0x01); 3787dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x7f101000, 0x10, 0x10, 0x7f); 3797dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x80101000, 0x10, 0x10, 0x80); 3807dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0xf0101000, 0x10, 0x10, 0xf0); 3817dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0xff101000, 0x10, 0x10, 0xff); 3827dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3837dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x01, 0x01, 0x00, 0x00, 0x00); 3847dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x80, 0x80, 0x00, 0x00, 0x00); 3857dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0xff, 0xff, 0x00, 0x00, 0x00); 3867dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x01101010, 0x10, 0x10, 0x10, 0x01); 3877dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x7f101010, 0x10, 0x10, 0x10, 0x7f); 3887dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0x80101010, 0x10, 0x10, 0x10, 0x80); 3897dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0xf0101010, 0x10, 0x10, 0x10, 0xf0); 3907dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedIntHelper(0xff101010, 0x10, 0x10, 0x10, 0xff); 3917dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 3927dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3937dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private void testWriteRightZeroExtendedLongHelper(long longValue, int... encodedValue) throws IOException { 3947dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver setup(); 3957dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeRightZeroExtendedLong(ValueType.DOUBLE, longValue); 3967dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 3977dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver int[] arr = new int[encodedValue.length+1]; 3987dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver arr[0] = ValueType.DOUBLE | ((encodedValue.length-1) << 5); 3997dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver System.arraycopy(encodedValue, 0, arr, 1, encodedValue.length); 4007dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(arr); 4017dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 4027dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 4037dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 4047dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteRightZeroExtendedLong() throws IOException { 4057dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0, 0x00); 4067dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 4077dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x0100000000000000L, 0x01); 4087dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x7f00000000000000L, 0x7f); 4097dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x8000000000000000L, 0x80); 4107dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xf000000000000000L, 0xf0); 4117dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xff00000000000000L, 0xff); 4127dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 4137dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x01000000000000L, 0x01, 0x00); 4147dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x0110000000000000L, 0x10, 0x01); 4157dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x7f10000000000000L, 0x10, 0x7f); 4167dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x8010000000000000L, 0x10, 0x80); 4177dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xf010000000000000L, 0x10, 0xf0); 4187dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xff10000000000000L, 0x10, 0xff); 4197dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x7fff000000000000L, 0xff, 0x7f); 4207dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 4217dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x010000000000L, 0x01, 0x00, 0x00); 4227dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x0110100000000000L, 0x10, 0x10, 0x01); 4237dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x7f10100000000000L, 0x10, 0x10, 0x7f); 4247dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x8010100000000000L, 0x10, 0x10, 0x80); 4257dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xf010100000000000L, 0x10, 0x10, 0xf0); 4267dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xff10100000000000L, 0x10, 0x10, 0xff); 4277dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x7fffff0000000000L, 0xff, 0xff, 0x7f); 4287dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 4297dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x0100000000L, 0x01, 0x00, 0x00, 0x00); 4307dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x0110101000000000L, 0x10, 0x10, 0x10, 0x01); 4317dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x7f10101000000000L, 0x10, 0x10, 0x10, 0x7f); 4327dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x8010101000000000L, 0x10, 0x10, 0x10, 0x80); 4337dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xf010101000000000L, 0x10, 0x10, 0x10, 0xf0); 4347dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xff10101000000000L, 0x10, 0x10, 0x10, 0xff); 4357dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x7fffffff00000000L, 0xff, 0xff, 0xff, 0x7f); 4367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 4377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x01000000L, 0x01, 0x00, 0x00, 0x00, 0x00); 4387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x0110101010000000L, 0x10, 0x10, 0x10, 0x10, 0x01); 4397dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x7f10101010000000L, 0x10, 0x10, 0x10, 0x10, 0x7f); 4407dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x8010101010000000L, 0x10, 0x10, 0x10, 0x10, 0x80); 4417dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xf010101010000000L, 0x10, 0x10, 0x10, 0x10, 0xf0); 4427dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xff10101010000000L, 0x10, 0x10, 0x10, 0x10, 0xff); 4437dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x7fffffffff000000L, 0xff, 0xff, 0xff, 0xff, 0x7f); 4447dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 4457dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x010000L, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00); 4467dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x0110101010100000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x01); 4477dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x7f10101010100000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7f); 4487dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x8010101010100000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x80); 4497dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xf010101010100000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0); 4507dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xff10101010100000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff); 4517dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x7fffffffffff0000L, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f); 4527dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 4537dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x0100L, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); 4547dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x0110101010101000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x01); 4557dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x7f10101010101000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7f); 4567dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x8010101010101000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x80); 4577dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xf010101010101000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0); 4587dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xff10101010101000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff); 4597dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x7fffffffffffff00L, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f); 4607dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 4617dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x01L, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); 4627dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x0110101010101010L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x01); 4637dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x7f10101010101010L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7f); 4647dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0x8010101010101010L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x80); 4657dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xf010101010101010L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0); 4667dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(0xff10101010101010L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff); 4677dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(Long.MAX_VALUE, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f); 4687dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(Long.MIN_VALUE, 0x80); 4697dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteRightZeroExtendedLongHelper(-1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff); 4707dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 4717dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 4727dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private void testWriteStringHelper(String stringValue, int... encodedValue) throws IOException { 4737dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver setup(); 4747dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 4757dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeString(stringValue); 4767dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 4777dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(encodedValue); 4787dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 4797dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 4807dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 4817dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testWriteString() throws IOException { 4827dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0x00}), 0xc0, 0x80); 4837dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0x01}), 0x01); 4847dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0x40}), 0x40); 4857dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0x7f}), 0x7f); 4867dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0x80}), 0xc2, 0x80); 4877dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0x81}), 0xc2, 0x81); 4887dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0x100}), 0xc4, 0x80); 4897dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0x7ff}), 0xdf, 0xbf); 4907dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0x800}), 0xe0, 0xa0, 0x80); 4917dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0x801}), 0xe0, 0xa0, 0x81); 4927dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0x1000}), 0xe1, 0x80, 0x80); 4937dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0x7fff}), 0xe7, 0xbf, 0xbf); 4947dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0x8000}), 0xe8, 0x80, 0x80); 4957dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0x8001}), 0xe8, 0x80, 0x81); 4967dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver testWriteStringHelper(new String(new char[]{0xffff}), 0xef, 0xbf, 0xbf); 4977dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 4987dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 4997dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 5007dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testAlign() throws IOException { 5017dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver // create a new writer so we can start at file position 0 5027dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver startPosition = 0; 5031bf6f2324541df184689fdb2c0d8188af5221784Ben Gruver writer = new DexDataWriter(output, startPosition, 256); 5047dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 5057dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.align(); 5067dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(1); 5077dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.align(); 5087dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.align(); 5097dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 5107dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(1); 5117dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(2); 5127dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.align(); 5137dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 5147dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(1); 5157dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(2); 5167dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(3); 5177dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.align(); 5187dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.align(); 5197dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 5207dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(1); 5217dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(2); 5227dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(3); 5237dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(4); 5247dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.align(); 5257dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.align(); 5267dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.align(); 5277dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.align(); 5287dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 5297dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.write(1); 5307dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.align(); 5317dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 5327dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver expectData(0x01, 0x00, 0x00, 0x00, 5337dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 0x01, 0x02, 0x00, 0x00, 5347dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 0x01, 0x02, 0x03, 0x00, 5357dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 0x01, 0x02, 0x03, 0x04, 5367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 0x01, 0x00, 0x00, 0x00); 5377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 5387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver} 539