Project

General

Profile

Download (15.9 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy 
4
* http://www.e-taxonomy.eu
5
* 
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
 
10
package eu.etaxonomy.cdm.model.common;
11

    
12
import static org.junit.Assert.*;
13

    
14
import java.beans.PropertyChangeEvent;
15
import java.beans.PropertyChangeListener;
16
import java.beans.PropertyChangeSupport;
17
import java.lang.reflect.Field;
18
import java.util.Calendar;
19
import java.util.UUID;
20

    
21
import org.apache.log4j.Logger;
22
import org.junit.After;
23
import org.junit.AfterClass;
24
import org.junit.Before;
25
import org.junit.BeforeClass;
26
import org.junit.Test;
27

    
28
import eu.etaxonomy.cdm.model.agent.Person;
29
import eu.etaxonomy.cdm.test.unit.EntityTestBase;
30

    
31

    
32
/**
33
 * @author a.mueller
34
 *
35
 */
36
public class CdmBaseTest extends EntityTestBase{
37
	private static final Logger logger = Logger.getLogger(CdmBaseTest.class);
38
	
39
	static CdmBase cdmBase;
40

    
41
	static public class TestCdmBaseClass extends CdmBase{
42
		public String testString = "testStringXsdfjlksj";
43
		public float testFloat = (float)1.43446E-5f;
44
		public boolean testBoolean = false;
45
	}
46
	
47
	public class PropListener implements PropertyChangeListener {
48
		private PropertyChangeEvent event;
49
		public PropListener() {
50
			event = null;
51
		}	
52
		
53
		public void propertyChange(PropertyChangeEvent evt) {
54
			this.event = evt;
55
		}
56

    
57
		public boolean isChanged() {
58
			return event != null;
59
		}
60
		
61
		public Object getOldValue() {
62
			return event.getOldValue();
63
		}
64
		
65
		public Object getNewValue() {
66
			return event.getNewValue();
67
		}
68
		
69
		public String getChangedPropertyName() {
70
			return event.getPropertyName();
71
		}
72
		
73
	}
74
	
75
	/**
76
	 * @throws java.lang.Exception
77
	 */
78
	@BeforeClass
79
	public static void setUpBeforeClass() throws Exception {
80
	}
81
	
82
	private static CdmBase getTestCdmBase(){
83
		return new TestCdmBaseClass();
84
	}
85

    
86
	/**
87
	 * @throws java.lang.Exception
88
	 */
89
	@AfterClass
90
	public static void tearDownAfterClass() throws Exception {
91
		cdmBase = null;
92
	}
93

    
94
	/**
95
	 * @throws java.lang.Exception
96
	 */
97
	@Before
98
	public void setUp() throws Exception {
99
		cdmBase = getTestCdmBase();
100
	}
101

    
102
	/**
103
	 * @throws java.lang.Exception
104
	 */
105
	@After
106
	public void tearDown() throws Exception {
107
	}
108

    
109
	
110
	private void removeExistingListeners(CdmBase cdmBase){
111
		Field fieldPropChangeSupport;
112
		PropertyChangeSupport propertyChangeSupport = null;
113
		try {
114
			Class clazz = CdmBase.class;
115
			fieldPropChangeSupport = clazz.getDeclaredField("propertyChangeSupport");
116
			fieldPropChangeSupport.setAccessible(true);
117
			propertyChangeSupport = (PropertyChangeSupport)fieldPropChangeSupport.get(cdmBase);
118
		} catch (SecurityException e) {
119
			fail();
120
		} catch (IllegalArgumentException e) {
121
			fail();
122
		} catch (NoSuchFieldException e) {
123
			fail();
124
		} catch (IllegalAccessException e) {
125
			fail();
126
		}
127
		PropertyChangeListener[] listeners = propertyChangeSupport.getPropertyChangeListeners();
128
		for (PropertyChangeListener listener : listeners){
129
			propertyChangeSupport.removePropertyChangeListener(listener);
130
		}
131
		assertFalse(cdmBase.hasListeners("created"));
132
		assertFalse(cdmBase.hasListeners("createdBy"));
133
		assertFalse(cdmBase.hasListeners("id"));
134
		assertFalse(cdmBase.hasListeners("uuid"));
135
	}
136
/*************** TESTS **************************************************/
137
	
138

    
139
	/**
140
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#CdmBase()}.
141
	 */
142
	@Test
143
	public void testCdmBase() {
144
		assertTrue(cdmBase != null);
145
	}
146

    
147
	/**
148
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#addPropertyChangeListener(java.beans.PropertyChangeListener)}.
149
	 */
150
	@Test
151
	public void testAddPropertyChangeListenerPropertyChangeListener() {
152
		removeExistingListeners(cdmBase);
153
		assertFalse(cdmBase.hasListeners("uuid"));
154
		
155
		PropListener listener = new PropListener();
156
		cdmBase.addPropertyChangeListener(listener);
157
		UUID uuid = UUID.randomUUID();
158
		
159
		assertTrue(cdmBase.hasListeners("created"));
160
		assertTrue(cdmBase.hasListeners("createdBy"));
161
		assertTrue(cdmBase.hasListeners("id"));
162
		assertTrue(cdmBase.hasListeners("uuid"));
163
		
164
		cdmBase.setUuid(uuid);
165
		org.junit.Assert.assertTrue(listener.isChanged());
166
	}
167

    
168
	/**
169
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)}.
170
	 */
171
	@Test
172
	public void testAddPropertyChangeListenerStringPropertyChangeListener() {
173
		removeExistingListeners(cdmBase);
174
		assertFalse(cdmBase.hasListeners("uuid"));
175
		
176
		PropListener listener = new PropListener();
177
		cdmBase.addPropertyChangeListener("uuid", listener);
178
		cdmBase.setId(22);
179
		assertFalse(listener.isChanged());
180
		assertTrue(cdmBase.hasListeners("uuid"));
181
		
182
		UUID uuid = UUID.randomUUID();
183
		cdmBase.setUuid(uuid);
184
		assertTrue(listener.isChanged());
185
	}
186
	
187

    
188
	/**
189
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#removePropertyChangeListener(java.beans.PropertyChangeListener)}.
190
	 */
191
	@Test
192
	public void testRemovePropertyChangeListenerPropertyChangeListener() {
193
		removeExistingListeners(cdmBase);
194
		assertFalse(cdmBase.hasListeners("uuid"));
195
		
196
		PropListener listener = new PropListener();
197
		cdmBase.addPropertyChangeListener(listener);
198
		assertTrue(cdmBase.hasListeners("created"));
199
		assertTrue(cdmBase.hasListeners("createdBy"));
200
		assertTrue(cdmBase.hasListeners("id"));
201
		assertTrue(cdmBase.hasListeners("uuid"));
202
		
203
		cdmBase.removePropertyChangeListener(listener);
204
		assertFalse(cdmBase.hasListeners("created"));
205
		assertFalse(cdmBase.hasListeners("createdBy"));
206
		assertFalse(cdmBase.hasListeners("id"));
207
		assertFalse(cdmBase.hasListeners("uuid"));
208
		
209
		UUID uuid = UUID.randomUUID();
210
		cdmBase.setUuid(uuid);
211
		assertFalse(listener.isChanged());
212
	}
213

    
214
	/**
215
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)}.
216
	 */
217
	@Test
218
	public void testRemovePropertyChangeListenerStringPropertyChangeListener() {
219
		removeExistingListeners(cdmBase);
220
		String strUuid = "uuid";
221
		assertFalse(cdmBase.hasListeners(strUuid));
222

    
223
		PropListener listener = new PropListener();
224
		cdmBase.addPropertyChangeListener(strUuid, listener);
225
		assertTrue(cdmBase.hasListeners(strUuid));
226
		
227
		cdmBase.removePropertyChangeListener(strUuid, listener);
228
		assertFalse(cdmBase.hasListeners(strUuid));
229
		
230
		UUID uuid = UUID.randomUUID();
231
		cdmBase.setUuid(uuid);
232
		assertFalse(listener.isChanged());	
233
	}
234

    
235
	/**
236
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#hasListeners(java.lang.String)}.
237
	 */
238
	@Test
239
	public void testHasListeners() {
240
		String prop = "uuid";
241
		removeExistingListeners(cdmBase);
242
		assertFalse(cdmBase.hasListeners(prop));
243
		
244
		PropListener listener = new PropListener();
245
		cdmBase.addPropertyChangeListener(prop, listener);
246
		assertTrue(cdmBase.hasListeners(prop));
247
		
248
		removeExistingListeners(cdmBase);
249
		assertFalse(cdmBase.hasListeners(prop));
250
		
251
		cdmBase.addPropertyChangeListener(prop, listener);
252
		assertTrue(cdmBase.hasListeners(prop));
253
	}
254

    
255
	/**
256
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#firePropertyChange(java.lang.String, java.lang.String, java.lang.String)}.
257
	 */
258
	@Test
259
	public void testFirePropertyChangeStringStringString() {
260
		//Initialize
261
		TestCdmBaseClass testCdm;
262
		testCdm = (TestCdmBaseClass)cdmBase;
263
		String prop = "testString";
264
		removeExistingListeners(testCdm);
265
		assertFalse(testCdm.hasListeners(prop));
266
		PropListener listener = new PropListener();
267
		testCdm.addPropertyChangeListener(prop, listener);
268
		assertTrue(testCdm.hasListeners(prop));
269
		
270
		//Test
271
		String oldValue = testCdm.testString;
272
		String newValue = "sdfklwekj";
273
		assertFalse(newValue.equals(oldValue));
274
		testCdm.firePropertyChange(prop, oldValue, newValue);
275
		assertTrue(listener.isChanged());
276
		assertEquals(oldValue, listener.getOldValue());
277
		assertEquals(newValue, listener.getNewValue());
278
	}
279

    
280
	/**
281
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#firePropertyChange(java.lang.String, int, int)}.
282
	 */
283
	@Test
284
	public void testFirePropertyChangeStringIntInt() {
285
		//Initialize
286
		String prop = "id";
287
		removeExistingListeners(cdmBase);
288
		assertFalse(cdmBase.hasListeners(prop));
289
		PropListener listener = new PropListener();
290
		cdmBase.addPropertyChangeListener(prop, listener);
291
		assertTrue(cdmBase.hasListeners(prop));
292
		
293
		//Test
294
		int oldValue = cdmBase.getId();
295
		int newValue = 45;
296
		assertTrue(oldValue != newValue);
297
		cdmBase.firePropertyChange(prop, oldValue, newValue);
298
		assertTrue(listener.isChanged());
299
		assertEquals(oldValue, listener.getOldValue());
300
		assertEquals(newValue, listener.getNewValue());
301
	}
302

    
303
	/**
304
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#firePropertyChange(java.lang.String, float, float)}.
305
	 */
306
	@Test
307
	public void testFirePropertyChangeStringFloatFloat() {
308
		//Initialize
309
		TestCdmBaseClass testCdm;
310
		testCdm = (TestCdmBaseClass)cdmBase;
311
		String prop = "testFloat";
312
		removeExistingListeners(testCdm);
313
		assertFalse(testCdm.hasListeners(prop));
314
		PropListener listener = new PropListener();
315
		testCdm.addPropertyChangeListener(prop, listener);
316
		assertTrue(testCdm.hasListeners(prop));
317
		
318
		//Test
319
		float oldValue = testCdm.testFloat;
320
		float newValue = (float)1.40239846E-4f;
321
		assertFalse(oldValue == newValue);
322
		testCdm.firePropertyChange(prop, oldValue, newValue);
323
		assertTrue(listener.isChanged());
324
		assertEquals(oldValue, listener.getOldValue());
325
		assertEquals(newValue, listener.getNewValue());
326
	}
327

    
328
	/**
329
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#firePropertyChange(java.lang.String, boolean, boolean)}.
330
	 */
331
	@Test
332
	public void testFirePropertyChangeStringBooleanBoolean() {
333
		//Initialize
334
		TestCdmBaseClass testCdm;
335
		testCdm = (TestCdmBaseClass)cdmBase;
336
		String prop = "testBoolean";
337
		removeExistingListeners(testCdm);
338
		assertFalse(testCdm.hasListeners(prop));
339
		PropListener listener = new PropListener();
340
		testCdm.addPropertyChangeListener(prop, listener);
341
		assertTrue(testCdm.hasListeners(prop));
342
		
343
		//Test
344
		boolean oldValue = testCdm.testBoolean;
345
		boolean newValue = ! testCdm.testBoolean;
346
		assertFalse(oldValue == newValue);
347
		testCdm.firePropertyChange(prop, oldValue, newValue);
348
		assertTrue(listener.isChanged());
349
		assertEquals(oldValue, listener.getOldValue());
350
		assertEquals(newValue, listener.getNewValue());
351
	}
352

    
353
	/**
354
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#firePropertyChange(java.lang.String, java.lang.Object, java.lang.Object)}.
355
	 */
356
	@Test
357
	public void testFirePropertyChangeStringObjectObject() {
358
		//Initialize
359
		String prop = "uuid";
360
		removeExistingListeners(cdmBase);
361
		assertFalse(cdmBase.hasListeners(prop));
362
		PropListener listener = new PropListener();
363
		cdmBase.addPropertyChangeListener(prop, listener);
364
		assertTrue(cdmBase.hasListeners(prop));
365
		
366
		//Test
367
		UUID oldValue = cdmBase.getUuid();
368
		UUID newValue = UUID.randomUUID();
369
		cdmBase.firePropertyChange(prop, oldValue, newValue);
370
		assertTrue(listener.isChanged());
371
		assertEquals(oldValue, listener.getOldValue());
372
		assertEquals(newValue, listener.getNewValue());
373
	}
374

    
375
	/**
376
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#firePropertyChange(java.beans.PropertyChangeEvent)}.
377
	 */
378
	@Test
379
	public void testFirePropertyChangePropertyChangeEvent() {
380
		//Initialize
381
		String prop = "uuid";
382
		removeExistingListeners(cdmBase);
383
		assertFalse(cdmBase.hasListeners(prop));
384
		PropListener listener = new PropListener();
385
		cdmBase.addPropertyChangeListener(prop, listener);
386
		assertTrue(cdmBase.hasListeners(prop));
387
		
388
		//Test
389
		UUID oldValue = cdmBase.getUuid();
390
		UUID newValue = UUID.randomUUID();
391
		PropertyChangeEvent event = new PropertyChangeEvent(cdmBase , prop, oldValue, newValue);
392
		cdmBase.firePropertyChange(event);
393
		assertTrue(listener.isChanged());
394
		assertEquals(oldValue, listener.getOldValue());
395
		assertEquals(newValue, listener.getNewValue());
396
	}
397

    
398
	/**
399
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#getId()}.
400
	 */
401
	@Test
402
	public void testGetId() {
403
		assertEquals(0, cdmBase.getId());
404
		int id = 22;
405
		cdmBase.setId(id);
406
		assertEquals(id, cdmBase.getId());
407
	}
408

    
409
	/**
410
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#setId(int)}.
411
	 */
412
	@Test
413
	public void testSetId() {
414
		int id = 22;
415
		cdmBase.setId(id);
416
		assertEquals(id, cdmBase.getId());
417
	}
418

    
419
	/**
420
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#getUuid()}.
421
	 */
422
	@Test
423
	public void testGetUuid() {
424
		assertNotNull(cdmBase.getUuid());
425
		assertFalse(UUID.randomUUID().equals(cdmBase.getUuid()));
426
		assertFalse("".equals(cdmBase.getUuid()));
427
		UUID uuid = UUID.randomUUID();
428
		cdmBase.setUuid(uuid);
429
		assertEquals(uuid, cdmBase.getUuid());
430
	}
431

    
432
	/**
433
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#setUuid(java.util.UUID)}.
434
	 */
435
	@Test
436
	public void testSetUuid() {
437
		UUID uuid = UUID.randomUUID();
438
		cdmBase.setUuid(uuid);
439
		assertEquals(uuid, cdmBase.getUuid());
440
	}
441

    
442
	/**
443
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#getCreated()}.
444
	 */
445
	@Test
446
	public void testGetCreated() {
447
		assertNotNull(cdmBase.getCreated());
448
		assertFalse(cdmBase.getCreated().after(Calendar.getInstance() ));
449
		Calendar calendar = Calendar.getInstance();
450
		cdmBase.setCreated(calendar);
451
		assertEquals(0, cdmBase.getCreated().get(Calendar.MILLISECOND ));
452
		calendar.set(Calendar.MILLISECOND, 0);
453
		assertEquals(calendar, cdmBase.getCreated());
454
	}
455

    
456
	/**
457
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#setCreated(java.util.Calendar)}.
458
	 */
459
	@Test
460
	public void testSetCreated() {
461
		Calendar calendar = Calendar.getInstance();
462
		Calendar calendarTrue = (Calendar)calendar.clone();
463
		Calendar calendarFalse = (Calendar)calendar.clone();
464
		calendarFalse.add(2, 5);
465
		cdmBase.setCreated(calendar);
466
		calendar.set(Calendar.MILLISECOND, 0);
467
		calendarTrue.set(Calendar.MILLISECOND, 0);
468
		calendarFalse.set(Calendar.MILLISECOND, 0);
469
		assertEquals(calendar, cdmBase.getCreated());
470
		assertEquals(calendarTrue, cdmBase.getCreated());
471
		assertFalse(calendarFalse.equals(calendar));
472
	}
473

    
474
	/**
475
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#getCreatedBy()}.
476
	 */
477
	@Test
478
	public void testGetCreatedBy() {
479
		assertNull(cdmBase.getCreatedBy());
480
		Person person = Person.NewInstance();
481
		cdmBase.setCreatedBy(person);
482
		assertEquals(person, cdmBase.getCreatedBy());
483
		assertSame(person, cdmBase.getCreatedBy());
484
	}
485

    
486
	/**
487
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#setCreatedBy(eu.etaxonomy.cdm.model.agent.Person)}.
488
	 */
489
	@Test
490
	public void testSetCreatedBy() {
491
		Person person = Person.NewInstance();
492
		String trueLastName = "person1";
493
		person.setLastname(trueLastName);
494
		
495
		Person personFalse = Person.NewInstance();
496
		personFalse.setLastname(trueLastName);
497
		personFalse.setFirstname("xxx");
498
		
499
		cdmBase.setCreatedBy(person);
500
		assertEquals(person, cdmBase.getCreatedBy());
501
		assertSame(person, cdmBase.getCreatedBy());
502
		assertFalse(personFalse.equals(person));
503
		//null
504
		cdmBase.setCreated(null);
505
		assertNull(cdmBase.getCreated());
506

    
507
	}
508

    
509
	/**
510
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#equals(java.lang.Object)}.
511
	 */
512
	@Test
513
	public void testEqualsObject() {
514
		ICdmBase cdmBase2 = getTestCdmBase();
515
		cdmBase2.setUuid(cdmBase.getUuid());
516
		cdmBase2.setCreated(cdmBase.getCreated());
517
		cdmBase2.setCreatedBy(Person.NewInstance());
518
		assertEquals(cdmBase, cdmBase2);
519
		//null
520
		assertFalse(cdmBase.equals(null));
521
	}
522

    
523
	/**
524
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#toString()}.
525
	 */
526
	@Test
527
	public void testToString() {
528
		String expected = cdmBase.getClass().getSimpleName()+"#"+cdmBase.getId()+"<"+cdmBase.getUuid()+">";
529
		assertEquals(expected, cdmBase.toString());
530
	}
531

    
532

    
533
}
(2-2/8)