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.logging.log4j.LogManager;import org.apache.logging.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

    
43
    @SuppressWarnings("unused")
44
	private static final Logger logger = LogManager.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
		@Override
62
        public void propertyChange(PropertyChangeEvent evt) {
63
			this.event = evt;
64
		}
65

    
66
		public boolean isChanged() {
67
			return event != null;
68
		}
69

    
70
		public Object getOldValue() {
71
			return event.getOldValue();
72
		}
73

    
74
		public Object getNewValue() {
75
			return event.getNewValue();
76
		}
77

    
78
		public String getChangedPropertyName() {
79
			return event.getPropertyName();
80
		}
81

    
82
	}
83

    
84
	private static CdmBase getTestCdmBase(){
85
		return new TestCdmBaseClass();
86
	}
87

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

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

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

    
125
/*************** TESTS **************************************************/
126

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
460
	}
461

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

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

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

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