@ -1,5 +1,5 @@
/ *
* Copyright 2002 - 2011 the original author or authors .
* Copyright 2002 - 2012 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 .
@ -17,6 +17,7 @@
package org.springframework.core.convert.support ;
import java.util.Arrays ;
import java.util.Collections ;
import java.util.HashMap ;
import java.util.LinkedHashMap ;
import java.util.List ;
@ -55,7 +56,7 @@ public class MapToMapConverterTests {
}
conversionService . addConverterFactory ( new StringToNumberConverterFactory ( ) ) ;
assertTrue ( conversionService . canConvert ( sourceType , targetType ) ) ;
@SuppressWarnings ( "unchecked" )
@SuppressWarnings ( "unchecked" )
Map < Integer , Integer > result = ( Map < Integer , Integer > ) conversionService . convert ( map , sourceType , targetType ) ;
assertFalse ( map . equals ( result ) ) ;
assertEquals ( ( Integer ) 9 , result . get ( 1 ) ) ;
@ -79,7 +80,7 @@ public class MapToMapConverterTests {
map . put ( "1" , "9" ) ;
map . put ( "2" , "37" ) ;
TypeDescriptor sourceType = new TypeDescriptor ( getClass ( ) . getField ( "notGenericMapSource" ) ) ;
TypeDescriptor targetType = new TypeDescriptor ( getClass ( ) . getField ( "scalarMapTarget" ) ) ;
TypeDescriptor targetType = new TypeDescriptor ( getClass ( ) . getField ( "scalarMapTarget" ) ) ;
assertTrue ( conversionService . canConvert ( sourceType , targetType ) ) ;
try {
conversionService . convert ( map , sourceType , targetType ) ;
@ -88,15 +89,15 @@ public class MapToMapConverterTests {
}
conversionService . addConverterFactory ( new StringToNumberConverterFactory ( ) ) ;
assertTrue ( conversionService . canConvert ( sourceType , targetType ) ) ;
@SuppressWarnings ( "unchecked" )
@SuppressWarnings ( "unchecked" )
Map < Integer , Integer > result = ( Map < Integer , Integer > ) conversionService . convert ( map , sourceType , targetType ) ;
assertFalse ( map . equals ( result ) ) ;
assertEquals ( ( Integer ) 9 , result . get ( 1 ) ) ;
assertEquals ( ( Integer ) 37 , result . get ( 2 ) ) ;
assertEquals ( ( Integer ) 37 , result . get ( 2 ) ) ;
}
public Map notGenericMapSource ;
@Test
public void collectionMap ( ) throws Exception {
Map < String , List < String > > map = new HashMap < String , List < String > > ( ) ;
@ -109,11 +110,11 @@ public class MapToMapConverterTests {
conversionService . convert ( map , sourceType , targetType ) ;
} catch ( ConversionFailedException e ) {
assertTrue ( e . getCause ( ) instanceof ConverterNotFoundException ) ;
}
}
conversionService . addConverter ( new CollectionToCollectionConverter ( conversionService ) ) ;
conversionService . addConverterFactory ( new StringToNumberConverterFactory ( ) ) ;
assertTrue ( conversionService . canConvert ( sourceType , targetType ) ) ;
@SuppressWarnings ( "unchecked" )
@SuppressWarnings ( "unchecked" )
Map < Integer , List < Integer > > result = ( Map < Integer , List < Integer > > ) conversionService . convert ( map , sourceType , targetType ) ;
assertFalse ( map . equals ( result ) ) ;
assertEquals ( Arrays . asList ( 9 , 12 ) , result . get ( 1 ) ) ;
@ -134,12 +135,12 @@ public class MapToMapConverterTests {
conversionService . convert ( map , sourceType , targetType ) ;
fail ( "Should have failed" ) ;
} catch ( ConverterNotFoundException e ) {
}
conversionService . addConverter ( new CollectionToCollectionConverter ( conversionService ) ) ;
conversionService . addConverterFactory ( new StringToNumberConverterFactory ( ) ) ;
assertTrue ( conversionService . canConvert ( sourceType , targetType ) ) ;
@SuppressWarnings ( "unchecked" )
@SuppressWarnings ( "unchecked" )
Map < Integer , List < Integer > > result = ( Map < Integer , List < Integer > > ) conversionService . convert ( map , sourceType , targetType ) ;
assertFalse ( map . equals ( result ) ) ;
assertEquals ( Arrays . asList ( 9 , 12 ) , result . get ( 1 ) ) ;
@ -167,7 +168,7 @@ public class MapToMapConverterTests {
assertTrue ( conversionService . canConvert ( Map . class , Map . class ) ) ;
assertSame ( map , conversionService . convert ( map , Map . class ) ) ;
}
@Test
public void emptyMap ( ) throws Exception {
Map < String , String > map = new HashMap < String , String > ( ) ;
@ -200,4 +201,26 @@ public class MapToMapConverterTests {
public LinkedHashMap < String , String > emptyMapDifferentTarget ;
@Test
public void noDefaultConstructorCopyNotRequired ( ) throws Exception {
// SPR-9284
NoDefaultConstructorMap < String , Integer > map = new NoDefaultConstructorMap < String , Integer > (
Collections . < String , Integer > singletonMap ( "1" , 1 ) ) ;
TypeDescriptor sourceType = TypeDescriptor . map ( NoDefaultConstructorMap . class ,
TypeDescriptor . valueOf ( String . class ) , TypeDescriptor . valueOf ( Integer . class ) ) ;
TypeDescriptor targetType = TypeDescriptor . map ( NoDefaultConstructorMap . class ,
TypeDescriptor . valueOf ( String . class ) , TypeDescriptor . valueOf ( Integer . class ) ) ;
assertTrue ( conversionService . canConvert ( sourceType , targetType ) ) ;
@SuppressWarnings ( "unchecked" )
Map < String , Integer > result = ( Map < String , Integer > ) conversionService . convert ( map , sourceType , targetType ) ;
assertEquals ( map , result ) ;
assertEquals ( NoDefaultConstructorMap . class , result . getClass ( ) ) ;
}
public static class NoDefaultConstructorMap < K , V > extends HashMap < K , V > {
public NoDefaultConstructorMap ( Map < ? extends K , ? extends V > m ) {
super ( m ) ;
}
}
}