1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package net.sf.ezmorph.bean;
18
19 import java.math.BigDecimal;
20 import java.math.BigInteger;
21 import java.util.HashMap;
22 import java.util.List;
23 import java.util.Map;
24
25 import junit.framework.Test;
26 import junit.framework.TestCase;
27 import junit.framework.TestSuite;
28 import junit.textui.TestRunner;
29 import net.sf.ezmorph.MorphException;
30
31
32
33
34 public class MorphDynaBeanTest extends TestCase
35 {
36 public static void main( String[] args )
37 {
38 TestRunner.run( suite() );
39 }
40
41 public static Test suite()
42 {
43 TestSuite suite = new TestSuite( MorphDynaBeanTest.class );
44 suite.setName( "MorphDynaBean Tests" );
45 return suite;
46 }
47
48 private MorphDynaBean dynaBean;
49 private MorphDynaBean primitiveDynaBean;
50
51 public MorphDynaBeanTest( String name )
52 {
53 super( name );
54 }
55
56 public void testConstructor_fail_Exception()
57 {
58 try{
59 dynaBean = new MorphDynaBean();
60 dynaBean.setDynaBeanClass( new MorphDynaClass( "J", String.class, null ) );
61 fail( "should have thrown a MorphException" );
62 }
63 catch( MorphException expected ){
64
65 }
66 }
67
68 public void testConstructor_fail_invalidPropertyClass()
69 {
70 try{
71 Map properties = new HashMap();
72 properties.put( "object", new Object() );
73 dynaBean = new MorphDynaBean();
74 dynaBean.setDynaBeanClass( new MorphDynaClass( properties ) );
75 fail( "should have thrown a MorphException" );
76 }
77 catch( MorphException expected ){
78
79 }
80 }
81
82 public void testConstructor_fail_unkownClass()
83 {
84 try{
85 Map properties = new HashMap();
86 properties.put( "object", "java.lang.Unknown" );
87 dynaBean = new MorphDynaBean();
88 dynaBean.setDynaBeanClass( new MorphDynaClass( properties ) );
89 fail( "should have thrown a MorphException" );
90 }
91 catch( MorphException expected ){
92
93 }
94 }
95
96 public void testContains()
97 {
98 assertFalse( dynaBean.contains( "map", "key" ) );
99 dynaBean.set( "map", "key", "value" );
100 assertTrue( dynaBean.contains( "map", "key" ) );
101 }
102
103 public void testContains_fail_Exception()
104 {
105 try{
106 dynaBean.contains( "byte", "key" );
107 fail( "should have thrown a MorphException" );
108 }
109 catch( MorphException expected ){
110
111 }
112 }
113
114 public void testEquals()
115 {
116 assertTrue( dynaBean.equals( dynaBean ) );
117 assertFalse( dynaBean.equals( null ) );
118 assertFalse( dynaBean.equals( primitiveDynaBean ) );
119 assertFalse( dynaBean.equals( new Object() ) );
120 }
121
122 public void testGet_simple_nullValue() throws Exception
123 {
124 Map properties = new HashMap();
125 properties.put( "int", Integer.class );
126 MorphDynaClass dynaClass = new MorphDynaClass( properties );
127 dynaBean = (MorphDynaBean) dynaClass.newInstance();
128 assertNull( dynaBean.get( "int" ) );
129
130 properties.clear();
131 properties.put( "int", Integer.TYPE );
132 dynaClass = new MorphDynaClass( properties );
133 dynaBean = (MorphDynaBean) dynaClass.newInstance();
134 assertEquals( 0, ((Integer) dynaBean.get( "int" )).intValue() );
135 }
136
137 public void testGet_mapped_nullValue() throws Exception
138 {
139 Map properties = new HashMap();
140 properties.put( "map", Map.class );
141 MorphDynaClass dynaClass = new MorphDynaClass( properties );
142 dynaBean = (MorphDynaBean) dynaClass.newInstance();
143 assertNull( dynaBean.get( "map","key" ) );
144 }
145
146 public void testGet_unindexed()
147 {
148 try{
149 dynaBean.get( "byte", 0 );
150 fail( "should have thrown a MorphException" );
151 }
152 catch( MorphException expected ){
153
154 }
155 }
156
157 public void testGet_unknownProperty()
158 {
159 try{
160 dynaBean.get( "unknown" );
161 fail( "should have thrown a MorphException" );
162 }
163 catch( MorphException expected ){
164
165 }
166 }
167
168 public void testGet_unmapped()
169 {
170 try{
171 dynaBean.get( "byte", "key" );
172 fail( "should have thrown a MorphException" );
173 }
174 catch( MorphException expected ){
175
176 }
177 }
178
179 public void testGetSet()
180 {
181 dynaBean.set( "byte", Byte.valueOf( "1" ) );
182 dynaBean.set( "short", Short.valueOf( "1" ) );
183 dynaBean.set( "int", Integer.valueOf( "1" ) );
184 dynaBean.set( "long", Long.valueOf( "1" ) );
185 dynaBean.set( "float", Float.valueOf( "1" ) );
186 dynaBean.set( "double", Double.valueOf( "1" ) );
187 dynaBean.set( "bi", new BigInteger( "1" ) );
188 dynaBean.set( "bd", new BigDecimal( "1" ) );
189 dynaBean.set( "boolean", Boolean.TRUE );
190 dynaBean.set( "char", new Character( 'a' ) );
191
192 assertEquals( Byte.valueOf( "1" ), dynaBean.get( "byte" ) );
193 assertEquals( Short.valueOf( "1" ), dynaBean.get( "short" ) );
194 assertEquals( Integer.valueOf( "1" ), dynaBean.get( "int" ) );
195 assertEquals( Long.valueOf( "1" ), dynaBean.get( "long" ) );
196 assertEquals( Float.valueOf( "1" ), dynaBean.get( "float" ) );
197 assertEquals( Double.valueOf( "1" ), dynaBean.get( "double" ) );
198 assertEquals( new BigInteger( "1" ), dynaBean.get( "bi" ) );
199 assertEquals( new BigDecimal( "1" ), dynaBean.get( "bd" ) );
200 assertEquals( Boolean.TRUE, dynaBean.get( "boolean" ) );
201 assertEquals( new Character( 'a' ), dynaBean.get( "char" ) );
202 }
203
204 public void testGetSet_primitives()
205 {
206 primitiveDynaBean.set( "byte", Byte.valueOf( "1" ) );
207 primitiveDynaBean.set( "short", Short.valueOf( "1" ) );
208 primitiveDynaBean.set( "int", Integer.valueOf( "1" ) );
209 primitiveDynaBean.set( "long", Long.valueOf( "1" ) );
210 primitiveDynaBean.set( "float", Float.valueOf( "1" ) );
211 primitiveDynaBean.set( "double", Double.valueOf( "1" ) );
212 primitiveDynaBean.set( "boolean", Boolean.TRUE );
213 primitiveDynaBean.set( "char", new Character( 'a' ) );
214
215 assertEquals( Byte.valueOf( "1" ), primitiveDynaBean.get( "byte" ) );
216 assertEquals( Short.valueOf( "1" ), primitiveDynaBean.get( "short" ) );
217 assertEquals( Integer.valueOf( "1" ), primitiveDynaBean.get( "int" ) );
218 assertEquals( Long.valueOf( "1" ), primitiveDynaBean.get( "long" ) );
219 assertEquals( Float.valueOf( "1" ), primitiveDynaBean.get( "float" ) );
220 assertEquals( Double.valueOf( "1" ), primitiveDynaBean.get( "double" ) );
221 assertEquals( Boolean.TRUE, primitiveDynaBean.get( "boolean" ) );
222 assertEquals( new Character( 'a' ), primitiveDynaBean.get( "char" ) );
223 }
224
225 public void testGetSetIndexed_Array()
226 {
227 dynaBean.set( "strs", 0, "hello" );
228 dynaBean.set( "strs", 1, "world" );
229
230 assertEquals( "hello", dynaBean.get( "strs", 0 ) );
231 assertEquals( "world", dynaBean.get( "strs", 1 ) );
232 }
233
234 public void testGetSetIndexed_List()
235 {
236 dynaBean.set( "list", 0, "hello" );
237 dynaBean.set( "list", 1, "world" );
238
239 assertEquals( "hello", dynaBean.get( "list", 0 ) );
240 assertEquals( "world", dynaBean.get( "list", 1 ) );
241 }
242
243 public void testGetSetMapped()
244 {
245 dynaBean.set( "map", "key", "value" );
246 assertEquals( "value", dynaBean.get( "map", "key" ) );
247 }
248
249 public void testHashcode()
250 {
251 assertEquals( dynaBean.hashCode(), dynaBean.hashCode() );
252 assertTrue( dynaBean.hashCode() != primitiveDynaBean.hashCode() );
253 }
254
255 public void testRemove()
256 {
257 dynaBean.set( "map", "key", "value" );
258 assertTrue( dynaBean.contains( "map", "key" ) );
259 dynaBean.remove( "map", "key" );
260 assertFalse( dynaBean.contains( "map", "key" ) );
261 }
262
263 public void testRemove_fail_Exception()
264 {
265 try{
266 dynaBean.remove( "byte", "key" );
267 fail( "should have thrown a MorphException" );
268 }
269 catch( MorphException expected ){
270
271 }
272 }
273
274 public void testSet_unindexed()
275 {
276 try{
277 dynaBean.set( "byte", 0, null );
278 fail( "should have thrown a MorphException" );
279 }
280 catch( MorphException expected ){
281
282 }
283 }
284
285 public void testSet_unmapped()
286 {
287 try{
288 dynaBean.set( "byte", "key", null );
289 fail( "should have thrown a MorphException" );
290 }
291 catch( MorphException expected ){
292
293 }
294 }
295
296 protected void setUp() throws Exception
297 {
298 Map properties = new HashMap();
299 properties.put( "byte", Byte.class );
300 properties.put( "short", Short.class );
301 properties.put( "int", Integer.class );
302 properties.put( "long", Long.class );
303 properties.put( "float", Float.class );
304 properties.put( "double", Double.class );
305 properties.put( "bi", BigInteger.class );
306 properties.put( "bd", BigDecimal.class );
307 properties.put( "boolean", Boolean.class );
308 properties.put( "char", Character.class );
309 properties.put( "map", Map.class );
310 properties.put( "list", List.class );
311 properties.put( "strs", String[].class );
312 MorphDynaClass dynaClass = new MorphDynaClass( properties );
313 dynaBean = (MorphDynaBean) dynaClass.newInstance();
314
315 properties = new HashMap();
316 properties.put( "byte", byte.class );
317 properties.put( "short", short.class );
318 properties.put( "int", int.class );
319 properties.put( "long", long.class );
320 properties.put( "float", float.class );
321 properties.put( "double", double.class );
322 properties.put( "boolean", boolean.class );
323 properties.put( "char", char.class );
324 dynaClass = new MorphDynaClass( properties );
325 primitiveDynaBean = (MorphDynaBean) dynaClass.newInstance();
326 }
327 }