11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2010 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.io; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Charsets; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.primitives.Bytes; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.io.ByteArrayInputStream; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.io.ByteArrayOutputStream; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.io.DataInput; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.io.DataInputStream; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.io.IOException; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Test class for {@link LittleEndianDataOutputStream}. 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Keith Bottner 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class LittleEndianDataOutputStreamTest extends TestCase { 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private ByteArrayOutputStream baos = new ByteArrayOutputStream(); 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private LittleEndianDataOutputStream out = new LittleEndianDataOutputStream(baos); 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testWriteLittleEndian() throws IOException { 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Write out various test values in LITTLE ENDIAN FORMAT */ 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.write(new byte[] { -100, 100 }); 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeBoolean(true); 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeBoolean(false); 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeByte(100); 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeByte(-100); 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeByte((byte) 200); 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeChar('a'); 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeShort((short) -30000); 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeShort((short) 50000); 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeInt(0xCAFEBABE); 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeLong(0xDEADBEEFCAFEBABEL); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeUTF("Herby Derby"); 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeFloat(Float.intBitsToFloat(0xCAFEBABE)); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeDouble(Double.longBitsToDouble(0xDEADBEEFCAFEBABEL)); 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert byte[] data = baos.toByteArray(); 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Setup input streams */ 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert DataInput in = new DataInputStream(new ByteArrayInputStream(data)); 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Read in various values NORMALLY */ 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert byte[] b = new byte[2]; 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert in.readFully(b); 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-100, b[0]); 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(100, b[1]); 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(true, in.readBoolean()); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(false, in.readBoolean()); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(100, in.readByte()); 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-100, in.readByte()); 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(200, in.readUnsignedByte()); 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals('\u6100', in.readChar()); 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-12150, in.readShort()); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(20675, in.readUnsignedShort()); 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0xBEBAFECA, in.readInt()); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0xBEBAFECAEFBEADDEL, in.readLong()); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("Herby Derby", in.readUTF()); 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0xBEBAFECA, Float.floatToIntBits(in.readFloat())); 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0xBEBAFECAEFBEADDEL, Double.doubleToLongBits(in.readDouble())); 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("deprecation") // testing a deprecated method 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testWriteBytes() throws IOException { 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Write out various test values in LITTLE ENDIAN FORMAT */ 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeBytes("r\u00C9sum\u00C9"); 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert byte[] data = baos.toByteArray(); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Setup input streams */ 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert DataInput in = new DataInputStream(new ByteArrayInputStream(data)); 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Read in various values NORMALLY */ 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert byte[] b = new byte[6]; 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert in.readFully(b); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("r\u00C9sum\u00C9".getBytes(Charsets.ISO_8859_1), b); 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("deprecation") // testing a deprecated method 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testWriteBytes_discardHighOrderBytes() throws IOException { 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Write out various test values in LITTLE ENDIAN FORMAT */ 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeBytes("\uAAAA\uAABB\uAACC"); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert byte[] data = baos.toByteArray(); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Setup input streams */ 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert DataInput in = new DataInputStream(new ByteArrayInputStream(data)); 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Read in various values NORMALLY */ 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert byte[] b = new byte[3]; 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert in.readFully(b); 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert byte[] expected = {(byte) 0xAA, (byte) 0xBB, (byte) 0xCC}; 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, b); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testWriteChars() throws IOException { 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Write out various test values in LITTLE ENDIAN FORMAT */ 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert out.writeChars("r\u00C9sum\u00C9"); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert byte[] data = baos.toByteArray(); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Setup input streams */ 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert DataInput in = new DataInputStream(new ByteArrayInputStream(data)); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Read in various values NORMALLY */ 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert byte[] actual = new byte[12]; 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert in.readFully(actual); 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals('r', actual[0]); 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, actual[1]); 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((byte) 0xC9, actual[2]); 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, actual[3]); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals('s', actual[4]); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, actual[5]); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals('u', actual[6]); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, actual[7]); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals('m', actual[8]); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, actual[9]); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((byte) 0xC9, actual[10]); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, actual[11]); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void assertEquals(byte[] expected, byte[] actual) { 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Bytes.asList(expected), Bytes.asList(actual)); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 149