/* * Copyright 2012 The Netty Project * * The Netty Project licenses this file to you 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 io.netty.buffer; import org.junit.Test; import java.io.EOFException; import java.nio.charset.Charset; import static io.netty.util.internal.EmptyArrays.*; import static org.junit.Assert.*; /** * Tests channel buffer streams */ public class ByteBufStreamTest { @Test public void testAll() throws Exception { ByteBuf buf = Unpooled.buffer(0, 65536); try { new ByteBufOutputStream(null); fail(); } catch (NullPointerException e) { // Expected } ByteBufOutputStream out = new ByteBufOutputStream(buf); assertSame(buf, out.buffer()); out.writeBoolean(true); out.writeBoolean(false); out.writeByte(42); out.writeByte(224); out.writeBytes("Hello, World!"); out.writeChars("Hello, World"); out.writeChar('!'); out.writeDouble(42.0); out.writeFloat(42.0f); out.writeInt(42); out.writeLong(42); out.writeShort(42); out.writeShort(49152); out.writeUTF("Hello, World!"); out.writeBytes("The first line\r\r\n"); out.write(EMPTY_BYTES); out.write(new byte[] { 1, 2, 3, 4 }); out.write(new byte[] { 1, 3, 3, 4 }, 0, 0); out.close(); try { new ByteBufInputStream(null); fail(); } catch (NullPointerException e) { // Expected } try { new ByteBufInputStream(null, 0); fail(); } catch (NullPointerException e) { // Expected } try { new ByteBufInputStream(buf, -1); } catch (IllegalArgumentException e) { // Expected } try { new ByteBufInputStream(buf, buf.capacity() + 1); } catch (IndexOutOfBoundsException e) { // Expected } ByteBufInputStream in = new ByteBufInputStream(buf); assertTrue(in.markSupported()); in.mark(Integer.MAX_VALUE); assertEquals(buf.writerIndex(), in.skip(Long.MAX_VALUE)); assertFalse(buf.isReadable()); in.reset(); assertEquals(0, buf.readerIndex()); assertEquals(4, in.skip(4)); assertEquals(4, buf.readerIndex()); in.reset(); assertTrue(in.readBoolean()); assertFalse(in.readBoolean()); assertEquals(42, in.readByte()); assertEquals(224, in.readUnsignedByte()); byte[] tmp = new byte[13]; in.readFully(tmp); assertEquals("Hello, World!", new String(tmp, "ISO-8859-1")); assertEquals('H', in.readChar()); assertEquals('e', in.readChar()); assertEquals('l', in.readChar()); assertEquals('l', in.readChar()); assertEquals('o', in.readChar()); assertEquals(',', in.readChar()); assertEquals(' ', in.readChar()); assertEquals('W', in.readChar()); assertEquals('o', in.readChar()); assertEquals('r', in.readChar()); assertEquals('l', in.readChar()); assertEquals('d', in.readChar()); assertEquals('!', in.readChar()); assertEquals(42.0, in.readDouble(), 0.0); assertEquals(42.0f, in.readFloat(), 0.0); assertEquals(42, in.readInt()); assertEquals(42, in.readLong()); assertEquals(42, in.readShort()); assertEquals(49152, in.readUnsignedShort()); assertEquals("Hello, World!", in.readUTF()); assertEquals("The first line", in.readLine()); assertEquals("", in.readLine()); assertEquals(4, in.read(tmp)); assertEquals(1, tmp[0]); assertEquals(2, tmp[1]); assertEquals(3, tmp[2]); assertEquals(4, tmp[3]); assertEquals(-1, in.read()); assertEquals(-1, in.read(tmp)); try { in.readByte(); fail(); } catch (EOFException e) { // Expected } try { in.readFully(tmp, 0, -1); fail(); } catch (IndexOutOfBoundsException e) { // Expected } try { in.readFully(tmp); fail(); } catch (EOFException e) { // Expected } in.close(); assertEquals(buf.readerIndex(), in.readBytes()); } @Test public void testReadLine() throws Exception { Charset utf8 = Charset.forName("UTF-8"); ByteBuf buf = Unpooled.buffer(); ByteBufInputStream in = new ByteBufInputStream(buf); String s = in.readLine(); assertNull(s); int charCount = 5; //total chars in the string below without new line characters byte[] abc = "a\nb\r\nc\nd\ne".getBytes(utf8); buf.writeBytes(abc); in.mark(charCount); assertEquals("a", in.readLine()); assertEquals("b", in.readLine()); assertEquals("c", in.readLine()); assertEquals("d", in.readLine()); assertEquals("e", in.readLine()); assertNull(in.readLine()); in.reset(); int count = 0; while (in.readLine() != null) { ++count; if (count > charCount) { fail("readLine() should have returned null"); } } assertEquals(charCount, count); in.close(); } }