private void testCharsetMismatchInfiniteLoop(final String csName) throws IOException { // Input is UTF-8 bytes: 0xE0 0xB2 0xA0 final char[] inputChars = new char[] { (char) 0xE0, (char) 0xB2, (char) 0xA0 }; final Charset charset = Charset.forName(csName); // infinite loop for US-ASCII, UTF-8 OK try (InputStream stream = new CharSequenceInputStream(new String(inputChars), charset, 512)) { while (stream.read() != -1) { } } }
private void testReadZero(final String csName) throws Exception { try (InputStream r = new CharSequenceInputStream("test", csName)) { final byte[] bytes = new byte[30]; assertEquals(0, r.read(bytes, 0, 0)); } }
@Test public void testReadZero_EmptyString() throws Exception { try (InputStream r = new CharSequenceInputStream("", "UTF-8")) { final byte[] bytes = new byte[30]; assertEquals(0, r.read(bytes, 0, 0)); } }
@Test public void testMarkSupported() throws Exception { try (InputStream r = new CharSequenceInputStream("test", "UTF-8")) { assertTrue(r.markSupported()); } }
private void testSkip(final String csName) throws Exception { try (InputStream r = new CharSequenceInputStream("test", csName)) { assertEquals(1, r.skip(1)); assertEquals(2, r.skip(2)); assertEquals(csName, 't', r.read()); r.skip(100); assertEquals(csName, -1, r.read()); } }
private void testAvailableRead(final String csName) throws Exception { final String input = "test"; try (InputStream r = new CharSequenceInputStream(input, csName)) { int available = checkAvail(r, input.length()); byte buff[] = new byte[available]; assertEquals(available - 1, r.skip(available - 1)); // skip all but one available = checkAvail(r, 1); buff = new byte[available]; assertEquals(available, r.read(buff, 0, available)); } }
private void testSingleByteRead(final String testString, final String charsetName) throws IOException { final byte[] bytes = testString.getBytes(charsetName); try (InputStream in = new CharSequenceInputStream(testString, charsetName, 512)) { for (final byte b : bytes) { final int read = in.read(); assertTrue("read " + read + " >=0 ", read >= 0); assertTrue("read " + read + " <= 255", read <= 255); assertEquals("Should agree with input", b, (byte) read); } assertEquals(-1, in.read()); } }
private void testMarkReset(final String csName) throws Exception { try (InputStream r = new CharSequenceInputStream("test", csName)) { assertEquals(2, r.skip(2)); r.mark(0); assertEquals(csName, 's', r.read()); assertEquals(csName, 't', r.read()); assertEquals(csName, -1, r.read()); r.reset(); assertEquals(csName, 's', r.read()); assertEquals(csName, 't', r.read()); assertEquals(csName, -1, r.read()); r.reset(); r.reset(); } }
private void testAvailableSkip(final String csName) throws Exception { final String input = "test"; try (InputStream r = new CharSequenceInputStream(input, csName)) { int available = checkAvail(r, input.length()); assertEquals(available - 1, r.skip(available - 1)); // skip all but one available = checkAvail(r, 1); assertEquals(1, r.skip(1)); available = checkAvail(r, 0); } }
private void testBufferedRead(final String testString, final String charsetName) throws IOException { final byte[] expected = testString.getBytes(charsetName); try (InputStream in = new CharSequenceInputStream(testString, charsetName, 512)) { final byte[] buffer = new byte[128]; int offset = 0; while (true) { int bufferOffset = random.nextInt(64); final int bufferLength = random.nextInt(64); int read = in.read(buffer, bufferOffset, bufferLength); if (read == -1) { assertEquals("EOF: offset should equal length for charset " + charsetName, expected.length, offset); break; } else { assertTrue("Read " + read + " <= " + bufferLength, read <= bufferLength); while (read > 0) { assertTrue("offset for " + charsetName + " " + offset + " < " + expected.length, offset < expected.length); assertEquals("bytes should agree for " + charsetName, expected[offset], buffer[bufferOffset]); offset++; bufferOffset++; read--; } } } } }
private void testIO_356(final int bufferSize, final int dataSize, final int readFirst, final String csName) throws Exception { final CharSequenceInputStream is = new CharSequenceInputStream(ALPHABET, csName, bufferSize); for (int i = 0; i < readFirst; i++) { final int ch = is.read(); assertFalse(ch == -1); } is.mark(dataSize); final byte[] data1 = new byte[dataSize]; final int readCount1 = is.read(data1); assertEquals(dataSize, readCount1); is.reset(); // should allow data to be re-read final byte[] data2 = new byte[dataSize]; final int readCount2 = is.read(data2); assertEquals(dataSize, readCount2); is.close(); // data buffers should be identical assertArrayEquals("bufferSize=" + bufferSize + " dataSize=" + dataSize, data1, data2); }
InputStream stdin = new CharSequenceInputStream(inputTableAsCsv, StandardCharsets.UTF_8); ByteArrayOutputStream stderr = new ByteArrayOutputStream(); ByteArrayOutputStream stdout = new ByteArrayOutputStream();