From 4fa7b507ec3a7953dfdbc9e624920397e2a96ed7 Mon Sep 17 00:00:00 2001 From: Rob Spoor Date: Wed, 8 Jul 2020 21:25:39 +0200 Subject: [PATCH] Implemented CharSequenceReader.ready --- .../commons/io/input/CharSequenceReader.java | 10 +++++ .../io/input/CharSequenceReaderTest.java | 38 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/main/java/org/apache/commons/io/input/CharSequenceReader.java b/src/main/java/org/apache/commons/io/input/CharSequenceReader.java index a2d845fdbc5..499ea6e4df5 100644 --- a/src/main/java/org/apache/commons/io/input/CharSequenceReader.java +++ b/src/main/java/org/apache/commons/io/input/CharSequenceReader.java @@ -165,6 +165,16 @@ public void close() { mark = start; } + /** + * Tells whether this stream is ready to be read. + * + * @return {@code true} if more characters from the character sequence are available, or {@code false} otherwise. + */ + @Override + public boolean ready() { + return idx < end(); + } + /** * Mark the current position. * diff --git a/src/test/java/org/apache/commons/io/input/CharSequenceReaderTest.java b/src/test/java/org/apache/commons/io/input/CharSequenceReaderTest.java index 311e8097e6f..5978f2c5591 100644 --- a/src/test/java/org/apache/commons/io/input/CharSequenceReaderTest.java +++ b/src/test/java/org/apache/commons/io/input/CharSequenceReaderTest.java @@ -17,6 +17,7 @@ package org.apache.commons.io.input; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -51,6 +52,43 @@ public void testClose() throws IOException { checkRead(subReader, "Foo"); } + @Test + public void testReady() throws IOException { + final Reader reader = new CharSequenceReader("FooBar"); + assertTrue(reader.ready()); + reader.skip(3); + assertTrue(reader.ready()); + checkRead(reader, "Bar"); + assertFalse(reader.ready()); + reader.reset(); + assertTrue(reader.ready()); + reader.skip(2); + assertTrue(reader.ready()); + reader.skip(10); + assertFalse(reader.ready()); + reader.close(); + assertTrue(reader.ready()); + reader.skip(20); + assertFalse(reader.ready()); + + final Reader subReader = new CharSequenceReader("xFooBarx", 1, 7); + assertTrue(subReader.ready()); + subReader.skip(3); + assertTrue(subReader.ready()); + checkRead(subReader, "Bar"); + assertFalse(subReader.ready()); + subReader.reset(); + assertTrue(subReader.ready()); + subReader.skip(2); + assertTrue(subReader.ready()); + subReader.skip(10); + assertFalse(subReader.ready()); + subReader.close(); + assertTrue(subReader.ready()); + subReader.skip(20); + assertFalse(subReader.ready()); + } + @Test public void testMarkSupported() throws Exception { try (final Reader reader = new CharSequenceReader("FooBar")) {