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 <gno...@gmail.com> Authored: Mon May 26 22:58:11 2014 +0200 Committer: Guillaume Nodet <gno...@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)); }