You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2014/05/26 22:58:28 UTC

git commit: [KARAF-2991] Shell Console throws exception when a service contains int[] as value for a property Add a fix for custom collections

Repository: karaf
Updated Branches:
  refs/heads/master 9b4a050ec -> b4f8ee6f5


[KARAF-2991] Shell Console throws exception when a service contains int[] as value for a property
Add a fix for custom collections

Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/b4f8ee6f
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/b4f8ee6f
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/b4f8ee6f

Branch: refs/heads/master
Commit: b4f8ee6f5a40291c6ab0d55e0c22545ae6da029a
Parents: 9b4a050
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Mon May 26 22:58:11 2014 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Mon May 26 22:58:11 2014 +0200

----------------------------------------------------------------------
 .../apache/karaf/shell/support/ShellUtil.java   |  6 +-
 .../karaf/shell/support/ShellUtilTest.java      | 78 +++++++++++++++-----
 2 files changed, 63 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/b4f8ee6f/shell/core/src/main/java/org/apache/karaf/shell/support/ShellUtil.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/support/ShellUtil.java b/shell/core/src/main/java/org/apache/karaf/shell/support/ShellUtil.java
index 4fc95c8..405f608 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/support/ShellUtil.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/support/ShellUtil.java
@@ -21,6 +21,7 @@ package org.apache.karaf.shell.support;
 import java.security.AccessControlContext;
 import java.security.AccessController;
 import java.util.Arrays;
+import java.util.Collection;
 
 import javax.security.auth.Subject;
 
@@ -79,6 +80,9 @@ public class ShellUtil {
             return Arrays.toString((long[]) obj);
         } else if (obj instanceof short[]) {
             return Arrays.toString((short[]) obj);
+        } else if (obj instanceof Collection<?>) {
+            Object[] array = ((Collection<?>) obj).toArray();
+            return getValueString(array);
         } else if (obj.getClass().isArray()) {
             Object[] array = (Object[]) obj;
             StringBuilder sb = new StringBuilder();
@@ -201,5 +205,5 @@ public class ShellUtil {
             return null;
         }
     }
-    
+
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/b4f8ee6f/shell/core/src/test/java/org/apache/karaf/shell/support/ShellUtilTest.java
----------------------------------------------------------------------
diff --git a/shell/core/src/test/java/org/apache/karaf/shell/support/ShellUtilTest.java b/shell/core/src/test/java/org/apache/karaf/shell/support/ShellUtilTest.java
index f6d0ba9..c99bb25 100644
--- a/shell/core/src/test/java/org/apache/karaf/shell/support/ShellUtilTest.java
+++ b/shell/core/src/test/java/org/apache/karaf/shell/support/ShellUtilTest.java
@@ -18,52 +18,90 @@
  */
 package org.apache.karaf.shell.support;
 
+import static org.junit.Assert.assertEquals;
+
+import java.util.AbstractList;
 import java.util.Arrays;
-import java.util.HashSet;
+import java.util.Collection;
+import java.util.Iterator;
 import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.ListIterator;
 
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-
 public class ShellUtilTest {
 
     @Test
+    public void testGetValueStringWithCustomCollection() {
+        List<Integer> data = new AbstractList<Integer>() {
+
+            int[] values = new int[15];
+            int size = 0;
+
+            @Override
+            public boolean add(Integer e) {
+                values[size] = e;
+                size++;
+                return true;
+            }
+
+            @Override
+            public Integer get(int index) {
+                if ( index >= size ) throw new IndexOutOfBoundsException();
+                return values[index];
+            }
+
+            @Override
+            public int size() {
+                return size;
+            }
+
+            @Override
+            public String toString() {
+                return "Custom" + super.toString();
+            }
+        };
+        data.add(5);
+        assertEquals("[5]", ShellUtil.getValueString(data));
+    }
+
+    @Test
     public void testGetValueString() {
         Object data;
         data = "Hello World";
         assertEquals("Hello World", ShellUtil.getValueString(data));
 
-        data = new int[]{1, 2, 3, 5, 7, 9};
+        data = new int[] { 1, 2, 3, 5, 7, 9 };
         assertEquals("[1, 2, 3, 5, 7, 9]", ShellUtil.getValueString(data));
 
-        data = new short[]{1, 2, 3, 5, 7, 9};
+        data = new short[] { 1, 2, 3, 5, 7, 9 };
         assertEquals("[1, 2, 3, 5, 7, 9]", ShellUtil.getValueString(data));
 
-        data = new long[]{1, 2, 3, 5, 7, 9};
+        data = new long[] { 1, 2, 3, 5, 7, 9 };
         assertEquals("[1, 2, 3, 5, 7, 9]", ShellUtil.getValueString(data));
 
-        data = new byte[]{1, 2, 3, 5, 7, 9};
+        data = new byte[] { 1, 2, 3, 5, 7, 9 };
         assertEquals("[1, 2, 3, 5, 7, 9]", ShellUtil.getValueString(data));
 
-        data = new float[]{1, 2, 3, 5, 7, 9};
-        assertEquals("[1.0, 2.0, 3.0, 5.0, 7.0, 9.0]", ShellUtil.getValueString(data));
+        data = new float[] { 1, 2, 3, 5, 7, 9 };
+        assertEquals("[1.0, 2.0, 3.0, 5.0, 7.0, 9.0]",
+                ShellUtil.getValueString(data));
 
-        data = new double[]{1, 2, 3, 5, 7, 9};
-        assertEquals("[1.0, 2.0, 3.0, 5.0, 7.0, 9.0]", ShellUtil.getValueString(data));
+        data = new double[] { 1, 2, 3, 5, 7, 9 };
+        assertEquals("[1.0, 2.0, 3.0, 5.0, 7.0, 9.0]",
+                ShellUtil.getValueString(data));
 
-        data = new boolean[]{true, true, false};
+        data = new boolean[] { true, true, false };
         assertEquals("[true, true, false]", ShellUtil.getValueString(data));
 
-        data = new char[]{'a', 'c', 'e'};
+        data = new char[] { 'a', 'c', 'e' };
         assertEquals("[a, c, e]", ShellUtil.getValueString(data));
 
-        data = new Object[]{
-                new int[]{1, 2, 3, 5, 8},
-                new char[]{'h', 'e', 'l', 'l', 'o'},
-                "World"
-        };
-        assertEquals("[[1, 2, 3, 5, 8], [h, e, l, l, o], World]", ShellUtil.getValueString(data));
+        data = new Object[] { new int[] { 1, 2, 3, 5, 8 },
+                new char[] { 'h', 'e', 'l', 'l', 'o' }, "World" };
+        assertEquals("[[1, 2, 3, 5, 8], [h, e, l, l, o], World]",
+                ShellUtil.getValueString(data));
 
         data = Arrays.asList(5, 10, 15, 25);
         assertEquals("[5, 10, 15, 25]", ShellUtil.getValueString(data));
@@ -71,7 +109,7 @@ public class ShellUtilTest {
         data = new LinkedHashSet<>(Arrays.asList(5, 10, 15, 25));
         assertEquals("[5, 10, 15, 25]", ShellUtil.getValueString(data));
 
-        data = new int[][]{{1, 2, 3}, {5, 7, 9}};
+        data = new int[][] { { 1, 2, 3 }, { 5, 7, 9 } };
         assertEquals("[[1, 2, 3], [5, 7, 9]]", ShellUtil.getValueString(data));
 
     }