Project

General

Profile

Download (16 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.assertEquals;
13
import static org.junit.Assert.assertFalse;
14
import static org.junit.Assert.assertNotNull;
15
import static org.junit.Assert.assertNull;
16
import static org.junit.Assert.assertSame;
17
import static org.junit.Assert.assertTrue;
18
import static org.junit.Assert.fail;
19

    
20
import java.beans.PropertyChangeEvent;
21
import java.beans.PropertyChangeListener;
22
import java.beans.PropertyChangeSupport;
23
import java.lang.reflect.Field;
24
import java.util.UUID;
25

    
26
import org.apache.log4j.Logger;
27
import org.joda.time.DateTime;
28
import org.junit.After;
29
import org.junit.AfterClass;
30
import org.junit.Before;
31
import org.junit.BeforeClass;
32
import org.junit.Test;
33

    
34
import eu.etaxonomy.cdm.test.unit.EntityTestBase;
35

    
36

    
37
/**
38
 * @author a.mueller
39
 *
40
 */
41
public class CdmBaseTest extends EntityTestBase{
42
	@SuppressWarnings("unused")
43
	private static final Logger logger = Logger.getLogger(CdmBaseTest.class);
44
	
45
	static CdmBase cdmBase;
46

    
47
	static public class TestCdmBaseClass extends CdmBase{
48
		private static final long serialVersionUID = -489812714256694973L;
49
		public String testString = "testStringXsdfjlksj";
50
		public float testFloat = 1.43446E-5f;
51
		public boolean testBoolean = false;
52
	}
53
	
54
	public class PropListener implements PropertyChangeListener {
55
		private PropertyChangeEvent event;
56
		public PropListener() {
57
			event = null;
58
		}	
59
		
60
		public void propertyChange(PropertyChangeEvent evt) {
61
			this.event = evt;
62
		}
63

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

    
93
	/**
94
	 * @throws java.lang.Exception
95
	 */
96
	@AfterClass
97
	public static void tearDownAfterClass() throws Exception {
98
		cdmBase = null;
99
	}
100

    
101
	/**
102
	 * @throws java.lang.Exception
103
	 */
104
	@Before
105
	public void setUp() throws Exception {
106
		cdmBase = getTestCdmBase();
107
	}
108

    
109
	/**
110
	 * @throws java.lang.Exception
111
	 */
112
	@After
113
	public void tearDown() throws Exception {
114
	}
115

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

    
146
	/**
147
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#CdmBase()}.
148
	 */
149
	@Test
150
	public void testCdmBase() {
151
		assertTrue(cdmBase != null);
152
	}
153

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

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

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

    
221
	/**
222
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)}.
223
	 */
224
	@Test
225
	public void testRemovePropertyChangeListenerStringPropertyChangeListener() {
226
		removeExistingListeners(cdmBase);
227
		String strUuid = "uuid";
228
		assertFalse(cdmBase.hasListeners(strUuid));
229

    
230
		PropListener listener = new PropListener();
231
		cdmBase.addPropertyChangeListener(strUuid, listener);
232
		assertTrue(cdmBase.hasListeners(strUuid));
233
		
234
		cdmBase.removePropertyChangeListener(strUuid, listener);
235
		assertFalse(cdmBase.hasListeners(strUuid));
236
		
237
		UUID uuid = UUID.randomUUID();
238
		cdmBase.setUuid(uuid);
239
		assertFalse(listener.isChanged());	
240
	}
241

    
242
	/**
243
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#hasListeners(java.lang.String)}.
244
	 */
245
	@Test
246
	public void testHasListeners() {
247
		String prop = "uuid";
248
		removeExistingListeners(cdmBase);
249
		assertFalse(cdmBase.hasListeners(prop));
250
		
251
		PropListener listener = new PropListener();
252
		cdmBase.addPropertyChangeListener(prop, listener);
253
		assertTrue(cdmBase.hasListeners(prop));
254
		
255
		removeExistingListeners(cdmBase);
256
		assertFalse(cdmBase.hasListeners(prop));
257
		
258
		cdmBase.addPropertyChangeListener(prop, listener);
259
		assertTrue(cdmBase.hasListeners(prop));
260
	}
261

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

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

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

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

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

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

    
405
	/**
406
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#getId()}.
407
	 */
408
	@Test
409
	public void testGetId() {
410
		assertEquals(0, cdmBase.getId());
411
		int id = 22;
412
		cdmBase.setId(id);
413
		assertEquals(id, cdmBase.getId());
414
	}
415

    
416
	/**
417
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#setId(int)}.
418
	 */
419
	@Test
420
	public void testSetId() {
421
		int id = 22;
422
		cdmBase.setId(id);
423
		assertEquals(id, cdmBase.getId());
424
	}
425

    
426
	/**
427
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#getUuid()}.
428
	 */
429
	@Test
430
	public void testGetUuid() {
431
		assertNotNull(cdmBase.getUuid());
432
		assertFalse(UUID.randomUUID().equals(cdmBase.getUuid()));
433
		assertFalse("".equals(cdmBase.getUuid()));
434
		UUID uuid = UUID.randomUUID();
435
		cdmBase.setUuid(uuid);
436
		assertEquals(uuid, cdmBase.getUuid());
437
	}
438

    
439
	/**
440
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#setUuid(java.util.UUID)}.
441
	 */
442
	@Test
443
	public void testSetUuid() {
444
		UUID uuid = UUID.randomUUID();
445
		cdmBase.setUuid(uuid);
446
		assertEquals(uuid, cdmBase.getUuid());
447
	}
448

    
449
	/**
450
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#getCreated()}.
451
	 */
452
	@Test
453
	public void testGetCreated() {
454
		assertNotNull(cdmBase.getCreated());
455
		assertFalse(cdmBase.getCreated().isAfter(new DateTime()));
456
		DateTime dateTime = new DateTime();
457
		cdmBase.setCreated(dateTime);
458
		assertEquals(0, cdmBase.getCreated().getMillisOfSecond());
459
		dateTime = dateTime.withMillisOfSecond(0);
460
		assertEquals(dateTime, cdmBase.getCreated());
461
	}
462

    
463
	/**
464
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#setCreated(java.util.Calendar)}.
465
	 */
466
	@Test
467
	public void testSetCreated() {
468
		DateTime calendar = new DateTime();
469
		DateTime calendarTrue = calendar.withMillisOfSecond(23);
470
		DateTime calendarFalse = calendar.withMillisOfSecond(23);
471
		calendarFalse = calendarFalse.plusMonths(5);
472
		cdmBase.setCreated(calendar);
473
		calendar = calendar.withMillisOfSecond(0);
474
		calendarTrue = calendarTrue.withMillisOfSecond(0);
475
		calendarFalse = calendarFalse.withMillisOfSecond(0);
476
		assertEquals(calendar, cdmBase.getCreated());
477
		assertEquals(calendarTrue, cdmBase.getCreated());
478
		assertFalse(calendarFalse.equals(calendar));
479
	}
480

    
481
	/**
482
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#getCreatedBy()}.
483
	 */
484
	@Test
485
	public void testGetCreatedBy() {
486
		assertNull(cdmBase.getCreatedBy());
487
		User user = new User();
488
		cdmBase.setCreatedBy(user);
489
		assertEquals(user, cdmBase.getCreatedBy());
490
		assertSame(user, cdmBase.getCreatedBy());
491
	}
492

    
493
	/**
494
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#setCreatedBy(eu.etaxonomy.cdm.model.agent.Person)}.
495
	 */
496
	@Test
497
	public void testSetCreatedBy() {
498
		User person = new User();
499
		
500
		User personFalse = new User();
501
		
502
		cdmBase.setCreatedBy(person);
503
		assertEquals(person, cdmBase.getCreatedBy());
504
		assertSame(person, cdmBase.getCreatedBy());
505
		assertFalse(personFalse.equals(person));
506
		//null
507
		cdmBase.setCreated(null);
508
		assertNull(cdmBase.getCreated());
509

    
510
	}
511

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

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

    
535

    
536
}
(2-2/12)