Repository: commons-text
Updated Branches:
  refs/heads/master 322fe2723 -> 4c29a73b0


Correctly handle null varargs in AggregateTranslator constructor

The previous code didn't handle null vararg parameters correctly and
would throw a NPE if passed a null CharSequenceTranslator object.

While updating the unit tests to verify this, I adjusted the tests so
that reflection isn't used.

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

Branch: refs/heads/master
Commit: 4c29a73b03f93eec9c8e2d47b8d4b65b7db9f136
Parents: 322fe27
Author: duncan <dun...@wortharead.com>
Authored: Wed Dec 21 09:02:09 2016 +0000
Committer: duncan <dun...@wortharead.com>
Committed: Wed Dec 21 09:02:09 2016 +0000

----------------------------------------------------------------------
 .../commons/text/translate/AggregateTranslator.java | 12 ++++++++----
 .../text/translate/AggregateTranslatorTest.java     | 16 ++++++++++------
 2 files changed, 18 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-text/blob/4c29a73b/src/main/java/org/apache/commons/text/translate/AggregateTranslator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/text/translate/AggregateTranslator.java 
b/src/main/java/org/apache/commons/text/translate/AggregateTranslator.java
index 74eb6de..010ab2a 100644
--- a/src/main/java/org/apache/commons/text/translate/AggregateTranslator.java
+++ b/src/main/java/org/apache/commons/text/translate/AggregateTranslator.java
@@ -18,6 +18,8 @@ package org.apache.commons.text.translate;
 
 import java.io.IOException;
 import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Executes a sequence of translators one after the other. Execution ends 
whenever 
@@ -27,7 +29,7 @@ import java.io.Writer;
  */
 public class AggregateTranslator extends CharSequenceTranslator {
 
-    private final CharSequenceTranslator[] translators;
+    private final List<CharSequenceTranslator> translators = new ArrayList<>();
 
     /**
      * Specify the translators to be used at creation time. 
@@ -36,9 +38,11 @@ public class AggregateTranslator extends 
CharSequenceTranslator {
      */
     public AggregateTranslator(final CharSequenceTranslator... translators) {
         if (translators != null) {
-            this.translators = translators.clone();
-        } else {
-            this.translators = null;
+            for (CharSequenceTranslator translator : translators) {
+                if (translator != null) {
+                    this.translators.add(translator);
+                }
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/commons-text/blob/4c29a73b/src/test/java/org/apache/commons/text/translate/AggregateTranslatorTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/text/translate/AggregateTranslatorTest.java 
b/src/test/java/org/apache/commons/text/translate/AggregateTranslatorTest.java
index 6ac6622..5335396 100644
--- 
a/src/test/java/org/apache/commons/text/translate/AggregateTranslatorTest.java
+++ 
b/src/test/java/org/apache/commons/text/translate/AggregateTranslatorTest.java
@@ -20,10 +20,8 @@ import org.junit.Test;
 
 import java.io.IOException;
 import java.io.StringWriter;
-import java.lang.reflect.Field;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
 
 /**
  * Unit tests for {@link 
org.apache.commons.text.translate.AggregateTranslator}.
@@ -31,11 +29,17 @@ import static org.junit.Assert.assertNull;
 public class AggregateTranslatorTest {
 
     @Test
-    public void testNullConstructor() throws NoSuchFieldException, 
IllegalAccessException {
+    public void testNullConstructor() throws Exception {
+        final String testString = "foo";
         final AggregateTranslator subject = new 
AggregateTranslator((CharSequenceTranslator[]) null);
-        final Field field = 
AggregateTranslator.class.getDeclaredField("translators");
-        field.setAccessible(Boolean.TRUE);
-        assertNull(field.get(subject));
+        assertEquals(testString, subject.translate(testString));
+    }
+    
+    @Test
+    public void testNullVarargConstructor() throws Exception {
+        final String testString = "foo";
+        final AggregateTranslator subject = new 
AggregateTranslator((CharSequenceTranslator) null);
+        assertEquals(testString, subject.translate(testString));
     }
 
     @Test

Reply via email to