diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ConversionServiceFactory.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ConversionServiceFactory.java index e162857b802..b35b7d9ebc9 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ConversionServiceFactory.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ConversionServiceFactory.java @@ -18,18 +18,30 @@ package org.springframework.core.convert.support; import org.springframework.core.convert.ConversionService; /** - * A factor for creating common ConversionService configurations. + * A factory for creating common ConversionService configurations. * @author Keith Donald * @since 3.0 */ public final class ConversionServiceFactory { + private static ConversionService DEFAULT_INSTANCE; + private ConversionServiceFactory() { } /** - * Create a default ConversionService. + * Get the shared default ConversionService. + */ + public static synchronized ConversionService getDefault() { + if (DEFAULT_INSTANCE == null) { + DEFAULT_INSTANCE = createDefault(); + } + return DEFAULT_INSTANCE; + } + + /** + * Create a new default ConversionService prototype that can be safely modified. */ public static ConversionService createDefault() { GenericConversionService conversionService = new GenericConversionService(); @@ -58,6 +70,7 @@ public final class ConversionServiceFactory { conversionService.addConverterFactory(new CharacterToNumberFactory()); conversionService.addConverter(new ObjectToStringConverter()); conversionService.addGenericConverter(new ObjectToObjectGenericConverter()); + conversionService.addGenericConverter(new EntityConverter(conversionService)); return conversionService; } } diff --git a/org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionServiceTests.java b/org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionServiceTests.java deleted file mode 100644 index 2bc8fda9e6c..00000000000 --- a/org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionServiceTests.java +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright 2002-2009 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.core.convert.support; - -import static junit.framework.Assert.assertEquals; -import static org.junit.Assert.fail; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.util.Locale; - -import org.junit.Test; -import org.springframework.core.convert.ConversionService; -import org.springframework.core.convert.ConverterNotFoundException; -import org.springframework.core.convert.converter.Converter; - -/** - * Tests for the default converters in the converters package. - - * @author Keith Donald - */ -public class DefaultConversionServiceTests { - - private StringToNumberConverterFactory c = new StringToNumberConverterFactory(); - - @Test - public void testStringToCharacter() { - StringToCharacterConverter c = new StringToCharacterConverter(); - assertEquals(Character.valueOf('1'), c.convert("1")); - } - - @Test - public void testStringToCharacterEmptyString() { - StringToCharacterConverter c = new StringToCharacterConverter(); - assertEquals(null, c.convert("")); - } - - @Test(expected=IllegalArgumentException.class) - public void testStringToCharacterInvalidString() { - new StringToCharacterConverter().convert("invalid"); - } - - @Test - public void testStringToBooleanTrue() { - StringToBooleanConverter c = new StringToBooleanConverter(); - assertEquals(Boolean.valueOf(true), c.convert("true")); - assertEquals(Boolean.valueOf(true), c.convert("on")); - assertEquals(Boolean.valueOf(true), c.convert("yes")); - assertEquals(Boolean.valueOf(true), c.convert("1")); - } - - @Test - public void testStringToBooleanFalse() { - StringToBooleanConverter c = new StringToBooleanConverter(); - assertEquals(Boolean.valueOf(false), c.convert("false")); - assertEquals(Boolean.valueOf(false), c.convert("off")); - assertEquals(Boolean.valueOf(false), c.convert("no")); - assertEquals(Boolean.valueOf(false), c.convert("0")); - } - - @Test - public void testStringToBooleanEmptyString() { - StringToBooleanConverter c = new StringToBooleanConverter(); - assertEquals(null, c.convert("")); - } - - @Test(expected=IllegalArgumentException.class) - public void testStringToBooleanInvalidString() { - new StringToBooleanConverter().convert("invalid"); - } - - @Test - public void testStringToByte() throws Exception { - assertEquals(Byte.valueOf("1"), c.getConverter(Byte.class).convert("1")); - } - - @Test - public void testStringToShort() { - assertEquals(Short.valueOf("1"), c.getConverter(Short.class).convert("1")); - } - - @Test - public void testStringToInteger() { - assertEquals(Integer.valueOf("1"), c.getConverter(Integer.class).convert("1")); - } - - @Test - public void testStringToLong() { - assertEquals(Long.valueOf("1"), c.getConverter(Long.class).convert("1")); - } - - @Test - public void testStringToFloat() { - assertEquals(Float.valueOf("1.0"), c.getConverter(Float.class).convert("1.0")); - } - - @Test - public void testStringToDouble() { - assertEquals(Double.valueOf("1.0"), c.getConverter(Double.class).convert("1.0")); - } - - @Test - public void testStringToBigInteger() { - assertEquals(new BigInteger("1"), c.getConverter(BigInteger.class).convert("1")); - } - - @Test - public void testStringToBigDouble() { - assertEquals(new BigDecimal("1.0"), c.getConverter(BigDecimal.class).convert("1.0")); - } - - @Test - public void testStringToNumber() { - assertEquals(new BigDecimal("1.0"), c.getConverter(Number.class).convert("1.0")); - } - - @Test - public void testStringToNumberEmptyString() { - assertEquals(null, c.getConverter(Number.class).convert("")); - } - - @Test - public void testStringToEnum() throws Exception { - Converter c = new StringToEnumConverterFactory().getConverter(Foo.class); - assertEquals(Foo.BAR, c.convert("BAR")); - } - - @Test - public void testStringToEnumEmptyString() throws Exception { - Converter c = new StringToEnumConverterFactory().getConverter(Foo.class); - assertEquals(null, c.convert("")); - } - - public static enum Foo { - BAR, BAZ; - } - - @Test - public void testStringToLocale() { - StringToLocaleConverter c = new StringToLocaleConverter(); - assertEquals(Locale.ENGLISH, c.convert("en")); - } - - @Test - public void testNumberToNumber() throws Exception { - Converter c = new NumberToNumberConverterFactory().getConverter(Long.class); - assertEquals(Long.valueOf(1), c.convert(Integer.valueOf(1))); - } - - @Test - public void testNumberToNumberNotSupportedNumber() throws Exception { - Converter c = new NumberToNumberConverterFactory().getConverter(CustomNumber.class); - try { - c.convert(Integer.valueOf(1)); - fail("Should have failed"); - } catch (IllegalArgumentException e) { - - } - } - - @Test - public void testNumberToCharacter() { - NumberToCharacterConverter n = new NumberToCharacterConverter(); - assertEquals(Character.valueOf('A'), n.convert(Integer.valueOf(65))); - } - - @Test - public void testObjectToString() { - ObjectToStringConverter o = new ObjectToStringConverter(); - assertEquals("3", o.convert(3)); - } - - @Test - public void convertObjectToObjectValueOFMethod() { - ConversionService conversionService = ConversionServiceFactory.createDefault(); - assertEquals(new Integer(3), conversionService.convert("3", Integer.class)); - } - - @Test - public void convertObjectToObjectConstructor() { - ConversionService conversionService = ConversionServiceFactory.createDefault(); - assertEquals(new SSN("123456789"), conversionService.convert("123456789", SSN.class)); - assertEquals("123456789", conversionService.convert(new SSN("123456789"), String.class)); - } - - @Test(expected=ConverterNotFoundException.class) - public void convertObjectToObjectNoValueOFMethodOrConstructor() { - ConversionService conversionService = ConversionServiceFactory.createDefault(); - conversionService.convert(new Long(3), SSN.class); - } - - private static class SSN { - private String value; - - public SSN(String value) { - this.value = value; - } - - public boolean equals(Object o) { - if (!(o instanceof SSN)) { - return false; - } - SSN ssn = (SSN) o; - return this.value.equals(ssn.value); - } - - public int hashCode() { - return value.hashCode(); - } - - public String toString() { - return value; - } - } - - public static class CustomNumber extends Number { - - @Override - public double doubleValue() { - return 0; - } - - @Override - public float floatValue() { - return 0; - } - - @Override - public int intValue() { - return 0; - } - - @Override - public long longValue() { - return 0; - } - - } -} diff --git a/org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionTests.java b/org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionTests.java new file mode 100644 index 00000000000..39f6a8b6ece --- /dev/null +++ b/org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionTests.java @@ -0,0 +1,705 @@ +/* + * Copyright 2002-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.core.convert.support; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.AbstractList; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +import org.junit.Test; +import org.springframework.core.convert.ConversionFailedException; +import org.springframework.core.convert.ConversionService; +import org.springframework.core.convert.ConverterNotFoundException; +import org.springframework.core.convert.TypeDescriptor; +import org.springframework.core.convert.converter.Converter; + +public class DefaultConversionTests { + + private ConversionService conversionService = ConversionServiceFactory.getDefault(); + + @Test + public void testStringToCharacter() { + assertEquals(Character.valueOf('1'), conversionService.convert("1", Character.class)); + } + + @Test + public void testStringToCharacterEmptyString() { + assertEquals(null, conversionService.convert("", Character.class)); + } + + @Test(expected=ConversionFailedException.class) + public void testStringToCharacterInvalidString() { + conversionService.convert("invalid", Character.class); + } + + @Test + public void testStringToBooleanTrue() { + assertEquals(Boolean.valueOf(true), conversionService.convert("true", Boolean.class)); + assertEquals(Boolean.valueOf(true), conversionService.convert("on", Boolean.class)); + assertEquals(Boolean.valueOf(true), conversionService.convert("yes", Boolean.class)); + assertEquals(Boolean.valueOf(true), conversionService.convert("1", Boolean.class)); + } + + @Test + public void testStringToBooleanFalse() { + assertEquals(Boolean.valueOf(false), conversionService.convert("false", Boolean.class)); + assertEquals(Boolean.valueOf(false), conversionService.convert("off", Boolean.class)); + assertEquals(Boolean.valueOf(false), conversionService.convert("no", Boolean.class)); + assertEquals(Boolean.valueOf(false), conversionService.convert("0", Boolean.class)); + } + + @Test + public void testStringToBooleanEmptyString() { + assertEquals(null, conversionService.convert("", Boolean.class)); + } + + @Test(expected=ConversionFailedException.class) + public void testStringToBooleanInvalidString() { + conversionService.convert("invalid", Boolean.class); + } + + @Test + public void testStringToByte() throws Exception { + assertEquals(Byte.valueOf("1"), conversionService.convert("1", Byte.class)); + } + + @Test + public void testStringToShort() { + assertEquals(Short.valueOf("1"), conversionService.convert("1", Short.class)); + } + + @Test + public void testStringToInteger() { + assertEquals(Integer.valueOf("1"), conversionService.convert("1", Integer.class)); + } + + @Test + public void testStringToLong() { + assertEquals(Long.valueOf("1"), conversionService.convert("1", Long.class)); + } + + @Test + public void testStringToFloat() { + assertEquals(Float.valueOf("1.0"), conversionService.convert("1.0", Float.class)); + } + + @Test + public void testStringToDouble() { + assertEquals(Double.valueOf("1.0"), conversionService.convert("1.0", Double.class)); + } + + @Test + public void testStringToBigInteger() { + assertEquals(new BigInteger("1"), conversionService.convert("1", BigInteger.class)); + } + + @Test + public void testStringToBigDouble() { + assertEquals(new BigDecimal("1.0"), conversionService.convert("1.0", BigDecimal.class)); + } + + @Test + public void testStringToNumber() { + assertEquals(new BigDecimal("1.0"), conversionService.convert("1.0", Number.class)); + } + + @Test + public void testStringToNumberEmptyString() { + assertEquals(null, conversionService.convert("", Number.class)); + } + + @Test + public void testStringToEnum() throws Exception { + assertEquals(Foo.BAR, conversionService.convert("BAR", Foo.class)); + } + + @Test + public void testStringToEnumEmptyString() { + assertEquals(null, conversionService.convert("", Foo.class)); + } + + public static enum Foo { + BAR, BAZ; + } + + @Test + public void testStringToLocale() { + assertEquals(Locale.ENGLISH, conversionService.convert("en", Locale.class)); + } + + @Test + public void testNumberToNumber() { + Converter c = new NumberToNumberConverterFactory().getConverter(Long.class); + assertEquals(Long.valueOf(1), conversionService.convert(Integer.valueOf(1), Long.class)); + } + + @Test(expected=ConversionFailedException.class) + public void testNumberToNumberNotSupportedNumber() { + conversionService.convert(Integer.valueOf(1), CustomNumber.class); + } + + public static class CustomNumber extends Number { + + @Override + public double doubleValue() { + return 0; + } + + @Override + public float floatValue() { + return 0; + } + + @Override + public int intValue() { + return 0; + } + + @Override + public long longValue() { + return 0; + } + + } + + @Test + public void testNumberToCharacter() { + assertEquals(Character.valueOf('A'), conversionService.convert(Integer.valueOf(65), Character.class)); + } + + @Test + public void testObjectToString() { + assertEquals("3", conversionService.convert(3, String.class)); + } + + @Test + public void convertObjectToObjectValueOFMethod() { + assertEquals(new Integer(3), conversionService.convert("3", Integer.class)); + } + + @Test + public void convertObjectToObjectConstructor() { + assertEquals(new SSN("123456789"), conversionService.convert("123456789", SSN.class)); + assertEquals("123456789", conversionService.convert(new SSN("123456789"), String.class)); + } + + @Test(expected=ConverterNotFoundException.class) + public void convertObjectToObjectNoValueOFMethodOrConstructor() { + conversionService.convert(new Long(3), SSN.class); + } + + private static class SSN { + private String value; + + public SSN(String value) { + this.value = value; + } + + public boolean equals(Object o) { + if (!(o instanceof SSN)) { + return false; + } + SSN ssn = (SSN) o; + return this.value.equals(ssn.value); + } + + public int hashCode() { + return value.hashCode(); + } + + public String toString() { + return value; + } + } + + @Test + public void convertObjectToObjectFinderMethod() { + TestEntity e = conversionService.convert(1L, TestEntity.class); + assertEquals(new Long(1), e.getId()); + } + + @Test + public void convertObjectToObjectFinderMethodWithIdConversion() { + TestEntity e = conversionService.convert("1", TestEntity.class); + assertEquals(new Long(1), e.getId()); + } + + @Test + public void testToObjectToStringIdProperty() { + String id = conversionService.convert(new TestEntity(1L), String.class); + assertEquals("1", id); + } + + public static class TestEntity { + + private Long id; + + public TestEntity(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + public static TestEntity findTestEntity(Long id) { + return new TestEntity(id); + } + } + + @Test + public void convertArrayToArray() { + Integer[] result = conversionService.convert(new String[] { "1", "2", "3" }, Integer[].class); + assertEquals(new Integer(1), result[0]); + assertEquals(new Integer(2), result[1]); + assertEquals(new Integer(3), result[2]); + } + + @Test + public void convertArrayToPrimitiveArray() { + int[] result = conversionService.convert(new String[] { "1", "2", "3" }, int[].class); + assertEquals(1, result[0]); + assertEquals(2, result[1]); + assertEquals(3, result[2]); + } + + @Test + public void convertArrayToArrayAssignable() { + int[] result = conversionService.convert(new int[] { 1, 2, 3 }, int[].class); + assertEquals(1, result[0]); + assertEquals(2, result[1]); + assertEquals(3, result[2]); + } + + @Test + public void convertArrayToListInterface() { + List result = conversionService.convert(new String[] { "1", "2", "3" }, List.class); + assertEquals("1", result.get(0)); + assertEquals("2", result.get(1)); + assertEquals("3", result.get(2)); + } + + public List genericList = new ArrayList(); + + @Test + public void convertArrayToListGenericTypeConversion() throws Exception { + List result = (List) conversionService.convert(new String[] { "1", "2", "3" }, TypeDescriptor + .valueOf(String[].class), new TypeDescriptor(getClass().getDeclaredField("genericList"))); + assertEquals(new Integer("1"), result.get(0)); + assertEquals(new Integer("2"), result.get(1)); + assertEquals(new Integer("3"), result.get(2)); + } + + @Test + public void convertArrayToListImpl() { + LinkedList result = conversionService.convert(new String[] { "1", "2", "3" }, LinkedList.class); + assertEquals("1", result.get(0)); + assertEquals("2", result.get(1)); + assertEquals("3", result.get(2)); + } + + @Test(expected = ConversionFailedException.class) + public void convertArrayToAbstractList() { + conversionService.convert(new String[] { "1", "2", "3" }, AbstractList.class); + } + + @Test + public void convertArrayToMap() { + Map result = conversionService.convert(new String[] { "foo=bar", "bar=baz", "baz=boop" }, Map.class); + assertEquals("bar", result.get("foo")); + assertEquals("baz", result.get("bar")); + assertEquals("boop", result.get("baz")); + } + + @Test + public void convertArrayToMapWithElementConversion() throws Exception { + Map result = (Map) conversionService.convert(new String[] { "1=BAR", "2=BAZ" }, TypeDescriptor + .valueOf(String[].class), new TypeDescriptor(getClass().getField("genericMap"))); + assertEquals(FooEnum.BAR, result.get(1)); + assertEquals(FooEnum.BAZ, result.get(2)); + } + + public static enum FooEnum { + BAR, BAZ + } + + @Test + public void convertArrayToString() { + String result = conversionService.convert(new String[] { "1", "2", "3" }, String.class); + assertEquals("1,2,3", result); + } + + @Test + public void convertArrayToStringWithElementConversion() { + String result = conversionService.convert(new Integer[] { 1, 2, 3 }, String.class); + assertEquals("1,2,3", result); + } + + @Test + public void convertEmptyArrayToString() { + String result = conversionService.convert(new String[0], String.class); + assertEquals("", result); + } + + @Test + public void convertArrayToObject() { + Object[] array = new Object[] { 3L }; + Object result = conversionService.convert(array, Object.class); + assertEquals(3L, result); + } + + @Test + public void convertArrayToObjectWithElementConversion() { + String[] array = new String[] { "3" }; + Integer result = conversionService.convert(array, Integer.class); + assertEquals(new Integer(3), result); + } + + @Test + public void convertCollectionToArray() { + List list = new ArrayList(); + list.add("1"); + list.add("2"); + list.add("3"); + String[] result = conversionService.convert(list, String[].class); + assertEquals("1", result[0]); + assertEquals("2", result[1]); + assertEquals("3", result[2]); + } + + @Test + public void convertCollectionToArrayWithElementConversion() { + List list = new ArrayList(); + list.add("1"); + list.add("2"); + list.add("3"); + Integer[] result = conversionService.convert(list, Integer[].class); + assertEquals(new Integer(1), result[0]); + assertEquals(new Integer(2), result[1]); + assertEquals(new Integer(3), result[2]); + } + + @Test + public void convertCollectionToCollection() throws Exception { + Set foo = new LinkedHashSet(); + foo.add("1"); + foo.add("2"); + foo.add("3"); + List bar = (List) conversionService.convert(foo, TypeDescriptor.valueOf(LinkedHashSet.class), + new TypeDescriptor(getClass().getField("genericList"))); + assertEquals(new Integer(1), bar.get(0)); + assertEquals(new Integer(2), bar.get(1)); + assertEquals(new Integer(3), bar.get(2)); + } + + @Test + public void convertCollectionToCollectionNull() throws Exception { + List bar = (List) conversionService.convert(null, + TypeDescriptor.valueOf(LinkedHashSet.class), new TypeDescriptor(getClass().getField("genericList"))); + assertNull(bar); + } + + @Test + public void convertCollectionToCollectionNotGeneric() throws Exception { + Set foo = new LinkedHashSet(); + foo.add("1"); + foo.add("2"); + foo.add("3"); + List bar = (List) conversionService.convert(foo, TypeDescriptor.valueOf(LinkedHashSet.class), TypeDescriptor + .valueOf(List.class)); + assertEquals("1", bar.get(0)); + assertEquals("2", bar.get(1)); + assertEquals("3", bar.get(2)); + } + + @Test + public void convertCollectionToCollectionSpecialCaseSourceImpl() throws Exception { + Map map = new LinkedHashMap(); + map.put("1", "1"); + map.put("2", "2"); + map.put("3", "3"); + Collection values = map.values(); + List bar = (List) conversionService.convert(values, + TypeDescriptor.valueOf(values.getClass()), new TypeDescriptor(getClass().getField("genericList"))); + assertEquals(3, bar.size()); + assertEquals(new Integer(1), bar.get(0)); + assertEquals(new Integer(2), bar.get(1)); + assertEquals(new Integer(3), bar.get(2)); + } + + @Test + public void convertCollectionToMap() { + List list = new ArrayList(); + list.add("foo=bar"); + list.add("bar=baz"); + list.add("baz=boop"); + Map result = conversionService.convert(list, Map.class); + assertEquals("bar", result.get("foo")); + assertEquals("baz", result.get("bar")); + assertEquals("boop", result.get("baz")); + } + + @Test + public void convertCollectionToMapWithElementConversion() throws Exception { + List list = new ArrayList(); + list.add("1=BAR"); + list.add("2=BAZ"); + Map result = (Map) conversionService.convert(list, TypeDescriptor.valueOf(List.class), new TypeDescriptor( + getClass().getField("genericMap"))); + assertEquals(FooEnum.BAR, result.get(1)); + assertEquals(FooEnum.BAZ, result.get(2)); + } + + @Test + public void convertCollectionToString() { + List list = Arrays.asList(new String[] { "foo", "bar" }); + String result = conversionService.convert(list, String.class); + assertEquals("foo,bar", result); + } + + @Test + public void convertCollectionToStringWithElementConversion() throws Exception { + List list = Arrays.asList(new Integer[] { 3, 5 }); + String result = (String) conversionService.convert(list, + new TypeDescriptor(getClass().getField("genericList")), TypeDescriptor.valueOf(String.class)); + assertEquals("3,5", result); + } + + @Test + public void convertCollectionToObject() { + List list = Collections.singletonList(3L); + Long result = conversionService.convert(list, Long.class); + assertEquals(new Long(3), result); + } + + @Test + public void convertCollectionToObjectWithElementConversion() { + List list = Collections.singletonList("3"); + Integer result = conversionService.convert(list, Integer.class); + assertEquals(new Integer(3), result); + } + + public Map genericMap = new HashMap(); + + @Test + public void convertMapToMap() throws Exception { + Map foo = new HashMap(); + foo.put("1", "BAR"); + foo.put("2", "BAZ"); + Map map = (Map) conversionService.convert(foo, TypeDescriptor + .valueOf(Map.class), new TypeDescriptor(getClass().getField("genericMap"))); + assertEquals(FooEnum.BAR, map.get(1)); + assertEquals(FooEnum.BAZ, map.get(2)); + } + + @Test + public void convertMapToStringArray() throws Exception { + Map foo = new LinkedHashMap(); + foo.put("1", "BAR"); + foo.put("2", "BAZ"); + String[] result = conversionService.convert(foo, String[].class); + assertEquals("1=BAR", result[0]); + assertEquals("2=BAZ", result[1]); + } + + @Test + public void convertMapToStringArrayWithElementConversion() throws Exception { + Map foo = new LinkedHashMap(); + foo.put(1, FooEnum.BAR); + foo.put(2, FooEnum.BAZ); + String[] result = (String[]) conversionService.convert(foo, new TypeDescriptor(getClass() + .getField("genericMap")), TypeDescriptor.valueOf(String[].class)); + assertEquals("1=BAR", result[0]); + assertEquals("2=BAZ", result[1]); + } + + @Test + public void convertMapToString() { + Map foo = new LinkedHashMap(); + foo.put("1", "BAR"); + foo.put("2", "BAZ"); + String result = conversionService.convert(foo, String.class); + System.out.println(result); + assertTrue(result.contains("1=BAR")); + assertTrue(result.contains("2=BAZ")); + } + + @Test + public void convertMapToStringWithConversion() throws Exception { + Map foo = new LinkedHashMap(); + foo.put(1, FooEnum.BAR); + foo.put(2, FooEnum.BAZ); + String result = (String) conversionService.convert(foo, new TypeDescriptor(getClass().getField("genericMap")), + TypeDescriptor.valueOf(String.class)); + assertTrue(result.contains("1=BAR")); + assertTrue(result.contains("2=BAZ")); + } + + @Test + public void convertMapToObject() { + Map foo = new LinkedHashMap(); + foo.put(1L, 1L); + foo.put(2L, 2L); + Long result = conversionService.convert(foo, Long.class); + assertEquals(new Long(1), result); + } + + public Map genericMap2 = new HashMap(); + + @Test + public void convertMapToObjectWithConversion() throws Exception { + Map foo = new LinkedHashMap(); + foo.put(1L, 1L); + foo.put(2L, 2L); + Integer result = (Integer) conversionService.convert(foo, + new TypeDescriptor(getClass().getField("genericMap2")), TypeDescriptor.valueOf(Integer.class)); + assertEquals(new Integer(1), result); + } + + @Test + public void convertStringToArray() { + String[] result = conversionService.convert("1,2,3", String[].class); + assertEquals(3, result.length); + assertEquals("1", result[0]); + assertEquals("2", result[1]); + assertEquals("3", result[2]); + } + + @Test + public void convertStringToArrayWithElementConversion() { + Integer[] result = conversionService.convert("1,2,3", Integer[].class); + assertEquals(3, result.length); + assertEquals(new Integer(1), result[0]); + assertEquals(new Integer(2), result[1]); + assertEquals(new Integer(3), result[2]); + } + + @Test + public void convertEmptyStringToArray() { + String[] result = conversionService.convert("", String[].class); + assertEquals(0, result.length); + } + + @Test + public void convertObjectToArray() { + Object[] result = conversionService.convert(3L, Object[].class); + assertEquals(1, result.length); + assertEquals(3L, result[0]); + } + + @Test + public void convertObjectToArrayWithElementConversion() { + Integer[] result = conversionService.convert(3L, Integer[].class); + assertEquals(1, result.length); + assertEquals(new Integer(3), result[0]); + } + + @Test + public void convertStringToCollection() { + List result = conversionService.convert("1,2,3", List.class); + assertEquals(3, result.size()); + assertEquals("1", result.get(0)); + assertEquals("2", result.get(1)); + assertEquals("3", result.get(2)); + } + + @Test + public void convertStringToCollectionWithElementConversion() throws Exception { + List result = (List) conversionService.convert("1,2,3", TypeDescriptor.valueOf(String.class), + new TypeDescriptor(getClass().getField("genericList"))); + assertEquals(3, result.size()); + assertEquals(new Integer(1), result.get(0)); + assertEquals(new Integer(2), result.get(1)); + assertEquals(new Integer(3), result.get(2)); + } + + @Test + public void convertEmptyStringToCollection() { + Collection result = conversionService.convert("", Collection.class); + assertEquals(0, result.size()); + } + + @Test + public void convertObjectToCollection() { + List result = (List) conversionService.convert(3L, List.class); + assertEquals(1, result.size()); + assertEquals(3L, result.get(0)); + } + + @Test + public void convertObjectToCollectionWithElementConversion() throws Exception { + List result = (List) conversionService.convert(3L, TypeDescriptor.valueOf(Long.class), + new TypeDescriptor(getClass().getField("genericList"))); + assertEquals(1, result.size()); + assertEquals(new Integer(3), result.get(0)); + } + + @Test + public void convertStringToMap() { + Map result = conversionService.convert(" foo=bar\n bar=baz\n baz=boop", Map.class); + assertEquals("bar", result.get("foo")); + assertEquals("baz", result.get("bar")); + assertEquals("boop", result.get("baz")); + } + + @Test + public void convertStringToMapWithElementConversion() throws Exception { + Map result = (Map) conversionService.convert("1=BAR\n 2=BAZ", TypeDescriptor.valueOf(String.class), + new TypeDescriptor(getClass().getField("genericMap"))); + assertEquals(FooEnum.BAR, result.get(1)); + assertEquals(FooEnum.BAZ, result.get(2)); + } + + @Test + public void convertObjectToMap() { + Map result = conversionService.convert(new Integer(3), Map.class); + assertEquals(new Integer(3), result.get(new Integer(3))); + } + + @Test + public void convertObjectToMapWithConversion() throws Exception { + Map result = (Map) conversionService.convert(1L, TypeDescriptor.valueOf(Integer.class), new TypeDescriptor( + getClass().getField("genericMap2"))); + assertEquals(new Long(1), result.get(1L)); + } + + @Test + public void genericConverterDelegatingBackToConversionServiceConverterNotFound() { + try { + conversionService.convert("1", Integer[].class); + } catch (ConversionFailedException e) { + assertTrue(e.getCause() instanceof ConverterNotFoundException); + } + } + +} diff --git a/org.springframework.core/src/test/java/org/springframework/core/convert/support/EntityConverterTests.java b/org.springframework.core/src/test/java/org/springframework/core/convert/support/EntityConverterTests.java deleted file mode 100644 index 96c6abd3c8a..00000000000 --- a/org.springframework.core/src/test/java/org/springframework/core/convert/support/EntityConverterTests.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.springframework.core.convert.support; - -import static org.junit.Assert.assertEquals; - -import org.junit.Before; -import org.junit.Test; - -public class EntityConverterTests { - - private GenericConversionService conversionService = new GenericConversionService(); - - @Before - public void setUp() { - conversionService.addConverter(new ObjectToStringConverter()); - conversionService.addGenericConverter(new EntityConverter(conversionService)); - } - - @Test - public void testToEntityReference() { - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - TestEntity e = conversionService.convert("1", TestEntity.class); - assertEquals(new Long(1), e.getId()); - } - - @Test - public void testToEntityId() { - String id = conversionService.convert(new TestEntity(1L), String.class); - assertEquals("1", id); - } - - public static class TestEntity { - - private Long id; - - public TestEntity(Long id) { - this.id = id; - } - - public Long getId() { - return id; - } - - public static TestEntity findTestEntity(Long id) { - return new TestEntity(id); - } - } -} diff --git a/org.springframework.core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java b/org.springframework.core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java index e0bec9442f0..8f549e9ab7a 100644 --- a/org.springframework.core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java +++ b/org.springframework.core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java @@ -22,28 +22,12 @@ import static junit.framework.Assert.fail; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import java.util.AbstractList; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; - import org.junit.Test; import org.springframework.core.convert.ConversionFailedException; import org.springframework.core.convert.ConverterNotFoundException; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.Converter; -/** - * @author Keith Donald - */ public class GenericConversionServiceTests { private GenericConversionService conversionService = new GenericConversionService(); @@ -139,510 +123,11 @@ public class GenericConversionServiceTests { @Test public void convertObjectToPrimitiveViaConverterFactory() { + assertFalse(conversionService.canConvert(String.class, int.class)); conversionService.addConverterFactory(new StringToNumberConverterFactory()); + assertTrue(conversionService.canConvert(String.class, int.class)); Integer three = conversionService.convert("3", int.class); assertEquals(3, three.intValue()); } - @Test - public void convertArrayToArray() { - conversionService.addGenericConverter(new ArrayToArrayConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - Integer[] result = conversionService.convert(new String[] { "1", "2", "3" }, Integer[].class); - assertEquals(new Integer(1), result[0]); - assertEquals(new Integer(2), result[1]); - assertEquals(new Integer(3), result[2]); - } - - @Test - public void convertArrayToPrimitiveArray() { - conversionService.addGenericConverter(new ArrayToArrayConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - int[] result = conversionService.convert(new String[] { "1", "2", "3" }, int[].class); - assertEquals(1, result[0]); - assertEquals(2, result[1]); - assertEquals(3, result[2]); - } - - @Test - public void convertArrayToArrayAssignable() { - int[] result = conversionService.convert(new int[] { 1, 2, 3 }, int[].class); - assertEquals(1, result[0]); - assertEquals(2, result[1]); - assertEquals(3, result[2]); - } - - @Test - public void convertArrayToListInterface() { - conversionService.addGenericConverter(new ArrayToCollectionConverter(conversionService)); - List result = conversionService.convert(new String[] { "1", "2", "3" }, List.class); - assertEquals("1", result.get(0)); - assertEquals("2", result.get(1)); - assertEquals("3", result.get(2)); - } - - public List genericList = new ArrayList(); - - @Test - public void convertArrayToListGenericTypeConversion() throws Exception { - conversionService.addGenericConverter(new ArrayToCollectionConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - List result = (List) conversionService.convert(new String[] { "1", "2", "3" }, TypeDescriptor - .valueOf(String[].class), new TypeDescriptor(getClass().getDeclaredField("genericList"))); - assertEquals(new Integer("1"), result.get(0)); - assertEquals(new Integer("2"), result.get(1)); - assertEquals(new Integer("3"), result.get(2)); - } - - @Test - public void convertArrayToListImpl() { - conversionService.addGenericConverter(new ArrayToCollectionConverter(conversionService)); - LinkedList result = conversionService.convert(new String[] { "1", "2", "3" }, LinkedList.class); - assertEquals("1", result.get(0)); - assertEquals("2", result.get(1)); - assertEquals("3", result.get(2)); - } - - @Test(expected = ConversionFailedException.class) - public void convertArrayToAbstractList() { - conversionService.addGenericConverter(new ArrayToCollectionConverter(conversionService)); - conversionService.convert(new String[] { "1", "2", "3" }, AbstractList.class); - } - - @Test - public void convertArrayToMap() { - conversionService.addGenericConverter(new ArrayToMapConverter(conversionService)); - Map result = conversionService.convert(new String[] { "foo=bar", "bar=baz", "baz=boop" }, Map.class); - assertEquals("bar", result.get("foo")); - assertEquals("baz", result.get("bar")); - assertEquals("boop", result.get("baz")); - } - - @Test - public void convertArrayToMapWithElementConversion() throws Exception { - conversionService.addGenericConverter(new ArrayToMapConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - conversionService.addConverterFactory(new StringToEnumConverterFactory()); - Map result = (Map) conversionService.convert(new String[] { "1=BAR", "2=BAZ" }, TypeDescriptor - .valueOf(String[].class), new TypeDescriptor(getClass().getField("genericMap"))); - assertEquals(FooEnum.BAR, result.get(1)); - assertEquals(FooEnum.BAZ, result.get(2)); - } - - @Test - public void convertArrayToString() { - conversionService.addGenericConverter(new ArrayToObjectConverter(conversionService)); - String result = conversionService.convert(new String[] { "1", "2", "3" }, String.class); - assertEquals("1,2,3", result); - } - - @Test - public void convertArrayToStringWithElementConversion() { - conversionService.addGenericConverter(new ArrayToObjectConverter(conversionService)); - conversionService.addConverter(new ObjectToStringConverter()); - String result = conversionService.convert(new Integer[] { 1, 2, 3 }, String.class); - assertEquals("1,2,3", result); - } - - @Test - public void convertEmptyArrayToString() { - conversionService.addGenericConverter(new ArrayToObjectConverter(conversionService)); - String result = conversionService.convert(new String[0], String.class); - assertEquals("", result); - } - - @Test - public void convertArrayToObject() { - conversionService.addGenericConverter(new ArrayToObjectConverter(conversionService)); - Object[] array = new Object[] { 3L }; - Object result = conversionService.convert(array, Object.class); - assertEquals(3L, result); - } - - @Test - public void convertArrayToObjectWithElementConversion() { - conversionService.addGenericConverter(new ArrayToObjectConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - String[] array = new String[] { "3" }; - Integer result = conversionService.convert(array, Integer.class); - assertEquals(new Integer(3), result); - } - - @Test - public void convertCollectionToArray() { - conversionService.addGenericConverter(new CollectionToArrayConverter(conversionService)); - List list = new ArrayList(); - list.add("1"); - list.add("2"); - list.add("3"); - String[] result = conversionService.convert(list, String[].class); - assertEquals("1", result[0]); - assertEquals("2", result[1]); - assertEquals("3", result[2]); - } - - @Test - public void convertCollectionToArrayWithElementConversion() { - conversionService.addGenericConverter(new CollectionToArrayConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - List list = new ArrayList(); - list.add("1"); - list.add("2"); - list.add("3"); - Integer[] result = conversionService.convert(list, Integer[].class); - assertEquals(new Integer(1), result[0]); - assertEquals(new Integer(2), result[1]); - assertEquals(new Integer(3), result[2]); - } - - @Test - public void convertCollectionToCollection() throws Exception { - conversionService.addGenericConverter(new CollectionToCollectionConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - Set foo = new LinkedHashSet(); - foo.add("1"); - foo.add("2"); - foo.add("3"); - List bar = (List) conversionService.convert(foo, TypeDescriptor.valueOf(LinkedHashSet.class), - new TypeDescriptor(getClass().getField("genericList"))); - assertEquals(new Integer(1), bar.get(0)); - assertEquals(new Integer(2), bar.get(1)); - assertEquals(new Integer(3), bar.get(2)); - } - - @Test - public void convertCollectionToCollectionNull() throws Exception { - conversionService.addGenericConverter(new CollectionToCollectionConverter(conversionService)); - List bar = (List) conversionService.convert(null, - TypeDescriptor.valueOf(LinkedHashSet.class), new TypeDescriptor(getClass().getField("genericList"))); - assertNull(bar); - } - - @Test - public void convertCollectionToCollectionNotGeneric() throws Exception { - conversionService.addGenericConverter(new CollectionToCollectionConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - Set foo = new LinkedHashSet(); - foo.add("1"); - foo.add("2"); - foo.add("3"); - List bar = (List) conversionService.convert(foo, TypeDescriptor.valueOf(LinkedHashSet.class), TypeDescriptor - .valueOf(List.class)); - assertEquals("1", bar.get(0)); - assertEquals("2", bar.get(1)); - assertEquals("3", bar.get(2)); - } - - @Test - public void convertCollectionToCollectionSpecialCaseSourceImpl() throws Exception { - conversionService.addGenericConverter(new CollectionToCollectionConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - Map map = new LinkedHashMap(); - map.put("1", "1"); - map.put("2", "2"); - map.put("3", "3"); - Collection values = map.values(); - List bar = (List) conversionService.convert(values, - TypeDescriptor.valueOf(values.getClass()), new TypeDescriptor(getClass().getField("genericList"))); - assertEquals(3, bar.size()); - assertEquals(new Integer(1), bar.get(0)); - assertEquals(new Integer(2), bar.get(1)); - assertEquals(new Integer(3), bar.get(2)); - } - - @Test - public void convertCollectionToMap() { - conversionService.addGenericConverter(new CollectionToMapConverter(conversionService)); - List list = new ArrayList(); - list.add("foo=bar"); - list.add("bar=baz"); - list.add("baz=boop"); - Map result = conversionService.convert(list, Map.class); - assertEquals("bar", result.get("foo")); - assertEquals("baz", result.get("bar")); - assertEquals("boop", result.get("baz")); - } - - @Test - public void convertCollectionToMapWithElementConversion() throws Exception { - conversionService.addGenericConverter(new CollectionToMapConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - conversionService.addConverterFactory(new StringToEnumConverterFactory()); - List list = new ArrayList(); - list.add("1=BAR"); - list.add("2=BAZ"); - Map result = (Map) conversionService.convert(list, TypeDescriptor.valueOf(List.class), new TypeDescriptor( - getClass().getField("genericMap"))); - assertEquals(FooEnum.BAR, result.get(1)); - assertEquals(FooEnum.BAZ, result.get(2)); - } - - @Test - public void convertCollectionToString() { - conversionService.addGenericConverter(new CollectionToObjectConverter(conversionService)); - List list = Arrays.asList(new String[] { "foo", "bar" }); - String result = conversionService.convert(list, String.class); - assertEquals("foo,bar", result); - } - - @Test - public void convertCollectionToStringWithElementConversion() throws Exception { - conversionService.addGenericConverter(new CollectionToObjectConverter(conversionService)); - conversionService.addConverter(new ObjectToStringConverter()); - List list = Arrays.asList(new Integer[] { 3, 5 }); - String result = (String) conversionService.convert(list, - new TypeDescriptor(getClass().getField("genericList")), TypeDescriptor.valueOf(String.class)); - assertEquals("3,5", result); - } - - @Test - public void convertCollectionToObject() { - conversionService.addGenericConverter(new CollectionToObjectConverter(conversionService)); - List list = Collections.singletonList(3L); - Long result = conversionService.convert(list, Long.class); - assertEquals(new Long(3), result); - } - - @Test - public void convertCollectionToObjectWithElementConversion() { - conversionService.addGenericConverter(new CollectionToObjectConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - List list = Collections.singletonList("3"); - Integer result = conversionService.convert(list, Integer.class); - assertEquals(new Integer(3), result); - } - - public Map genericMap = new HashMap(); - - @Test - public void convertMapToMap() throws Exception { - conversionService.addGenericConverter(new MapToMapConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - conversionService.addConverterFactory(new StringToEnumConverterFactory()); - Map foo = new HashMap(); - foo.put("1", "BAR"); - foo.put("2", "BAZ"); - Map map = (Map) conversionService.convert(foo, TypeDescriptor - .valueOf(Map.class), new TypeDescriptor(getClass().getField("genericMap"))); - assertEquals(FooEnum.BAR, map.get(1)); - assertEquals(FooEnum.BAZ, map.get(2)); - } - - @Test - public void convertMapToStringArray() throws Exception { - conversionService.addGenericConverter(new MapToArrayConverter(conversionService)); - Map foo = new LinkedHashMap(); - foo.put("1", "BAR"); - foo.put("2", "BAZ"); - String[] result = conversionService.convert(foo, String[].class); - assertEquals("1=BAR", result[0]); - assertEquals("2=BAZ", result[1]); - } - - @Test - public void convertMapToStringArrayWithElementConversion() throws Exception { - conversionService.addGenericConverter(new MapToArrayConverter(conversionService)); - conversionService.addConverter(new ObjectToStringConverter()); - Map foo = new LinkedHashMap(); - foo.put(1, FooEnum.BAR); - foo.put(2, FooEnum.BAZ); - String[] result = (String[]) conversionService.convert(foo, new TypeDescriptor(getClass() - .getField("genericMap")), TypeDescriptor.valueOf(String[].class)); - assertEquals("1=BAR", result[0]); - assertEquals("2=BAZ", result[1]); - } - - @Test - public void convertMapToString() { - conversionService.addGenericConverter(new MapToObjectConverter(conversionService)); - Map foo = new LinkedHashMap(); - foo.put("1", "BAR"); - foo.put("2", "BAZ"); - String result = conversionService.convert(foo, String.class); - System.out.println(result); - assertTrue(result.contains("1=BAR")); - assertTrue(result.contains("2=BAZ")); - } - - @Test - public void convertMapToStringWithConversion() throws Exception { - conversionService.addGenericConverter(new MapToObjectConverter(conversionService)); - Map foo = new LinkedHashMap(); - foo.put(1, FooEnum.BAR); - foo.put(2, FooEnum.BAZ); - conversionService.addConverter(new ObjectToStringConverter()); - String result = (String) conversionService.convert(foo, new TypeDescriptor(getClass().getField("genericMap")), - TypeDescriptor.valueOf(String.class)); - assertTrue(result.contains("1=BAR")); - assertTrue(result.contains("2=BAZ")); - } - - @Test - public void convertMapToObject() { - conversionService.addGenericConverter(new MapToObjectConverter(conversionService)); - Map foo = new LinkedHashMap(); - foo.put(1L, 1L); - foo.put(2L, 2L); - Long result = conversionService.convert(foo, Long.class); - assertEquals(new Long(1), result); - } - - public Map genericMap2 = new HashMap(); - - @Test - public void convertMapToObjectWithConversion() throws Exception { - conversionService.addGenericConverter(new MapToObjectConverter(conversionService)); - conversionService.addConverterFactory(new NumberToNumberConverterFactory()); - Map foo = new LinkedHashMap(); - foo.put(1L, 1L); - foo.put(2L, 2L); - Integer result = (Integer) conversionService.convert(foo, - new TypeDescriptor(getClass().getField("genericMap2")), TypeDescriptor.valueOf(Integer.class)); - assertEquals(new Integer(1), result); - } - - @Test - public void convertStringToArray() { - conversionService.addGenericConverter(new ObjectToArrayConverter(conversionService)); - String[] result = conversionService.convert("1,2,3", String[].class); - assertEquals(3, result.length); - assertEquals("1", result[0]); - assertEquals("2", result[1]); - assertEquals("3", result[2]); - } - - @Test - public void convertStringToArrayWithElementConversion() { - conversionService.addGenericConverter(new ObjectToArrayConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - Integer[] result = conversionService.convert("1,2,3", Integer[].class); - assertEquals(3, result.length); - assertEquals(new Integer(1), result[0]); - assertEquals(new Integer(2), result[1]); - assertEquals(new Integer(3), result[2]); - } - - @Test - public void convertEmptyStringToArray() { - conversionService.addGenericConverter(new ObjectToArrayConverter(conversionService)); - String[] result = conversionService.convert("", String[].class); - assertEquals(0, result.length); - } - - @Test - public void convertObjectToArray() { - conversionService.addGenericConverter(new ObjectToArrayConverter(conversionService)); - Object[] result = conversionService.convert(3L, Object[].class); - assertEquals(1, result.length); - assertEquals(3L, result[0]); - } - - @Test - public void convertObjectToArrayWithElementConversion() { - conversionService.addGenericConverter(new ObjectToArrayConverter(conversionService)); - conversionService.addConverterFactory(new NumberToNumberConverterFactory()); - Integer[] result = conversionService.convert(3L, Integer[].class); - assertEquals(1, result.length); - assertEquals(new Integer(3), result[0]); - } - - @Test - public void convertStringToCollection() { - conversionService.addGenericConverter(new ObjectToCollectionConverter(conversionService)); - List result = conversionService.convert("1,2,3", List.class); - assertEquals(3, result.size()); - assertEquals("1", result.get(0)); - assertEquals("2", result.get(1)); - assertEquals("3", result.get(2)); - } - - @Test - public void convertStringToCollectionWithElementConversion() throws Exception { - conversionService.addGenericConverter(new ObjectToCollectionConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - List result = (List) conversionService.convert("1,2,3", TypeDescriptor.valueOf(String.class), - new TypeDescriptor(getClass().getField("genericList"))); - assertEquals(3, result.size()); - assertEquals(new Integer(1), result.get(0)); - assertEquals(new Integer(2), result.get(1)); - assertEquals(new Integer(3), result.get(2)); - } - - @Test - public void convertEmptyStringToCollection() { - conversionService.addGenericConverter(new ObjectToCollectionConverter(conversionService)); - Collection result = conversionService.convert("", Collection.class); - assertEquals(0, result.size()); - } - - @Test - public void convertObjectToCollection() { - conversionService.addGenericConverter(new ObjectToCollectionConverter(conversionService)); - List result = (List) conversionService.convert(3L, List.class); - assertEquals(1, result.size()); - assertEquals(3L, result.get(0)); - } - - @Test - public void convertObjectToCollectionWithElementConversion() throws Exception { - conversionService.addGenericConverter(new ObjectToCollectionConverter(conversionService)); - conversionService.addConverterFactory(new NumberToNumberConverterFactory()); - List result = (List) conversionService.convert(3L, TypeDescriptor.valueOf(Long.class), - new TypeDescriptor(getClass().getField("genericList"))); - assertEquals(1, result.size()); - assertEquals(new Integer(3), result.get(0)); - } - - @Test - public void convertStringToMap() { - conversionService.addGenericConverter(new ObjectToMapConverter(conversionService)); - conversionService.addGenericConverter(new MapToMapConverter(conversionService)); - Map result = conversionService.convert(" foo=bar\n bar=baz\n baz=boop", Map.class); - assertEquals("bar", result.get("foo")); - assertEquals("baz", result.get("bar")); - assertEquals("boop", result.get("baz")); - } - - @Test - public void convertStringToMapWithElementConversion() throws Exception { - conversionService.addGenericConverter(new ObjectToMapConverter(conversionService)); - conversionService.addGenericConverter(new MapToMapConverter(conversionService)); - conversionService.addConverterFactory(new StringToNumberConverterFactory()); - conversionService.addConverterFactory(new StringToEnumConverterFactory()); - Map result = (Map) conversionService.convert("1=BAR\n 2=BAZ", TypeDescriptor.valueOf(String.class), - new TypeDescriptor(getClass().getField("genericMap"))); - assertEquals(FooEnum.BAR, result.get(1)); - assertEquals(FooEnum.BAZ, result.get(2)); - } - - @Test - public void convertObjectToMap() { - conversionService.addGenericConverter(new ObjectToMapConverter(conversionService)); - Map result = conversionService.convert(new Integer(3), Map.class); - assertEquals(new Integer(3), result.get(new Integer(3))); - } - - @Test - public void convertObjectToMapWithConversion() throws Exception { - conversionService.addGenericConverter(new ObjectToMapConverter(conversionService)); - conversionService.addConverterFactory(new NumberToNumberConverterFactory()); - Map result = (Map) conversionService.convert(1L, TypeDescriptor.valueOf(Integer.class), new TypeDescriptor( - getClass().getField("genericMap2"))); - assertEquals(new Long(1), result.get(1L)); - } - - @Test - public void genericConverterDelegatingBackToConversionServiceConverterNotFound() { - conversionService.addGenericConverter(new ObjectToArrayConverter(conversionService)); - try { - conversionService.convert("1", Integer[].class); - } catch (ConversionFailedException e) { - assertTrue(e.getCause() instanceof ConverterNotFoundException); - } - } - - public static enum FooEnum { - BAR, BAZ - } - } diff --git a/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/StandardTypeConverter.java b/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/StandardTypeConverter.java index cd5529ab6c0..dfa431cde16 100644 --- a/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/StandardTypeConverter.java +++ b/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/StandardTypeConverter.java @@ -40,7 +40,7 @@ public class StandardTypeConverter implements TypeConverter { private final ConversionService conversionService; public StandardTypeConverter() { - this.conversionService = ConversionServiceFactory.createDefault(); + this.conversionService = ConversionServiceFactory.getDefault(); } public StandardTypeConverter(ConversionService conversionService) {