2 * Copyright (C) 2014, United States Government, as represented by the
3 * Administrator of the National Aeronautics and Space Administration.
6 * The Java Pathfinder core (jpf-core) platform is licensed under the
7 * Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0.
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 package gov.nasa.jpf.util;
20 import gov.nasa.jpf.util.test.TestJPF;
21 import java.io.IOException;
22 import java.io.PipedInputStream;
23 import java.io.PipedOutputStream;
25 import org.junit.After;
26 import org.junit.Before;
27 import org.junit.Test;
29 public class AvailableBufferedInputStreamTest extends TestJPF {
31 private static final int PIPE_SIZE = 1024 * 1024;
33 private PipedOutputStream m_output;
34 private AvailableBufferedInputStream m_input;
37 public void before() throws IOException {
38 m_output = new PipedOutputStream();
39 m_input = new AvailableBufferedInputStream(new PipedInputStream(m_output, PIPE_SIZE));
43 public void after() throws IOException {
48 assertEquals(0, m_input.available());
49 assertEquals(-1, m_input.peek());
50 assertEquals(-1, m_input.read());
56 @Test(expected = NullPointerException.class)
57 public void passNullPointerToConstructor() throws IOException {
58 new AvailableBufferedInputStream(null).close();
62 public void availableStuck() throws IOException {
65 for (i = 10; --i >= 0;) {
68 assertEquals(1, m_input.available());
71 for (i = 10; --i >= 0;) {
72 assertEquals(i, m_input.peek());
73 assertEquals(i, m_input.read());
78 public void unreadExtra() throws IOException {
85 assertEquals(20, m_input.peek());
86 assertEquals(20, m_input.read()); // Load the buffer
88 for (i = 0; i < 10; i++) {
92 for (i = 10; --i >= 0;) {
93 assertEquals(i, m_input.peek());
94 assertEquals(i, m_input.read());
95 assertEquals(i + 1, m_input.available());
98 assertEquals(21, m_input.peek());
99 assertEquals(21, m_input.read());
103 public void unreadMinus1() throws IOException {
105 assertEquals(0x00FF, m_input.peek());
106 assertEquals(0x00FF, m_input.read());
110 public void readBufferSplit() throws IOException {
113 buffer = new byte[2];
123 assertEquals(30, m_input.peek());
124 assertEquals(1, m_input.read(buffer));
125 assertEquals(30, buffer[0]);
127 assertEquals(40, m_input.peek());
128 assertEquals(1, m_input.read(buffer));
129 assertEquals(40, buffer[0]);
133 public void readBufferPartialNoBlock() throws IOException {
136 buffer = new byte[2];
141 assertEquals(30, m_input.peek());
142 assertEquals(1, m_input.read(buffer));
143 assertEquals(30, buffer[0]);
147 public void readBufferLeftOver() throws IOException {
150 buffer = new byte[2];
157 assertEquals(30, m_input.peek());
158 assertEquals(2, m_input.read(buffer));
159 assertEquals(30, buffer[0]);
160 assertEquals(40, buffer[1]);
162 assertEquals(50, m_input.peek());
163 assertEquals(1, m_input.read(buffer));
164 assertEquals(50, buffer[0]);
165 assertEquals(40, buffer[1]);
169 public void unreadOverflow() throws IOException {
173 for (i = 0; i < m_input.getBufferSize(); i++) {
175 assertEquals(i & 0x00FF, m_input.peek());
177 } catch (IOException e) {
184 } catch (IOException e) {
185 e = null; // Get rid of IDE warning
188 for (i = m_input.getBufferSize(); --i >= 0;) {
189 assertEquals(i & 0x00FF, m_input.peek());
190 assertEquals(i & 0x00FF, m_input.read());
195 public void fillWithNoMoreData() throws IOException {
196 assertEquals(0, m_input.available());
197 assertEquals(0, m_input.available());
201 public void fillWithTooMuchData() throws IOException {
204 for (i = 0; i < m_input.getBufferSize() + 1; i++) {
210 assertEquals(m_input.getBufferSize(), m_input.available());
212 for (i = 0; i < m_input.getBufferSize() + 1; i++) {
213 assertEquals(i & 0x00FF, m_input.peek());
214 assertEquals(i & 0x00FF, m_input.read());
219 public void readAfterClose() throws IOException {
227 assertEquals(10, m_input.peek());
228 assertEquals(10, m_input.read());
229 assertEquals(-1, m_input.peek());
230 assertEquals(-1, m_input.read());
234 public void readBufferAfterClose() throws IOException {
244 buffer = new byte[10];
246 assertEquals(1, m_input.read(buffer));
247 assertEquals(-1, m_input.read(buffer));
251 public void testToString() throws IOException {
254 assertEquals("", m_input.toString());
256 m_output.write(new byte[]{'h', 'e', 'l', 'l', 'o'});
261 assertEquals("hello", m_input.toString());
263 for (i = 5; --i >= 0;) {
269 public void readBufferEmptyBuffer() throws IOException {
275 buffer = new byte[1];
277 assertEquals(1, m_input.read(buffer));
278 assertEquals(10, buffer[0]);