Project

General

Profile

Download (15 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.assertNotSame;
16
import static org.junit.Assert.assertNull;
17
import static org.junit.Assert.assertSame;
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.AfterClass;
30
import org.junit.Before;
31
import org.junit.Test;
32

    
33
import eu.etaxonomy.cdm.model.permission.User;
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
		@Override
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
	private static CdmBase getTestCdmBase(){
84
		return new TestCdmBaseClass();
85
	}
86

    
87
	@AfterClass
88
	public static void tearDownAfterClass() throws Exception {
89
		cdmBase = null;
90
	}
91

    
92
	@Before
93
	public void setUp() throws Exception {
94
		cdmBase = getTestCdmBase();
95
	}
96

    
97
	private void removeExistingListeners(CdmBase cdmBase){
98
		Field fieldPropChangeSupport;
99
		PropertyChangeSupport propertyChangeSupport = null;
100
		try {
101
			Class<?> clazz = CdmBase.class;
102
			fieldPropChangeSupport = clazz.getDeclaredField("propertyChangeSupport");
103
			fieldPropChangeSupport.setAccessible(true);
104
			propertyChangeSupport = (PropertyChangeSupport)fieldPropChangeSupport.get(cdmBase);
105
		} catch (SecurityException e) {
106
			fail();return;
107
		} catch (IllegalArgumentException e) {
108
			fail();return;
109
		} catch (NoSuchFieldException e) {
110
			fail();return;
111
		} catch (IllegalAccessException e) {
112
			fail();return;
113
		}
114
		PropertyChangeListener[] listeners = propertyChangeSupport.getPropertyChangeListeners();
115
		for (PropertyChangeListener listener : listeners){
116
			propertyChangeSupport.removePropertyChangeListener(listener);
117
		}
118
		assertFalse(cdmBase.hasListeners("created"));
119
		assertFalse(cdmBase.hasListeners("createdBy"));
120
		assertFalse(cdmBase.hasListeners("id"));
121
		assertFalse(cdmBase.hasListeners("uuid"));
122
	}
123

    
124
/*************** TESTS **************************************************/
125

    
126
	@Test
127
	public void testCdmBase() {
128
		assertTrue(cdmBase != null);
129
	}
130

    
131
	/**
132
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#addPropertyChangeListener(java.beans.PropertyChangeListener)}.
133
	 */
134
	@Test
135
	public void testAddPropertyChangeListenerPropertyChangeListener() {
136
		removeExistingListeners(cdmBase);
137
		assertFalse(cdmBase.hasListeners("uuid"));
138

    
139
		PropListener listener = new PropListener();
140
		cdmBase.addPropertyChangeListener(listener);
141
		UUID uuid = UUID.randomUUID();
142

    
143
		assertTrue(cdmBase.hasListeners("created"));
144
		assertTrue(cdmBase.hasListeners("createdBy"));
145
		assertTrue(cdmBase.hasListeners("id"));
146
		assertTrue(cdmBase.hasListeners("uuid"));
147

    
148
		cdmBase.setUuid(uuid);
149
		org.junit.Assert.assertTrue(listener.isChanged());
150
	}
151

    
152
	/**
153
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)}.
154
	 */
155
	@Test
156
	public void testAddPropertyChangeListenerStringPropertyChangeListener() {
157
		removeExistingListeners(cdmBase);
158
		assertFalse(cdmBase.hasListeners("uuid"));
159

    
160
		PropListener listener = new PropListener();
161
		cdmBase.addPropertyChangeListener("uuid", listener);
162
		cdmBase.setId(22);
163
		assertFalse(listener.isChanged());
164
		assertTrue(cdmBase.hasListeners("uuid"));
165

    
166
		UUID uuid = UUID.randomUUID();
167
		cdmBase.setUuid(uuid);
168
		assertTrue(listener.isChanged());
169
	}
170

    
171
	/**
172
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#removePropertyChangeListener(java.beans.PropertyChangeListener)}.
173
	 */
174
	@Test
175
	public void testRemovePropertyChangeListenerPropertyChangeListener() {
176
		removeExistingListeners(cdmBase);
177
		assertFalse(cdmBase.hasListeners("uuid"));
178

    
179
		PropListener listener = new PropListener();
180
		cdmBase.addPropertyChangeListener(listener);
181
		assertTrue(cdmBase.hasListeners("created"));
182
		assertTrue(cdmBase.hasListeners("createdBy"));
183
		assertTrue(cdmBase.hasListeners("id"));
184
		assertTrue(cdmBase.hasListeners("uuid"));
185

    
186
		cdmBase.removePropertyChangeListener(listener);
187
		assertFalse(cdmBase.hasListeners("created"));
188
		assertFalse(cdmBase.hasListeners("createdBy"));
189
		assertFalse(cdmBase.hasListeners("id"));
190
		assertFalse(cdmBase.hasListeners("uuid"));
191

    
192
		UUID uuid = UUID.randomUUID();
193
		cdmBase.setUuid(uuid);
194
		assertFalse(listener.isChanged());
195
	}
196

    
197
	/**
198
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)}.
199
	 */
200
	@Test
201
	public void testRemovePropertyChangeListenerStringPropertyChangeListener() {
202
		removeExistingListeners(cdmBase);
203
		String strUuid = "uuid";
204
		assertFalse(cdmBase.hasListeners(strUuid));
205

    
206
		PropListener listener = new PropListener();
207
		cdmBase.addPropertyChangeListener(strUuid, listener);
208
		assertTrue(cdmBase.hasListeners(strUuid));
209

    
210
		cdmBase.removePropertyChangeListener(strUuid, listener);
211
		assertFalse(cdmBase.hasListeners(strUuid));
212

    
213
		UUID uuid = UUID.randomUUID();
214
		cdmBase.setUuid(uuid);
215
		assertFalse(listener.isChanged());
216
	}
217

    
218
	@Test
219
	public void testHasListeners() {
220
		String prop = "uuid";
221
		removeExistingListeners(cdmBase);
222
		assertFalse(cdmBase.hasListeners(prop));
223

    
224
		PropListener listener = new PropListener();
225
		cdmBase.addPropertyChangeListener(prop, listener);
226
		assertTrue(cdmBase.hasListeners(prop));
227

    
228
		removeExistingListeners(cdmBase);
229
		assertFalse(cdmBase.hasListeners(prop));
230

    
231
		cdmBase.addPropertyChangeListener(prop, listener);
232
		assertTrue(cdmBase.hasListeners(prop));
233
	}
234

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

    
250
		//Test
251
		String oldValue = testCdm.testString;
252
		String newValue = "sdfklwekj";
253
		assertFalse(newValue.equals(oldValue));
254
		testCdm.firePropertyChange(prop, oldValue, newValue);
255
		assertTrue(listener.isChanged());
256
		assertEquals(oldValue, listener.getOldValue());
257
		assertEquals(newValue, listener.getNewValue());
258
	}
259

    
260
	/**
261
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#firePropertyChange(java.lang.String, int, int)}.
262
	 */
263
	@Test
264
	public void testFirePropertyChangeStringIntInt() {
265
		//Initialize
266
		String prop = "id";
267
		removeExistingListeners(cdmBase);
268
		assertFalse(cdmBase.hasListeners(prop));
269
		PropListener listener = new PropListener();
270
		cdmBase.addPropertyChangeListener(prop, listener);
271
		assertTrue(cdmBase.hasListeners(prop));
272

    
273
		//Test
274
		int oldValue = cdmBase.getId();
275
		int newValue = 45;
276
		assertTrue(oldValue != newValue);
277
		cdmBase.firePropertyChange(prop, oldValue, newValue);
278
		assertTrue(listener.isChanged());
279
		assertEquals(oldValue, listener.getOldValue());
280
		assertEquals(newValue, listener.getNewValue());
281
	}
282

    
283
	/**
284
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#firePropertyChange(java.lang.String, float, float)}.
285
	 */
286
	@Test
287
	public void testFirePropertyChangeStringFloatFloat() {
288
		//Initialize
289
		TestCdmBaseClass testCdm;
290
		testCdm = (TestCdmBaseClass)cdmBase;
291
		String prop = "testFloat";
292
		removeExistingListeners(testCdm);
293
		assertFalse(testCdm.hasListeners(prop));
294
		PropListener listener = new PropListener();
295
		testCdm.addPropertyChangeListener(prop, listener);
296
		assertTrue(testCdm.hasListeners(prop));
297

    
298
		//Test
299
		float oldValue = testCdm.testFloat;
300
		float newValue = 1.40239846E-4f;
301
		assertFalse(oldValue == newValue);
302
		testCdm.firePropertyChange(prop, oldValue, newValue);
303
		assertTrue(listener.isChanged());
304
		assertEquals(oldValue, listener.getOldValue());
305
		assertEquals(newValue, listener.getNewValue());
306
	}
307

    
308
	/**
309
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#firePropertyChange(java.lang.String, boolean, boolean)}.
310
	 */
311
	@Test
312
	public void testFirePropertyChangeStringBooleanBoolean() {
313
		//Initialize
314
		TestCdmBaseClass testCdm;
315
		testCdm = (TestCdmBaseClass)cdmBase;
316
		String prop = "testBoolean";
317
		removeExistingListeners(testCdm);
318
		assertFalse(testCdm.hasListeners(prop));
319
		PropListener listener = new PropListener();
320
		testCdm.addPropertyChangeListener(prop, listener);
321
		assertTrue(testCdm.hasListeners(prop));
322

    
323
		//Test
324
		boolean oldValue = testCdm.testBoolean;
325
		boolean newValue = ! testCdm.testBoolean;
326
		assertFalse(oldValue == newValue);
327
		testCdm.firePropertyChange(prop, oldValue, newValue);
328
		assertTrue(listener.isChanged());
329
		assertEquals(oldValue, listener.getOldValue());
330
		assertEquals(newValue, listener.getNewValue());
331
	}
332

    
333
	/**
334
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#firePropertyChange(java.lang.String, java.lang.Object, java.lang.Object)}.
335
	 */
336
	@Test
337
	public void testFirePropertyChangeStringObjectObject() {
338
		//Initialize
339
		String prop = "uuid";
340
		removeExistingListeners(cdmBase);
341
		assertFalse(cdmBase.hasListeners(prop));
342
		PropListener listener = new PropListener();
343
		cdmBase.addPropertyChangeListener(prop, listener);
344
		assertTrue(cdmBase.hasListeners(prop));
345

    
346
		//Test
347
		UUID oldValue = cdmBase.getUuid();
348
		UUID newValue = UUID.randomUUID();
349
		cdmBase.firePropertyChange(prop, oldValue, newValue);
350
		assertTrue(listener.isChanged());
351
		assertEquals(oldValue, listener.getOldValue());
352
		assertEquals(newValue, listener.getNewValue());
353
	}
354

    
355
	/**
356
	 * Test method for {@link eu.etaxonomy.cdm.model.common.CdmBase#firePropertyChange(java.beans.PropertyChangeEvent)}.
357
	 */
358
	@Test
359
	public void testFirePropertyChangePropertyChangeEvent() {
360
		//Initialize
361
		String prop = "uuid";
362
		removeExistingListeners(cdmBase);
363
		assertFalse(cdmBase.hasListeners(prop));
364
		PropListener listener = new PropListener();
365
		cdmBase.addPropertyChangeListener(prop, listener);
366
		assertTrue(cdmBase.hasListeners(prop));
367

    
368
		//Test
369
		UUID oldValue = cdmBase.getUuid();
370
		UUID newValue = UUID.randomUUID();
371
		PropertyChangeEvent event = new PropertyChangeEvent(cdmBase , prop, oldValue, newValue);
372
		cdmBase.firePropertyChange(event);
373
		assertTrue(listener.isChanged());
374
		assertEquals(oldValue, listener.getOldValue());
375
		assertEquals(newValue, listener.getNewValue());
376
	}
377

    
378
	@Test
379
	public void testGetId() {
380
		assertEquals(0, cdmBase.getId());
381
		int id = 22;
382
		cdmBase.setId(id);
383
		assertEquals(id, cdmBase.getId());
384
	}
385

    
386
	@Test
387
	public void testSetId() {
388
		int id = 22;
389
		cdmBase.setId(id);
390
		assertEquals(id, cdmBase.getId());
391
	}
392

    
393
	@Test
394
	public void testGetUuid() {
395
		assertNotNull(cdmBase.getUuid());
396
		assertFalse(UUID.randomUUID().equals(cdmBase.getUuid()));
397
		assertFalse("".equals(cdmBase.getUuid()));
398
		UUID uuid = UUID.randomUUID();
399
		cdmBase.setUuid(uuid);
400
		assertEquals(uuid, cdmBase.getUuid());
401
	}
402

    
403
	@Test
404
	public void testSetUuid() {
405
		UUID uuid = UUID.randomUUID();
406
		cdmBase.setUuid(uuid);
407
		assertEquals(uuid, cdmBase.getUuid());
408
	}
409

    
410
	@Test
411
	public void testGetCreated() {
412
		assertNotNull(cdmBase.getCreated());
413
		assertFalse(cdmBase.getCreated().isAfter(new DateTime()));
414
		DateTime dateTime = new DateTime();
415
		cdmBase.setCreated(dateTime);
416
		assertEquals(0, cdmBase.getCreated().getMillisOfSecond());
417
		dateTime = dateTime.withMillisOfSecond(0);
418
		assertEquals(dateTime, cdmBase.getCreated());
419
	}
420

    
421
	@Test
422
	public void testSetCreated() {
423
		DateTime calendar = new DateTime();
424
		DateTime calendarTrue = calendar.withMillisOfSecond(23);
425
		DateTime calendarFalse = calendar.withMillisOfSecond(23);
426
		calendarFalse = calendarFalse.plusMonths(5);
427
		cdmBase.setCreated(calendar);
428
		calendar = calendar.withMillisOfSecond(0);
429
		calendarTrue = calendarTrue.withMillisOfSecond(0);
430
		calendarFalse = calendarFalse.withMillisOfSecond(0);
431
		assertEquals(calendar, cdmBase.getCreated());
432
		assertEquals(calendarTrue, cdmBase.getCreated());
433
		assertFalse(calendarFalse.equals(calendar));
434
	}
435

    
436
	@Test
437
	public void testGetCreatedBy() {
438
		assertNull(cdmBase.getCreatedBy());
439
		User user = User.NewInstance(null, null);
440
		cdmBase.setCreatedBy(user);
441
		assertEquals(user, cdmBase.getCreatedBy());
442
		assertSame(user, cdmBase.getCreatedBy());
443
	}
444

    
445
	@Test
446
	public void testSetCreatedBy() {
447
		User person = User.NewInstance(null, null);
448

    
449
		User personFalse = User.NewInstance(null, null);
450

    
451
		cdmBase.setCreatedBy(person);
452
		assertEquals(person, cdmBase.getCreatedBy());
453
		assertSame(person, cdmBase.getCreatedBy());
454
		assertFalse(personFalse.equals(person));
455
		//null
456
		cdmBase.setCreated(null);
457
		assertNull(cdmBase.getCreated());
458

    
459
	}
460

    
461
	@Test
462
	public void testEquals() {
463
		ICdmBase cdmBase2 = getTestCdmBase();
464
		cdmBase2.setUuid(cdmBase.getUuid());
465
		cdmBase2.setCreated(cdmBase.getCreated());
466
//		cdmBase2.setCreatedBy(Person.NewInstance());
467
		assertEquals(cdmBase, cdmBase2);
468
		//null
469
		assertFalse(cdmBase.equals(null));
470
	}
471

    
472
	@Test
473
	public void testToString() {
474
		String expected = cdmBase.getClass().getSimpleName()+"#"+cdmBase.getId()+"<"+cdmBase.getUuid()+">";
475
		assertEquals(expected, cdmBase.toString());
476
	}
477

    
478
	@Test
479
	public void testClone(){
480
		try {
481
			CdmBase clone = cdmBase.clone();
482
			assertNotSame(clone, cdmBase);
483
			assertEquals(clone.getId(), cdmBase.getId());
484
			assertFalse(clone.getUuid().equals(cdmBase.getUuid()));
485
			assertNotNull(clone.getCreated());
486
			assertNull(clone.getCreatedBy());
487

    
488
		} catch (CloneNotSupportedException e) {
489
			fail();
490
		}
491
	}
492
}
(2-2/12)