Title: [waffle-scm] [792] trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel: Better testing of map converters.

Diff

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/AbstractValueConverter.java (791 => 792)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/AbstractValueConverter.java	2008-08-28 04:53:53 UTC (rev 791)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/AbstractValueConverter.java	2008-08-28 10:36:59 UTC (rev 792)
@@ -53,38 +53,41 @@
     }
 
     /**
-     * Accepts parameterized types of List<?> 
+     * Accepts parameterized types of List<?>
      * 
      * @param type the Type to accept or reject
-     * @param listArgumentClass
+     * @param listArgumentClass the List argument class
      */
     protected boolean acceptList(Type type, Class<?> listArgumentClass) {
         if (type instanceof ParameterizedType) {
             ParameterizedType parameterizedType = (ParameterizedType) type;
             Type rawType = parameterizedType.getRawType();
-            Type argumentType = parameterizedType.getActualTypeArguments()[0];
-            return List.class.isAssignableFrom((Class<?>) rawType)
-                    && listArgumentClass.isAssignableFrom((Class<?>) argumentType);
+            Type[] typeArguments = parameterizedType.getActualTypeArguments();
+            if (typeArguments.length > 0) {
+                return List.class.isAssignableFrom((Class<?>) rawType)
+                        && listArgumentClass.isAssignableFrom((Class<?>) typeArguments[0]);
+            }
         }
         return false;
     }
 
     /**
-     * Accepts parameterized types of type Map<?,List<?>> 
+     * Accepts parameterized types of type Map<?,List<?>>
      * 
      * @param type the Type to accept or reject
-     * @param keyArgumentClass the Map key argument Class
-     * @param listArgumentClass the List argument Class
+     * @param keyArgumentClass the Map key argument class
+     * @param listArgumentClass the List argument class
      */
     protected boolean acceptMapOfLists(Type type, Class<?> keyArgumentClass, Class<?> listArgumentClass) {
         if (type instanceof ParameterizedType) {
             ParameterizedType parameterizedType = (ParameterizedType) type;
             Type rawType = parameterizedType.getRawType();
-            Type argumentType0 = parameterizedType.getActualTypeArguments()[0];
-            Type argumentType1 = parameterizedType.getActualTypeArguments()[1];
-            return Map.class.isAssignableFrom((Class<?>) rawType)
-                    && keyArgumentClass.isAssignableFrom((Class<?>) argumentType0)
-                    && acceptList(argumentType1, listArgumentClass);
+            Type[] typeArguments = parameterizedType.getActualTypeArguments();
+            if (typeArguments.length > 1) {
+                return Map.class.isAssignableFrom((Class<?>) rawType)
+                        && keyArgumentClass.isAssignableFrom((Class<?>) typeArguments[0])
+                        && acceptList(typeArguments[1], listArgumentClass);
+            }
         }
         return false;
     }

Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/converters/StringListMapValueConverterTest.java (791 => 792)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/converters/StringListMapValueConverterTest.java	2008-08-28 04:53:53 UTC (rev 791)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/converters/StringListMapValueConverterTest.java	2008-08-28 10:36:59 UTC (rev 792)
@@ -26,9 +26,10 @@
 
     @Test
     public void canAccept() throws IntrospectionException {
-        StringListMapValueConverter converter = new StringListMapValueConverter(
-                new DefaultMessageResources());
+        StringListMapValueConverter converter = new StringListMapValueConverter(new DefaultMessageResources());
         assertTrue(converter.accept(methodParameterType("mapOfStringLists")));
+        assertFalse(converter.accept(methodParameterType("map")));
+        assertFalse(converter.accept(methodParameterType("mapOfStringIntegerLists")));
         assertFalse(converter.accept(List.class));
         assertFalse(converter.accept(Object.class));
         assertFalse(converter.accept(methodParameterType("object")));
@@ -36,27 +37,33 @@
 
     @Test
     public void canConvertMapsOfStringNumberLists() throws OgnlException {
-        StringListMapValueConverter converter = new StringListMapValueConverter(
-                new DefaultMessageResources());
+        StringListMapValueConverter converter = new StringListMapValueConverter(new DefaultMessageResources());
         Map<String, List<String>> map = new HashMap<String, List<String>>();
         map.put("a", asList("x"));
+        assertCanConvertValueToMap(converter, map, "a=x");
+        map.clear();
+        map.put("a", asList("x"));
+        map.put("b", asList("y"));
+        assertCanConvertValueToMap(converter, map, "a=x\n b=y\n");
+        assertCanConvertValueToMap(converter, map, "a=x\n b= y \n");
+        map.clear();
+        map.put("a", asList("x"));
         map.put("b", asList("x", "y"));
         map.put("c", asList("x", "y", "z"));
-        assertCanConvertValueToList(converter, map, "a=x\n b=x,y\n c=x,y,z");
+        assertCanConvertValueToMap(converter, map, "a=x\n b=x,y\n c=x,y,z");
     }
 
     @SuppressWarnings("unchecked")
-    private void assertCanConvertValueToList(StringListMapValueConverter converter,
-            Map<String, List<String>> expected, String value) {
-        Map<String, List<String>> actual = (Map<String, List<String>>) converter.convertValue(
-                "property-name", value, Map.class);
+    private void assertCanConvertValueToMap(StringListMapValueConverter converter, Map<String, List<String>> expected,
+            String value) {
+        Map<String, List<String>> actual = (Map<String, List<String>>) converter.convertValue("property-name", value,
+                Map.class);
         assertEquals(expected.toString(), actual.toString());
     }
 
     @Test
     public void canHandleMissingValues() {
-        StringListMapValueConverter converter = new StringListMapValueConverter(
-                new DefaultMessageResources());
+        StringListMapValueConverter converter = new StringListMapValueConverter(new DefaultMessageResources());
         assertEmptyMap(converter, null);
         assertEmptyMap(converter, "");
         assertEmptyMap(converter, " ");
@@ -76,15 +83,14 @@
             converter.convertValue("property-name", null, List.class);
             fail("Expected BindException");
         } catch (BindException e) {
-            assertEquals(format(resources.getMessage(StringListMapValueConverter.BIND_ERROR_MAP_KEY),
-                    "property-name"), e.getMessage());
+            assertEquals(format(resources.getMessage(StringListMapValueConverter.BIND_ERROR_MAP_KEY), "property-name"),
+                    e.getMessage());
         }
     }
 
     @Test
     public void canFailConversionWithDefaultErrorMessages() {
-        StringListMapValueConverter converter = new StringListMapValueConverter(
-                new DefaultMessageResources()) {
+        StringListMapValueConverter converter = new StringListMapValueConverter(new DefaultMessageResources()) {
             @Override
             protected Object convertMissingValue(String key, String defaultMessage, Object... parameters) {
                 throw newBindException(key, defaultMessage, parameters);

Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/converters/StringNumberListMapValueConverterTest.java (791 => 792)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/converters/StringNumberListMapValueConverterTest.java	2008-08-28 04:53:53 UTC (rev 791)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/converters/StringNumberListMapValueConverterTest.java	2008-08-28 10:36:59 UTC (rev 792)
@@ -29,6 +29,8 @@
         StringNumberListMapValueConverter converter = new StringNumberListMapValueConverter(
                 new DefaultMessageResources());
         assertTrue(converter.accept(methodParameterType("mapOfStringIntegerLists")));
+        assertFalse(converter.accept(methodParameterType("map")));
+        assertFalse(converter.accept(methodParameterType("mapOfStringLists")));
         assertFalse(converter.accept(List.class));
         assertFalse(converter.accept(Object.class));
         assertFalse(converter.accept(methodParameterType("object")));
@@ -40,17 +42,27 @@
                 new DefaultMessageResources());
         Map<String, List<? extends Number>> map = new HashMap<String, List<? extends Number>>();
         map.put("a", asList(1));
+        assertCanConvertValueToMap(converter, map, "a=1");
+        assertCanConvertValueToMap(converter, map, "a=1\n");
+        map.clear();
+        map.put("a", asList(1));
+        map.put("b", asList(2));
+        assertCanConvertValueToMap(converter, map, "a=1\n b=2\n");
+        assertCanConvertValueToMap(converter, map, "a=1\n   b=2  \n");
+        map.clear();
+        map.put("a", asList(1));
         map.put("b", asList(1, 2));
         map.put("c", asList(1, 2, 3));
-        // Note: no conversion is done from String to Numbers and the assertion is done on the string representation
-        assertCanConvertValueToList(converter, map, "a=1\n b=1,2\n c=1,2,3");
+        assertCanConvertValueToMap(converter, map, "a=1\n b=1,2\n c=1,2,3");
+  
     }
 
     @SuppressWarnings("unchecked")
-    private void assertCanConvertValueToList(StringNumberListMapValueConverter converter,
+    private void assertCanConvertValueToMap(StringNumberListMapValueConverter converter,
             Map<String, List<? extends Number>> expected, String value) {
         Map<String, List<? extends Number>> actual = (Map<String, List<? extends Number>>) converter.convertValue(
                 "property-name", value, Map.class);
+        // Note: no conversion is done from String to Numbers and the assertion is done on the string representation
         assertEquals(expected.toString(), actual.toString());
     }
 

Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/FakeControllerWithListMethods.java (791 => 792)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/FakeControllerWithListMethods.java	2008-08-28 04:53:53 UTC (rev 791)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/FakeControllerWithListMethods.java	2008-08-28 10:36:59 UTC (rev 792)
@@ -26,6 +26,8 @@
     public void listOfLongs(List<Integer> list){};
     public void listOfDoubles(List<Integer> list){};
     public void listOfFloats(List<Integer> list){};
+    @SuppressWarnings("unchecked")
+    public void map(Map map){};
     public void mapOfStringLists(Map<String,List<String>> map){};
     public void mapOfStringIntegerLists(Map<String,List<Integer>> map){};
     public void object(Object object){};


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to