Project

General

Profile

Download (16.6 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.assertNotSame;
18
import static org.junit.Assert.assertTrue;
19
import static org.junit.Assert.fail;
20

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

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

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

    
37

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
511
	}
512

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

    
527
	/**
528
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#toString()}.
529
	 */
530
	@Test
531
	public void testToString() {
532
		String expected = cdmBase.getClass().getSimpleName()+"#"+cdmBase.getId()+"<"+cdmBase.getUuid()+">";
533
		assertEquals(expected, cdmBase.toString());
534
	}
535
	/**
536
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#clone()}.
537
	 */
538
	@Test
539
	public void testClone(){
540
		try {
541
			CdmBase clone = (CdmBase) cdmBase.clone();
542
			assertNotSame(clone, cdmBase);
543
			assertEquals(clone.getId(), cdmBase.getId());
544
			assertFalse(clone.getUuid().equals(cdmBase.getUuid()));
545
			assertNotNull(clone.getCreated());
546
			assertNull(clone.getCreatedBy());
547
			
548
		} catch (CloneNotSupportedException e) {
549
			// TODO Auto-generated catch block
550
			e.printStackTrace();
551
		}
552
		
553
		
554
		
555
	}
556

    
557

    
558
}
(2-2/17)