This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-text.git
The following commit(s) were added to refs/heads/master by this push: new 587bc9a Another edge case. 587bc9a is described below commit 587bc9aad3893069c03f4dfe9334b1a3f4fe135b Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Sat Jul 18 10:21:35 2020 -0400 Another edge case. --- .../org/apache/commons/text/io/StringSubstitutorReader.java | 12 +++++++++--- .../commons/text/io/StringSubstitutorFilterReaderTest.java | 8 ++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/apache/commons/text/io/StringSubstitutorReader.java b/src/main/java/org/apache/commons/text/io/StringSubstitutorReader.java index 064cf50..aea901c 100644 --- a/src/main/java/org/apache/commons/text/io/StringSubstitutorReader.java +++ b/src/main/java/org/apache/commons/text/io/StringSubstitutorReader.java @@ -108,7 +108,7 @@ public class StringSubstitutorReader extends FilterReader { // nothing or everything drained. toDrain = 0; } - return eos && drainCount == 0 ? EOS : drainCount; + return drainCount; } /** @@ -207,13 +207,19 @@ public class StringSubstitutorReader extends FilterReader { int readCount = buffer(readCount(minReadLenPrefix, 0)); if (buffer.length() < minReadLenPrefix && targetLength < minReadLenPrefix) { // read less than minReadLenPrefix, no variable possible - return drain(target, targetIndex, targetLength); + final int drainCount = drain(target, targetIndex, targetLength); + targetIndex += drainCount; + targetLength -= drainCount; + return eos && targetIndex == 0 ? EOS : targetIndex; } if (eos) { // EOS stringSubstitutor.replaceIn(buffer); toDrain = buffer.size(); - return drain(target, targetIndex, targetLength); + final int drainCount = drain(target, targetIndex, targetLength); + targetIndex += drainCount; + targetLength -= drainCount; + return eos && targetIndex == 0 ? EOS : targetIndex; } // PREFIX // buffer and drain until we find a variable start, escaped or plain. diff --git a/src/test/java/org/apache/commons/text/io/StringSubstitutorFilterReaderTest.java b/src/test/java/org/apache/commons/text/io/StringSubstitutorFilterReaderTest.java index 18c82f9..a14ad50 100644 --- a/src/test/java/org/apache/commons/text/io/StringSubstitutorFilterReaderTest.java +++ b/src/test/java/org/apache/commons/text/io/StringSubstitutorFilterReaderTest.java @@ -56,7 +56,11 @@ public class StringSubstitutorFilterReaderTest extends StringSubstitutorTest { private void doTestNoReplaceInSteps(final String replaceTemplate, final StringSubstitutor substitutor) throws IOException { doTestReplaceInCharSteps(substitutor, replaceTemplate, replaceTemplate, false); - doTestReplaceInCharArraySteps(substitutor, replaceTemplate, replaceTemplate, false, 1); + final int minStepSize = 1; + final int maxStepSize = 3; + for (int stepSize = minStepSize; stepSize < maxStepSize; stepSize++) { + doTestReplaceInCharArraySteps(substitutor, replaceTemplate, replaceTemplate, false, stepSize); + } } @Override @@ -78,7 +82,7 @@ public class StringSubstitutorFilterReaderTest extends StringSubstitutorTest { int actualCount; while ((actualCount = actualReader.read(actualCh)) != -1) { final int expectedCount = expectedResultReader.read(expectedCh); - assertEquals(actualCount, expectedCount); + assertEquals(actualCount, expectedCount, () -> String.format("Step size %,d", stepSize)); assertArrayEquals(expectedCh, actualCh, () -> String.format("[%,d] '%s' != '%s', result so far: \"%s\"", index.get(), String.valueOf(expectedCh), String.valueOf(actualCh), actualResultWriter.toString())); if (actualCount != -1) {