diff src/tests/gov/nasa/jpf/util/AvailableBufferedInputStreamTest.java @ 0:61d41facf527

initial v8 import (history reset)
author Peter Mehlitz <Peter.C.Mehlitz@nasa.gov>
date Fri, 23 Jan 2015 10:14:01 -0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/tests/gov/nasa/jpf/util/AvailableBufferedInputStreamTest.java	Fri Jan 23 10:14:01 2015 -0800
@@ -0,0 +1,280 @@
+/*
+ * Copyright (C) 2014, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ * All rights reserved.
+ *
+ * The Java Pathfinder core (jpf-core) platform is 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 gov.nasa.jpf.util;
+
+import gov.nasa.jpf.util.test.TestJPF;
+import java.io.IOException;
+import java.io.PipedInputStream;
+import java.io.PipedOutputStream;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class AvailableBufferedInputStreamTest extends TestJPF {
+
+  private static final int PIPE_SIZE = 1024 * 1024;
+
+  private PipedOutputStream m_output;
+  private AvailableBufferedInputStream m_input;
+
+  @Before
+  public void before() throws IOException {
+    m_output = new PipedOutputStream();
+    m_input = new AvailableBufferedInputStream(new PipedInputStream(m_output, PIPE_SIZE));
+  }
+
+  @After
+  public void after() throws IOException {
+    m_output.flush();
+    m_output.close();
+    m_output = null;
+
+    assertEquals(0, m_input.available());
+    assertEquals(-1, m_input.peek());
+    assertEquals(-1, m_input.read());
+
+    m_input.close();
+    m_input = null;
+  }
+
+  @Test(expected = NullPointerException.class)
+  public void passNullPointerToConstructor() throws IOException {
+    new AvailableBufferedInputStream(null).close();
+  }
+
+  @Test
+  public void availableStuck() throws IOException {
+    int i;
+
+    for (i = 10; --i >= 0;) {
+      m_output.write(i);
+      m_output.flush();
+      assertEquals(1, m_input.available());
+    }
+
+    for (i = 10; --i >= 0;) {
+      assertEquals(i, m_input.peek());
+      assertEquals(i, m_input.read());
+    }
+  }
+
+  @Test
+  public void unreadExtra() throws IOException {
+    int i;
+
+    m_output.write(20);
+    m_output.write(21);
+    m_output.flush();
+
+    assertEquals(20, m_input.peek());
+    assertEquals(20, m_input.read());  // Load the buffer
+
+    for (i = 0; i < 10; i++) {
+      m_input.unread(i);
+    }
+
+    for (i = 10; --i >= 0;) {
+      assertEquals(i, m_input.peek());
+      assertEquals(i, m_input.read());
+      assertEquals(i + 1, m_input.available());
+    }
+
+    assertEquals(21, m_input.peek());
+    assertEquals(21, m_input.read());
+  }
+
+  @Test
+  public void unreadMinus1() throws IOException {
+    m_input.unread(-1);
+    assertEquals(0x00FF, m_input.peek());
+    assertEquals(0x00FF, m_input.read());
+  }
+
+  @Test
+  public void readBufferSplit() throws IOException {
+    byte buffer[];
+
+    buffer = new byte[2];
+
+    m_output.write(30);
+    m_output.flush();
+
+    m_input.available();
+
+    m_output.write(40);
+    m_output.flush();
+
+    assertEquals(30, m_input.peek());
+    assertEquals(1, m_input.read(buffer));
+    assertEquals(30, buffer[0]);
+
+    assertEquals(40, m_input.peek());
+    assertEquals(1, m_input.read(buffer));
+    assertEquals(40, buffer[0]);
+  }
+
+  @Test
+  public void readBufferPartialNoBlock() throws IOException {
+    byte buffer[];
+
+    buffer = new byte[2];
+
+    m_output.write(30);
+    m_output.flush();
+
+    assertEquals(30, m_input.peek());
+    assertEquals(1, m_input.read(buffer));
+    assertEquals(30, buffer[0]);
+  }
+
+  @Test
+  public void readBufferLeftOver() throws IOException {
+    byte buffer[];
+
+    buffer = new byte[2];
+
+    m_output.write(30);
+    m_output.write(40);
+    m_output.write(50);
+    m_output.flush();
+
+    assertEquals(30, m_input.peek());
+    assertEquals(2, m_input.read(buffer));
+    assertEquals(30, buffer[0]);
+    assertEquals(40, buffer[1]);
+
+    assertEquals(50, m_input.peek());
+    assertEquals(1, m_input.read(buffer));
+    assertEquals(50, buffer[0]);
+    assertEquals(40, buffer[1]);
+  }
+
+  @Test
+  public void unreadOverflow() throws IOException {
+    int i;
+
+    try {
+      for (i = 0; i < m_input.getBufferSize(); i++) {
+        m_input.unread(i);
+        assertEquals(i & 0x00FF, m_input.peek());
+      }
+    } catch (IOException e) {
+      fail();
+    }
+
+    try {
+      m_input.unread(0);
+      fail();
+    } catch (IOException e) {
+      e = null;  // Get rid of IDE warning
+    }
+
+    for (i = m_input.getBufferSize(); --i >= 0;) {
+      assertEquals(i & 0x00FF, m_input.peek());
+      assertEquals(i & 0x00FF, m_input.read());
+    }
+  }
+
+  @Test
+  public void fillWithNoMoreData() throws IOException {
+    assertEquals(0, m_input.available());
+    assertEquals(0, m_input.available());
+  }
+
+  @Test
+  public void fillWithTooMuchData() throws IOException {
+    int i;
+
+    for (i = 0; i < m_input.getBufferSize() + 1; i++) {
+      m_output.write(i);
+    }
+
+    m_output.flush();
+
+    assertEquals(m_input.getBufferSize(), m_input.available());
+
+    for (i = 0; i < m_input.getBufferSize() + 1; i++) {
+      assertEquals(i & 0x00FF, m_input.peek());
+      assertEquals(i & 0x00FF, m_input.read());
+    }
+  }
+
+  @Test
+  public void readAfterClose() throws IOException {
+    m_output.write(10);
+    m_output.flush();
+
+    m_input.available();
+
+    m_output.close();
+
+    assertEquals(10, m_input.peek());
+    assertEquals(10, m_input.read());
+    assertEquals(-1, m_input.peek());
+    assertEquals(-1, m_input.read());
+  }
+
+  @Test
+  public void readBufferAfterClose() throws IOException {
+    byte buffer[];
+
+    m_output.write(10);
+    m_output.flush();
+
+    m_input.available();
+
+    m_output.close();
+
+    buffer = new byte[10];
+
+    assertEquals(1, m_input.read(buffer));
+    assertEquals(-1, m_input.read(buffer));
+  }
+
+  @Test
+  public void testToString() throws IOException {
+    int i;
+
+    assertEquals("", m_input.toString());
+
+    m_output.write(new byte[]{'h', 'e', 'l', 'l', 'o'});
+    m_output.flush();
+
+    m_input.available();
+
+    assertEquals("hello", m_input.toString());
+
+    for (i = 5; --i >= 0;) {
+      m_input.read();
+    }
+  }
+
+  @Test
+  public void readBufferEmptyBuffer() throws IOException {
+    byte buffer[];
+
+    m_output.write(10);
+    m_output.flush();
+
+    buffer = new byte[1];
+
+    assertEquals(1, m_input.read(buffer));
+    assertEquals(10, buffer[0]);
+  }
+}