1
1
/*
2
- * Copyright 2002-2011 the original author or authors.
2
+ * Copyright 2002-2012 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
17
17
package org .springframework .core .convert .support ;
18
18
19
19
import java .util .Arrays ;
20
+ import java .util .Collections ;
20
21
import java .util .HashMap ;
21
22
import java .util .LinkedHashMap ;
22
23
import java .util .List ;
@@ -55,7 +56,7 @@ public void scalarMap() throws Exception {
55
56
}
56
57
conversionService .addConverterFactory (new StringToNumberConverterFactory ());
57
58
assertTrue (conversionService .canConvert (sourceType , targetType ));
58
- @ SuppressWarnings ("unchecked" )
59
+ @ SuppressWarnings ("unchecked" )
59
60
Map <Integer , Integer > result = (Map <Integer , Integer >) conversionService .convert (map , sourceType , targetType );
60
61
assertFalse (map .equals (result ));
61
62
assertEquals ((Integer ) 9 , result .get (1 ));
@@ -79,7 +80,7 @@ public void scalarMapNotGenericSourceField() throws Exception {
79
80
map .put ("1" , "9" );
80
81
map .put ("2" , "37" );
81
82
TypeDescriptor sourceType = new TypeDescriptor (getClass ().getField ("notGenericMapSource" ));
82
- TypeDescriptor targetType = new TypeDescriptor (getClass ().getField ("scalarMapTarget" ));
83
+ TypeDescriptor targetType = new TypeDescriptor (getClass ().getField ("scalarMapTarget" ));
83
84
assertTrue (conversionService .canConvert (sourceType , targetType ));
84
85
try {
85
86
conversionService .convert (map , sourceType , targetType );
@@ -88,15 +89,15 @@ public void scalarMapNotGenericSourceField() throws Exception {
88
89
}
89
90
conversionService .addConverterFactory (new StringToNumberConverterFactory ());
90
91
assertTrue (conversionService .canConvert (sourceType , targetType ));
91
- @ SuppressWarnings ("unchecked" )
92
+ @ SuppressWarnings ("unchecked" )
92
93
Map <Integer , Integer > result = (Map <Integer , Integer >) conversionService .convert (map , sourceType , targetType );
93
94
assertFalse (map .equals (result ));
94
95
assertEquals ((Integer ) 9 , result .get (1 ));
95
- assertEquals ((Integer ) 37 , result .get (2 ));
96
+ assertEquals ((Integer ) 37 , result .get (2 ));
96
97
}
97
-
98
+
98
99
public Map notGenericMapSource ;
99
-
100
+
100
101
@ Test
101
102
public void collectionMap () throws Exception {
102
103
Map <String , List <String >> map = new HashMap <String , List <String >>();
@@ -109,11 +110,11 @@ public void collectionMap() throws Exception {
109
110
conversionService .convert (map , sourceType , targetType );
110
111
} catch (ConversionFailedException e ) {
111
112
assertTrue (e .getCause () instanceof ConverterNotFoundException );
112
- }
113
+ }
113
114
conversionService .addConverter (new CollectionToCollectionConverter (conversionService ));
114
115
conversionService .addConverterFactory (new StringToNumberConverterFactory ());
115
116
assertTrue (conversionService .canConvert (sourceType , targetType ));
116
- @ SuppressWarnings ("unchecked" )
117
+ @ SuppressWarnings ("unchecked" )
117
118
Map <Integer , List <Integer >> result = (Map <Integer , List <Integer >>) conversionService .convert (map , sourceType , targetType );
118
119
assertFalse (map .equals (result ));
119
120
assertEquals (Arrays .asList (9 , 12 ), result .get (1 ));
@@ -134,12 +135,12 @@ public void collectionMapSourceTarget() throws Exception {
134
135
conversionService .convert (map , sourceType , targetType );
135
136
fail ("Should have failed" );
136
137
} catch (ConverterNotFoundException e ) {
137
-
138
+
138
139
}
139
140
conversionService .addConverter (new CollectionToCollectionConverter (conversionService ));
140
141
conversionService .addConverterFactory (new StringToNumberConverterFactory ());
141
142
assertTrue (conversionService .canConvert (sourceType , targetType ));
142
- @ SuppressWarnings ("unchecked" )
143
+ @ SuppressWarnings ("unchecked" )
143
144
Map <Integer , List <Integer >> result = (Map <Integer , List <Integer >>) conversionService .convert (map , sourceType , targetType );
144
145
assertFalse (map .equals (result ));
145
146
assertEquals (Arrays .asList (9 , 12 ), result .get (1 ));
@@ -167,7 +168,7 @@ public void collectionMapNotGenericTargetCollectionToObjectInteraction() throws
167
168
assertTrue (conversionService .canConvert (Map .class , Map .class ));
168
169
assertSame (map , conversionService .convert (map , Map .class ));
169
170
}
170
-
171
+
171
172
@ Test
172
173
public void emptyMap () throws Exception {
173
174
Map <String , String > map = new HashMap <String , String >();
@@ -200,4 +201,26 @@ public void emptyMapDifferentTargetImplType() throws Exception {
200
201
201
202
public LinkedHashMap <String , String > emptyMapDifferentTarget ;
202
203
204
+ @ Test
205
+ public void noDefaultConstructorCopyNotRequired () throws Exception {
206
+ // SPR-9284
207
+ NoDefaultConstructorMap <String , Integer > map = new NoDefaultConstructorMap <String ,Integer >(
208
+ Collections .<String , Integer > singletonMap ("1" , 1 ));
209
+ TypeDescriptor sourceType = TypeDescriptor .map (NoDefaultConstructorMap .class ,
210
+ TypeDescriptor .valueOf (String .class ), TypeDescriptor .valueOf (Integer .class ));
211
+ TypeDescriptor targetType = TypeDescriptor .map (NoDefaultConstructorMap .class ,
212
+ TypeDescriptor .valueOf (String .class ), TypeDescriptor .valueOf (Integer .class ));
213
+ assertTrue (conversionService .canConvert (sourceType , targetType ));
214
+ @ SuppressWarnings ("unchecked" )
215
+ Map <String , Integer > result = (Map <String , Integer >) conversionService .convert (map , sourceType , targetType );
216
+ assertEquals (map , result );
217
+ assertEquals (NoDefaultConstructorMap .class , result .getClass ());
218
+ }
219
+
220
+ public static class NoDefaultConstructorMap <K , V > extends HashMap <K , V > {
221
+ public NoDefaultConstructorMap (Map <? extends K , ? extends V > m ) {
222
+ super (m );
223
+ }
224
+ }
225
+
203
226
}
0 commit comments