You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2018/11/07 23:10:39 UTC

[text] [TEXT-138] TextStringBuilder append sub-sequence not consistent with Appendable.

Repository: commons-text
Updated Branches:
  refs/heads/master f0ae79e46 -> 70c080b14


[TEXT-138] TextStringBuilder append sub-sequence not consistent with
Appendable.

Project: http://git-wip-us.apache.org/repos/asf/commons-text/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-text/commit/70c080b1
Tree: http://git-wip-us.apache.org/repos/asf/commons-text/tree/70c080b1
Diff: http://git-wip-us.apache.org/repos/asf/commons-text/diff/70c080b1

Branch: refs/heads/master
Commit: 70c080b146e8e6fb79cd97f780b65f863d4ec6d8
Parents: f0ae79e
Author: Don Jeba <do...@yahoo.com>
Authored: Wed Nov 7 16:10:36 2018 -0700
Committer: Gary Gregory <ga...@gmail.com>
Committed: Wed Nov 7 16:10:36 2018 -0700

----------------------------------------------------------------------
 src/changes/changes.xml                         |  1 +
 .../apache/commons/text/StringSubstitutor.java  |  2 +-
 .../apache/commons/text/TextStringBuilder.java  | 14 ++++++---
 .../text/TextStringBuilderAppendInsertTest.java | 30 +++++++++++++++++++-
 4 files changed, 41 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-text/blob/70c080b1/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 06409d3..e664c37 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -48,6 +48,7 @@ The <action> type attribute can be add,update,fix,remove.
   <release version="1.7" date="2018-MM-DD" description="Release 1.7">
     <action issue="TEXT-148" type="add" dev="ggregory">Add an enum to the lookup package that lists all StringLookups</action>
     <action issue="TEXT-127" type="add" dev="ggregory" due-to="Jean-Baptiste REICH, Sebb, Don Jeba, Gary Gregory">Add a toggle to throw an exception when a variable is unknown in StringSubstitutor</action>
+    <action issue="TEXT-138" type="add" dev="ggregory" due-to="Neal Johnson, Don Jeba">TextStringBuilder append sub-sequence not consistent with Appendable.</action>
   </release>
 
   <release version="1.6" date="2018-10-12" description="Release 1.6">

http://git-wip-us.apache.org/repos/asf/commons-text/blob/70c080b1/src/main/java/org/apache/commons/text/StringSubstitutor.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/text/StringSubstitutor.java b/src/main/java/org/apache/commons/text/StringSubstitutor.java
index 87da0d6..f4b53ee 100644
--- a/src/main/java/org/apache/commons/text/StringSubstitutor.java
+++ b/src/main/java/org/apache/commons/text/StringSubstitutor.java
@@ -720,7 +720,7 @@ public class StringSubstitutor {
         if (source == null) {
             return null;
         }
-        final TextStringBuilder buf = new TextStringBuilder(length).append(source, offset, length);
+        final TextStringBuilder buf = new TextStringBuilder(length).append(source.toString(), offset, length);
         substitute(buf, 0, length);
         return buf.toString();
     }

http://git-wip-us.apache.org/repos/asf/commons-text/blob/70c080b1/src/main/java/org/apache/commons/text/TextStringBuilder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/text/TextStringBuilder.java b/src/main/java/org/apache/commons/text/TextStringBuilder.java
index 6c151d6..c2a431e 100644
--- a/src/main/java/org/apache/commons/text/TextStringBuilder.java
+++ b/src/main/java/org/apache/commons/text/TextStringBuilder.java
@@ -571,16 +571,22 @@ public class TextStringBuilder implements CharSequence, Appendable, Serializable
      *            the CharSequence to append
      * @param startIndex
      *            the start index, inclusive, must be valid
-     * @param length
-     *            the length to append, must be valid
+     * @param endIndex
+     *            the end index, exclusive, must be valid
      * @return this, to enable chaining
      */
     @Override
-    public TextStringBuilder append(final CharSequence seq, final int startIndex, final int length) {
+    public TextStringBuilder append(final CharSequence seq, final int startIndex, final int endIndex) {
         if (seq == null) {
             return appendNull();
         }
-        return append(seq.toString(), startIndex, length);
+        if (endIndex <= 0) {
+            throw new StringIndexOutOfBoundsException("endIndex must be valid");
+        }
+        if (startIndex >= endIndex) {
+            throw new StringIndexOutOfBoundsException("endIndex must be greater than startIndex");
+        }
+        return append(seq.toString(), startIndex, endIndex - startIndex);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/commons-text/blob/70c080b1/src/test/java/org/apache/commons/text/TextStringBuilderAppendInsertTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/text/TextStringBuilderAppendInsertTest.java b/src/test/java/org/apache/commons/text/TextStringBuilderAppendInsertTest.java
index 3551f63..f51bdb5 100644
--- a/src/test/java/org/apache/commons/text/TextStringBuilderAppendInsertTest.java
+++ b/src/test/java/org/apache/commons/text/TextStringBuilderAppendInsertTest.java
@@ -207,13 +207,41 @@ public class TextStringBuilderAppendInsertTest {
             // expected
         }
 
+        try {
+            sb.append((CharSequence) "bar", 2, 1);
+            fail("append(char[], 2, 1) expected IndexOutOfBoundsException");
+        } catch (final IndexOutOfBoundsException e) {
+            // expected
+        }
+
+        try {
+            sb.append((CharSequence) "bar", 2, 2);
+            fail("append(char[], 2, 2) expected IndexOutOfBoundsException");
+        } catch (final IndexOutOfBoundsException e) {
+            // expected
+        }
+
+        try {
+            sb.append((CharSequence) "bar", 2, -2);
+            fail("append(char[], 2, -2) expected IndexOutOfBoundsException");
+        } catch (final IndexOutOfBoundsException e) {
+            // expected
+        }
+
+        try {
+            sb.append((CharSequence) "bar", 2, 0);
+            fail("append(char[], 2, 0) expected IndexOutOfBoundsException");
+        } catch (final IndexOutOfBoundsException e) {
+            // expected
+        }
+
         sb.append("bar", 3, 0);
         assertThat(sb.toString()).isEqualTo("foo");
 
         sb.append("abcbardef", 3, 3);
         assertThat(sb.toString()).isEqualTo("foobar");
 
-        sb.append((CharSequence) "abcbardef", 4, 3);
+        sb.append((CharSequence) "abcbardef", 4, 7);
         assertThat(sb.toString()).isEqualTo("foobarard");
     }