Skip to content

Commit 6c06f5b

Browse files
authored
Implemented CharSequenceReader.ready (#122)
1 parent 2fd3455 commit 6c06f5b

2 files changed

Lines changed: 48 additions & 0 deletions

File tree

src/main/java/org/apache/commons/io/input/CharSequenceReader.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,16 @@ public void close() {
165165
mark = start;
166166
}
167167

168+
/**
169+
* Tells whether this stream is ready to be read.
170+
*
171+
* @return {@code true} if more characters from the character sequence are available, or {@code false} otherwise.
172+
*/
173+
@Override
174+
public boolean ready() {
175+
return idx < end();
176+
}
177+
168178
/**
169179
* Mark the current position.
170180
*

src/test/java/org/apache/commons/io/input/CharSequenceReaderTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.apache.commons.io.input;
1818

1919
import static org.junit.jupiter.api.Assertions.assertEquals;
20+
import static org.junit.jupiter.api.Assertions.assertFalse;
2021
import static org.junit.jupiter.api.Assertions.assertThrows;
2122
import static org.junit.jupiter.api.Assertions.assertTrue;
2223

@@ -51,6 +52,43 @@ public void testClose() throws IOException {
5152
checkRead(subReader, "Foo");
5253
}
5354

55+
@Test
56+
public void testReady() throws IOException {
57+
final Reader reader = new CharSequenceReader("FooBar");
58+
assertTrue(reader.ready());
59+
reader.skip(3);
60+
assertTrue(reader.ready());
61+
checkRead(reader, "Bar");
62+
assertFalse(reader.ready());
63+
reader.reset();
64+
assertTrue(reader.ready());
65+
reader.skip(2);
66+
assertTrue(reader.ready());
67+
reader.skip(10);
68+
assertFalse(reader.ready());
69+
reader.close();
70+
assertTrue(reader.ready());
71+
reader.skip(20);
72+
assertFalse(reader.ready());
73+
74+
final Reader subReader = new CharSequenceReader("xFooBarx", 1, 7);
75+
assertTrue(subReader.ready());
76+
subReader.skip(3);
77+
assertTrue(subReader.ready());
78+
checkRead(subReader, "Bar");
79+
assertFalse(subReader.ready());
80+
subReader.reset();
81+
assertTrue(subReader.ready());
82+
subReader.skip(2);
83+
assertTrue(subReader.ready());
84+
subReader.skip(10);
85+
assertFalse(subReader.ready());
86+
subReader.close();
87+
assertTrue(subReader.ready());
88+
subReader.skip(20);
89+
assertFalse(subReader.ready());
90+
}
91+
5492
@Test
5593
public void testMarkSupported() throws Exception {
5694
try (final Reader reader = new CharSequenceReader("FooBar")) {

0 commit comments

Comments
 (0)