- Revision
- 792
- Author
- mauro
- Date
- 2008-08-28 05:36:59 -0500 (Thu, 28 Aug 2008)
Log Message
Better testing of map converters.
Modified Paths
- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/AbstractValueConverter.java
- trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/converters/StringListMapValueConverterTest.java
- trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/converters/StringNumberListMapValueConverterTest.java
- trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/FakeControllerWithListMethods.java
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:
