Project

General

Profile

Download (36.2 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.name;
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

    
20
import java.util.Map;
21

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

    
27
import eu.etaxonomy.cdm.model.common.DefaultTermInitializer;
28
import eu.etaxonomy.cdm.model.common.Language;
29
import eu.etaxonomy.cdm.model.description.Feature;
30
import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
31
import eu.etaxonomy.cdm.model.description.TextData;
32
import eu.etaxonomy.cdm.model.media.Media;
33
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
34
import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;
35
import eu.etaxonomy.cdm.model.reference.Reference;
36
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
37
import eu.etaxonomy.cdm.model.taxon.Taxon;
38
import eu.etaxonomy.cdm.strategy.cache.name.INameCacheStrategy;
39

    
40
/**
41
 * @author a.mueller
42
 * @created 28.06.2008
43
 * @version 1.0
44
 */
45
public class TaxonNameBaseTest {
46
	private static final Logger logger = Logger.getLogger(TaxonNameBaseTest.class);
47

    
48
	private TaxonNameBaseTestClass nameBase1;
49
	private TaxonNameBaseTestClass nameBase2;
50

    
51
	@BeforeClass
52
	public static void setUpBeforeClass() {
53
		DefaultTermInitializer vocabularyStore = new DefaultTermInitializer();
54
		vocabularyStore.initialize();
55
	}
56

    
57
	/**
58
	 * @throws java.lang.Exception
59
	 */
60
	@Before
61
	public void setUp() throws Exception {
62
		nameBase1 = new TaxonNameBaseTestClass(null,null);
63
		nameBase2 = new TaxonNameBaseTestClass(Rank.GENUS());
64
	}
65

    
66

    
67
	private class TaxonNameBaseTestClass extends TaxonNameBase<TaxonNameBaseTestClass, INameCacheStrategy<TaxonNameBaseTestClass>>{
68
		public TaxonNameBaseTestClass(){super();};
69
		public TaxonNameBaseTestClass(Rank rank){super(rank);};
70
		public TaxonNameBaseTestClass(HomotypicalGroup hg){super(hg);};
71
		public TaxonNameBaseTestClass(Rank rank, HomotypicalGroup hg){super(rank, hg);};
72
		@Override
73
		public boolean isCodeCompliant(){return false;};
74
		@Override
75
		public void setCacheStrategy(INameCacheStrategy strategy){};
76
		@Override
77
		public INameCacheStrategy getCacheStrategy(){return null;};
78
		@Override
79
		public NomenclaturalCode getNomenclaturalCode(){return null;};
80
		@Override
81
		public String generateFullTitle(){return null;}
82
		@Override
83
		public String generateTitle() {
84
			return null;
85
		}
86
		@Override
87
		protected Map<String, java.lang.reflect.Field> getAllFields() {
88
			return null;
89
		}
90

    
91
	}
92

    
93

    
94
/** *************************  TESTS ******************************************************/
95

    
96

    
97
	@Test
98
	public void testGenerateFullTitle() {
99
		//abstract
100
	}
101

    
102
	/**
103
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#TaxonNameBase()}.
104
	 */
105
	@Test
106
	public void testTaxonNameBase() {
107
		assertNotNull(nameBase1);
108
	}
109

    
110
	/**
111
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#TaxonNameBase(eu.etaxonomy.cdm.model.name.Rank)}.
112
	 */
113
	@Test
114
	public void testTaxonNameBaseRank() {
115
		assertNotNull(nameBase2);
116
		assertEquals(Rank.GENUS(), nameBase2.getRank());
117
		Rank rank = null;
118
		TaxonNameBase testName = new TaxonNameBaseTestClass(rank);
119
		assertNull(testName.getRank());
120
	}
121

    
122
	/**
123
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#TaxonNameBase(eu.etaxonomy.cdm.model.name.HomotypicalGroup)}.
124
	 */
125
	@Test
126
	public void testTaxonNameBaseHomotypicalGroup() {
127
		HomotypicalGroup hg = HomotypicalGroup.NewInstance();
128
		TaxonNameBase testHG = new TaxonNameBaseTestClass(hg);
129
		assertSame(hg, testHG.getHomotypicalGroup());
130
		HomotypicalGroup hgNull = null;
131
		TaxonNameBase testHGNull = new TaxonNameBaseTestClass(hgNull);
132
		assertNotNull(testHGNull.getHomotypicalGroup());
133
	}
134

    
135
	/**
136
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#TaxonNameBase(eu.etaxonomy.cdm.model.name.Rank, eu.etaxonomy.cdm.model.name.HomotypicalGroup)}.
137
	 */
138
	@Test
139
	public void testTaxonNameBaseRankHomotypicalGroup() {
140
		Rank rank = Rank.SPECIES();
141
		HomotypicalGroup hg = HomotypicalGroup.NewInstance();
142
		TaxonNameBase testHG = new TaxonNameBaseTestClass(rank, hg);
143
		assertSame(rank, testHG.getRank());
144
		assertSame(hg, testHG.getHomotypicalGroup());
145

    
146
		Rank rankNull = null;
147
		HomotypicalGroup hgNull = null;
148
		TaxonNameBase testHGNull = new TaxonNameBaseTestClass(rankNull, hgNull);
149
		assertEquals(rankNull, testHGNull.getRank());
150
		assertNotNull(testHGNull.getHomotypicalGroup());
151
	}
152

    
153
	/**
154
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isCodeCompliant()}.
155
	 */
156
	@Test
157
	public void testIsCodeCompliant() {
158
		//is abstract
159
	}
160

    
161
	/**
162
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getNameRelations()}.
163
	 */
164
	@Test
165
	public void testGetNameRelations() {
166
		logger.warn("not yet implemented");
167
	}
168

    
169
	/**
170
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addRelationshipToName(eu.etaxonomy.cdm.model.name.TaxonNameBase, eu.etaxonomy.cdm.model.name.NameRelationshipType, java.lang.String)}.
171
	 */
172
	@Test
173
	public void testAddRelationshipToName() {
174
		logger.warn("not yet implemented");
175
	}
176

    
177
	/**
178
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addRelationshipFromName(eu.etaxonomy.cdm.model.name.TaxonNameBase, eu.etaxonomy.cdm.model.name.NameRelationshipType, java.lang.String)}.
179
	 */
180
	@Test
181
	public void testAddRelationshipFromName() {
182
		logger.warn("not yet implemented");
183
	}
184

    
185
	/**
186
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addNameRelationship(eu.etaxonomy.cdm.model.name.NameRelationship)}.
187
	 */
188
	@Test
189
	public void testAddNameRelationship() {
190
		logger.warn("not yet implemented");
191
	}
192

    
193
	/**
194
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#removeNameRelationship(eu.etaxonomy.cdm.model.name.NameRelationship)}.
195
	 */
196
	@Test
197
	public void testRemoveNameRelationship() {
198
		logger.warn("not yet implemented");
199
	}
200

    
201
	/**
202
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addRelationship(eu.etaxonomy.cdm.model.common.RelationshipBase)}.
203
	 */
204
	@Test
205
	public void testAddRelationship() {
206
		logger.warn("not yet implemented");
207
	}
208

    
209
	/**
210
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getRelationsFromThisName()}.
211
	 */
212
	@Test
213
	public void testGetRelationsFromThisName() {
214
		logger.warn("not yet implemented");
215
	}
216

    
217
	/**
218
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getRelationsToThisName()}.
219
	 */
220
	@Test
221
	public void testGetRelationsToThisName() {
222
		logger.warn("not yet implemented");
223
	}
224

    
225
	/**
226
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getStatus()}.
227
	 * and for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addStatus(eu.etaxonomy.cdm.model.name.NomenclaturalStatus)}.
228
	 * and for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#removeStatus(eu.etaxonomy.cdm.model.name.NomenclaturalStatus)}.
229
	 */
230
	@Test
231
	public void testGetAddStatus() {
232
		//Empty status set
233
		assertNotNull(nameBase1.getStatus());
234
		assertEquals(0, nameBase1.getStatus().size());
235
		//1 status set
236
		NomenclaturalStatus nomStatus = NomenclaturalStatus.NewInstance(NomenclaturalStatusType.ALTERNATIVE());
237
		nameBase1.addStatus(nomStatus);
238
		assertNotNull(nameBase1.getStatus());
239
		assertEquals(1, nameBase1.getStatus().size());
240
		assertEquals(nomStatus, nameBase1.getStatus().iterator().next());
241
		//2 status set
242
		NomenclaturalStatus nomStatus2 = NomenclaturalStatus.NewInstance(NomenclaturalStatusType.ALTERNATIVE());
243
		nameBase1.addStatus(nomStatus2);
244
		assertEquals(2, nameBase1.getStatus().size());
245
		assertTrue(nameBase1.getStatus().contains(nomStatus2));
246
		//remove
247
		nameBase1.removeStatus(nomStatus);
248
		assertEquals(1, nameBase1.getStatus().size());
249
		assertTrue(nameBase1.getStatus().contains(nomStatus2));
250
		//remove
251
		nameBase1.removeStatus(nomStatus2);
252
		assertEquals(0, nameBase1.getStatus().size());
253
		assertFalse(nameBase1.getStatus().contains(nomStatus2));
254

    
255

    
256
	}
257

    
258
	/**
259
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isOriginalCombination()}.
260
	 */
261
	@Test
262
	public void testIsOriginalCombination() {
263
		logger.warn("not yet implemented");
264
	}
265

    
266
	/**
267
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getBasionym()}.
268
	 */
269
	@Test
270
	public void testGetBasionym() {
271
		TaxonNameBase name1 = BotanicalName.NewInstance(null);
272
		TaxonNameBase basionym1 = BotanicalName.NewInstance(null);
273
		TaxonNameBase basionym2 = BotanicalName.NewInstance(null);
274

    
275
		assertEquals(null, name1.getBasionym());
276
		name1.addBasionym(basionym1);
277
		assertEquals(basionym1, name1.getBasionym());
278
		name1.addBasionym(basionym2);
279
		TaxonNameBase oneOfThebasionyms = name1.getBasionym();
280
		assertTrue(oneOfThebasionyms == basionym1 || oneOfThebasionyms == basionym2 );
281
		name1.removeBasionyms();
282
		assertEquals(null, name1.getBasionym());
283
	}
284

    
285
	/**
286
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addBasionym(eu.etaxonomy.cdm.model.name.TaxonNameBase)}.
287
	 */
288
	@Test
289
	public void testAddBasionymT() {
290
		assertNotSame(nameBase1.getHomotypicalGroup(), nameBase2.getHomotypicalGroup());
291
		assertFalse(nameBase1.getHomotypicalGroup().equals(nameBase2.getHomotypicalGroup()));
292
		nameBase1.addBasionym(nameBase2);
293
		assertTrue(nameBase1.getHomotypicalGroup().equals(nameBase2.getHomotypicalGroup()));
294
		assertSame(nameBase1.getHomotypicalGroup(), nameBase2.getHomotypicalGroup());
295
		logger.warn("not yet fully implemented");
296
	}
297

    
298
	/**
299
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addBasionym(eu.etaxonomy.cdm.model.name.TaxonNameBase, java.lang.String)}.
300
	 */
301
	@Test
302
	public void testAddBasionymTString() {
303
		logger.warn("not yet implemented");
304
	}
305

    
306

    
307
	/**
308
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getCacheStrategy()}.
309
	 */
310
	@Test
311
	public void testGetCacheStrategy() {
312
		//is abstract
313
	}
314

    
315
	/**
316
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#setCacheStrategy(eu.etaxonomy.cdm.strategy.cache.name.INameCacheStrategy)}.
317
	 */
318
	@Test
319
	public void testSetCacheStrategy() {
320
		logger.warn("not yet implemented");
321
	}
322

    
323
	/**
324
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getRank()}.
325
	 */
326
	@Test
327
	public void testGetRank() {
328
		TaxonNameBase<?,?> name1 = BotanicalName.NewInstance(null);
329
		assertNull("Rank shall be null", name1.getRank());
330
		name1.setRank(Rank.SPECIES());
331
		assertNotNull("Rank shall not be null", name1.getRank());
332
		name1.setRank(null);
333
		assertNull("Rank shall be null", name1.getRank());
334

    
335
	}
336

    
337
	/**
338
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getNomenclaturalReference()}.
339
	 */
340
	@Test
341
	public void testGetSetNomenclaturalReference() {
342
		INomenclaturalReference nr = nameBase1.getNomenclaturalReference();
343
		assertNull("Nomenclatural Reference shall be null", nr);
344
		nameBase1.setNomenclaturalReference(ReferenceFactory.newGeneric());
345
		nr = nameBase1.getNomenclaturalReference();
346
		assertNotNull("Nomenclatural Reference shall not be null", nr);
347
	}
348

    
349
	/**
350
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getAppendedPhrase()}.
351
	 */
352
	@Test
353
	public void testGetAppendedPhrase() {
354
		TaxonNameBase<?,?> name1 = BotanicalName.NewInstance(null);
355
		String appPhrase = "appPhrase";
356
		assertNull(name1.getAppendedPhrase());
357
		name1.setAppendedPhrase(appPhrase);
358
		assertSame(appPhrase, name1.getAppendedPhrase());
359
		name1.setAppendedPhrase(null);
360
		assertNull(name1.getAppendedPhrase());
361
	}
362

    
363
	/**
364
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getNomenclaturalMicroReference()}.
365
	 */
366
	@Test
367
	public void testGetSetNomenclaturalMicroReference() {
368
		TaxonNameBase<?,?> name1 = BotanicalName.NewInstance(null);
369
		String microRef = "micro";
370
		assertNull(name1.getNomenclaturalMicroReference());
371
		name1.setNomenclaturalMicroReference(microRef);
372
		assertSame(microRef, name1.getNomenclaturalMicroReference());
373
		name1.setNomenclaturalMicroReference(null);
374
		assertNull(name1.getNomenclaturalMicroReference());
375
	}
376

    
377
	/**
378
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getHasProblem()}.
379
	 */
380
	@Test
381
	public void testGetSetHasProblem() {
382
		TaxonNameBase<?,?> name1 = BotanicalName.NewInstance(null);
383
		name1.setParsingProblem(0);
384
		assertFalse(name1.hasProblem());
385
		name1.setParsingProblem(1);
386
		assertTrue(name1.hasProblem());
387
		name1.setParsingProblem(0);
388
		assertFalse(name1.getParsingProblem()!=0);
389
	}
390

    
391
	/**
392
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getNameTypeDesignations()}.
393
	 */
394
	@Test
395
	public void testGetNameTypeDesignations() {
396
		logger.warn("not yet implemented");
397
	}
398

    
399
	/**
400
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#setNameTypeDesignations(java.util.Set)}.
401
	 */
402
	@Test
403
	public void testSetNameTypeDesignations() {
404
		logger.warn("not yet implemented");
405
	}
406

    
407
	/**
408
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addNameTypeDesignation(eu.etaxonomy.cdm.model.name.TaxonNameBase, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String, java.lang.String, boolean, boolean)}.
409
	 */
410
	@Test
411
	public void testAddNameTypeDesignation() {
412
		logger.warn("not yet implemented");
413
	}
414

    
415
	/**
416
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#removeNameTypeDesignation(eu.etaxonomy.cdm.model.name.NameTypeDesignation)}.
417
	 */
418
	@Test
419
	public void testRemoveNameTypeDesignation() {
420
		logger.warn("not yet implemented");
421
	}
422

    
423
	/**
424
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getSpecimenTypeDesignations()}.
425
	 */
426
	@Test
427
	public void testGetSpecimenTypeDesignations() {
428
		logger.warn("not yet implemented");
429
	}
430

    
431
	/**
432
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#setSpecimenTypeDesignations(java.util.Set)}.
433
	 */
434
	@Test
435
	public void testSetSpecimenTypeDesignations() {
436
		logger.warn("not yet implemented");
437
	}
438

    
439
	/**
440
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getSpecimenTypeDesignationsOfHomotypicalGroup()}.
441
	 */
442
	@Test
443
	public void testGetSpecimenTypeDesignationsOfHomotypicalGroup() {
444
		logger.warn("not yet implemented");
445
	}
446

    
447
	/**
448
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addSpecimenTypeDesignation(eu.etaxonomy.cdm.model.occurrence.Specimen, eu.etaxonomy.cdm.model.name.TypeDesignationStatus, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String, java.lang.String, boolean)}.
449
	 */
450
	@Test
451
	public void testAddSpecimenTypeDesignationSpecimenTypeDesignationStatusReferenceBaseStringStringBoolean() {
452
		logger.warn("not yet implemented");
453
	}
454

    
455
	/**
456
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addSpecimenTypeDesignation(eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation)}.
457
	 */
458
	@Test
459
	public void testAddSpecimenTypeDesignationSpecimenTypeDesignation() {
460
		logger.warn("not yet implemented");
461
	}
462

    
463
	/**
464
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#removeSpecimenTypeDesignation(eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation)}.
465
	 */
466
	@Test
467
	public void testRemoveSpecimenTypeDesignation() {
468
		logger.warn("not yet implemented");
469
	}
470

    
471
	/**
472
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#removeTypeDesignation(eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation)}.
473
	 */
474
	@Test
475
	public void testRemoveTypeDesignation() {
476
		logger.warn("not yet implemented");
477
	}
478

    
479
	/**
480
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getHomotypicalGroup()}.
481
	 */
482
	@Test
483
	public void testGetHomotypicalGroup() {
484
		logger.warn("not yet implemented");
485
	}
486

    
487
	/**
488
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#setHomotypicalGroup(eu.etaxonomy.cdm.model.name.HomotypicalGroup)}.
489
	 */
490
	@Test
491
	public void testSetHomotypicalGroup() {
492
		logger.warn("not yet implemented");
493
	}
494

    
495
	/**
496
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getCitation()}.
497
	 */
498
	@Test
499
	public void testGetCitation() {
500
		logger.warn("not yet implemented");
501
	}
502

    
503
	/**
504
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getCitationString()}.
505
	 */
506
	@Test
507
	public void testGetCitationString() {
508
		logger.warn("not yet implemented");
509
	}
510

    
511
	/**
512
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getReferenceYear()}.
513
	 */
514
	@Test
515
	public void testGetReferenceYear() {
516
		logger.warn("not yet implemented");
517
	}
518

    
519
	/**
520
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addTaxonBase(eu.etaxonomy.cdm.model.taxon.TaxonBase)}.
521
	 */
522
	@Test
523
	public void testAddTaxonBase() {
524
		Taxon taxon = Taxon.NewInstance(null, null);
525
		nameBase2.addTaxonBase(taxon);  //test if reflection method addTaxonBase() works
526
		assertTrue("The taxon has not properly been added to the taxonName", nameBase2.getTaxonBases().contains(taxon));
527
		assertEquals("The taxon name has not properly been added to the taxon", nameBase2, taxon.getName());
528
		nameBase2.removeTaxonBase(taxon); //test if reflection method in removeTaxonBase() works
529
		assertFalse("The taxon has not properly been removed from the taxon name", nameBase2.getTaxonBases().contains(taxon));
530
		assertEquals("The taxon name has not properly been removed from the taxon", null, taxon.getName());
531
	}
532

    
533

    
534
	@Test
535
	public void testAddAndRemoveDescriptionTaxonNameDescription() {
536
		TaxonNameDescription description = TaxonNameDescription.NewInstance();
537
		nameBase2.addDescription(description);  //test if reflection method in addDescription() works
538
		assertTrue("The description has not properly been added to the taxonName", nameBase2.getDescriptions().contains(description));
539
		assertEquals("The taxon name has not properly been added to the description", nameBase2, description.getTaxonName());
540
		nameBase2.removeDescription(description); //test if reflection method in removeDescription() works
541
		assertFalse("The description has not properly been removed from the taxon name", nameBase2.getDescriptions().contains(description));
542
		assertEquals("The taxon name has not properly been removed from the description", null, description.getTaxonName());
543
	}
544

    
545
	/**
546
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getTaxa()}.
547
	 */
548
	@Test
549
	public void testGetTaxa() {
550
		logger.warn("not yet implemented");
551
	}
552

    
553
	/**
554
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getSynonyms()}.
555
	 */
556
	@Test
557
	public void testGetSynonyms() {
558
		logger.warn("not yet implemented");
559
	}
560

    
561
	@Test
562
	public void testMergeHomotypicGroups() {
563
		TaxonNameBase<?,?> name1 = BotanicalName.NewInstance(null);
564
		TaxonNameBase<?,?> name2 = BotanicalName.NewInstance(null);
565
		TaxonNameBase<?,?> name3 = BotanicalName.NewInstance(null);
566
		TaxonNameBase<?,?> name4 = BotanicalName.NewInstance(null);
567

    
568
		assertFalse(name1.getHomotypicalGroup().equals(name2.getHomotypicalGroup()));
569
		int numberOfTypifiedNames = name1.getHomotypicalGroup().getTypifiedNames().size();
570
		assertEquals(1, numberOfTypifiedNames);
571

    
572
		name1.mergeHomotypicGroups(name2);
573
		assertEquals(name1.getHomotypicalGroup(), name2.getHomotypicalGroup());
574
		assertSame(name1.getHomotypicalGroup(), name2.getHomotypicalGroup());
575
		numberOfTypifiedNames = name1.getHomotypicalGroup().getTypifiedNames().size();
576
		assertEquals(2, numberOfTypifiedNames);
577
		numberOfTypifiedNames = name2.getHomotypicalGroup().getTypifiedNames().size();
578
		assertEquals(2, numberOfTypifiedNames);
579
		assertTrue(name1.getHomotypicalGroup().getTypifiedNames().contains(name2));
580
		assertTrue(name2.getHomotypicalGroup().getTypifiedNames().contains(name1));
581

    
582
		name3.mergeHomotypicGroups(name2);
583
		assertEquals(name1.getHomotypicalGroup(), name3.getHomotypicalGroup());
584
		assertSame(name1.getHomotypicalGroup(), name3.getHomotypicalGroup());
585
		numberOfTypifiedNames = name1.getHomotypicalGroup().getTypifiedNames().size();
586
		assertEquals(3, numberOfTypifiedNames);
587
		numberOfTypifiedNames = name2.getHomotypicalGroup().getTypifiedNames().size();
588
		assertEquals(3, numberOfTypifiedNames);
589
		numberOfTypifiedNames = name3.getHomotypicalGroup().getTypifiedNames().size();
590
		assertEquals(3, numberOfTypifiedNames);
591
		assertTrue(name1.getHomotypicalGroup().getTypifiedNames().contains(name2));
592
		assertTrue(name2.getHomotypicalGroup().getTypifiedNames().contains(name1));
593
		assertTrue(name1.getHomotypicalGroup().getTypifiedNames().contains(name3));
594
		assertTrue(name3.getHomotypicalGroup().getTypifiedNames().contains(name1));
595
		assertTrue(name2.getHomotypicalGroup().getTypifiedNames().contains(name3));
596
		assertTrue(name3.getHomotypicalGroup().getTypifiedNames().contains(name2));
597

    
598

    
599
	}
600

    
601

    
602
	@Test
603
	public void testIsBasionymFor() {
604
		TaxonNameBase name1 = BotanicalName.NewInstance(null);
605
		TaxonNameBase name2 = BotanicalName.NewInstance(null);
606
		TaxonNameBase<?,?> name3 = BotanicalName.NewInstance(null);
607
		TaxonNameBase<?,?> name4 = BotanicalName.NewInstance(null);
608

    
609
		assertFalse(name2.isBasionymFor(name1));
610
		assertFalse(name1.isBasionymFor(name2));
611
		name1.addBasionym(name2);
612
		assertTrue(name2.isBasionymFor(name1));
613
		assertFalse(name1.isBasionymFor(name2));
614
	}
615

    
616
	/**
617
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isHomotypic(eu.etaxonomy.cdm.model.name.TaxonNameBase)}.
618
	 */
619
	@Test
620
	public void testIsHomotypic() {
621
		TaxonNameBase<?,?> name1 = BotanicalName.NewInstance(null);
622
		TaxonNameBase<?,?> name2 = BotanicalName.NewInstance(null);
623
		TaxonNameBase<?,?> name3 = BotanicalName.NewInstance(null);
624
		TaxonNameBase<?,?> name4 = BotanicalName.NewInstance(null);
625
		name1.mergeHomotypicGroups(name2);
626
		name2.mergeHomotypicGroups(name4);
627

    
628
		assertTrue(name1.isHomotypic(name4));
629
		assertTrue(name4.isHomotypic(name1));
630
		assertFalse(name1.isHomotypic(name3));
631
		assertFalse(name3.isHomotypic(name1));
632
		assertTrue(name2.isHomotypic(name1));
633

    
634
	}
635

    
636
	@Test
637
	public void testMakeGroupsBasionym(){
638
		TaxonNameBase<?,?> name1 = BotanicalName.NewInstance(null);
639
		TaxonNameBase<?,?> name2 = BotanicalName.NewInstance(null);
640
		TaxonNameBase<?,?> name3 = BotanicalName.NewInstance(null);
641
		TaxonNameBase<?,?> name4 = BotanicalName.NewInstance(null);
642

    
643
		name1.mergeHomotypicGroups(name2);
644
		name1.mergeHomotypicGroups(name3);
645
		name2.mergeHomotypicGroups(name4);
646

    
647
		name1.makeGroupsBasionym();
648

    
649
		assertEquals(1, name2.getBasionyms().size());
650
		assertEquals(1, name3.getBasionyms().size());
651
		assertEquals(1, name4.getBasionyms().size());
652
		assertEquals(name1, name4.getBasionym());
653

    
654
	}
655

    
656
	@Test
657
	public void testIsGroupsBasionym(){
658
		TaxonNameBase<?,?> name1 = BotanicalName.NewInstance(null);
659
		TaxonNameBase<?,?> name2 = BotanicalName.NewInstance(null);
660
		TaxonNameBase<?,?> name3 = BotanicalName.NewInstance(null);
661
		TaxonNameBase<?,?> name4 = BotanicalName.NewInstance(null);
662

    
663
		assertFalse(name1.isGroupsBasionym());
664

    
665
		name1.mergeHomotypicGroups(name2);
666
		name2.mergeHomotypicGroups(name4);
667

    
668
		name1.makeGroupsBasionym();
669

    
670
		assertTrue(name1.isGroupsBasionym());
671
		assertFalse(name2.isGroupsBasionym());
672
		name1.mergeHomotypicGroups(name3);
673
		assertFalse(name1.isGroupsBasionym());
674
	}
675

    
676

    
677

    
678
	@Test
679
	public void testRemoveBasionyms(){
680
		TaxonNameBase name1 = BotanicalName.NewInstance(null);
681
		TaxonNameBase basionym = BotanicalName.NewInstance(null);
682
		TaxonNameBase name3 = BotanicalName.NewInstance(null);
683

    
684
		name1.addBasionym(basionym);
685
		assertEquals(1, name1.getBasionyms().size());
686
		name1.addBasionym(name3);
687
		assertEquals(2, name1.getBasionyms().size());
688
		name1.removeBasionyms();
689
		assertEquals(0, name1.getBasionyms().size());
690
	}
691

    
692
	/**
693
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isSupraGeneric()}.
694
	 */
695
	@Test
696
	public void testIsSupraGeneric() {
697
		nameBase1.setRank(Rank.FAMILY());
698
		assertTrue(nameBase1.isSupraGeneric());
699
		nameBase1.setRank(Rank.GENUS());
700
		assertFalse(nameBase1.isSupraGeneric());
701
		nameBase1.setRank(Rank.FORM());
702
		assertFalse(nameBase1.isSupraGeneric());
703
		nameBase1.setRank(null);
704
		assertFalse(nameBase1.isSupraGeneric());
705
	}
706

    
707
	@Test
708
	public void testRemoveTaxonBases(){
709

    
710
		Taxon newTaxon = new Taxon(nameBase1, null);
711
		assertEquals(1, nameBase1.getTaxonBases().size());
712

    
713

    
714
		nameBase1.removeTaxonBase(newTaxon);
715
		assertEquals(0, nameBase1.getTaxonBases().size());
716

    
717
	}
718
	/**
719
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isGenus()}.
720
	 */
721
	@Test
722
	public void testIsGenus() {
723
		nameBase1.setRank(Rank.FAMILY());
724
		assertFalse(nameBase1.isGenus());
725
		nameBase1.setRank(Rank.GENUS());
726
		assertTrue(nameBase1.isGenus());
727
		nameBase1.setRank(Rank.FORM());
728
		assertFalse(nameBase1.isGenus());
729
		nameBase1.setRank(null);
730
		assertFalse(nameBase1.isGenus());
731
	}
732

    
733
	/**
734
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isInfraGeneric()}.
735
	 */
736
	@Test
737
	public void testIsInfraGeneric() {
738
		nameBase1.setRank(Rank.FAMILY());
739
		assertFalse(nameBase1.isInfraGeneric());
740
		nameBase1.setRank(Rank.GENUS());
741
		assertFalse(nameBase1.isInfraGeneric());
742
		nameBase1.setRank(Rank.SUBGENUS());
743
		assertTrue(nameBase1.isInfraGeneric());
744
		nameBase1.setRank(Rank.SPECIES());
745
		assertFalse(nameBase1.isInfraGeneric());
746
		nameBase1.setRank(Rank.FORM());
747
		assertFalse(nameBase1.isInfraGeneric());
748
		nameBase1.setRank(Rank.INFRAGENERICTAXON());
749
		assertTrue(nameBase1.isInfraGeneric());
750
		nameBase1.setRank(null);
751
		assertFalse(nameBase1.isInfraGeneric());
752
	}
753

    
754
	/**
755
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isSpecies()}.
756
	 */
757
	@Test
758
	public void testIsSpecies() {
759
		nameBase1.setRank(Rank.FAMILY());
760
		assertFalse(nameBase1.isSpecies());
761
		nameBase1.setRank(Rank.GENUS());
762
		assertFalse(nameBase1.isSpecies());
763
		nameBase1.setRank(Rank.SUBGENUS());
764
		assertFalse(nameBase1.isSpecies());
765
		nameBase1.setRank(Rank.SPECIES());
766
		assertTrue(nameBase1.isSpecies());
767
		nameBase1.setRank(Rank.FORM());
768
		assertFalse(nameBase1.isSpecies());
769
		nameBase1.setRank(null);
770
		assertFalse(nameBase1.isSpecies());
771
	}
772

    
773
	/**
774
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isInfraSpecific()}.
775
	 */
776
	@Test
777
	public void testIsInfraSpecific() {
778
		nameBase1.setRank(Rank.FAMILY());
779
		assertFalse(nameBase1.isInfraSpecific());
780
		nameBase1.setRank(Rank.GENUS());
781
		assertFalse(nameBase1.isInfraSpecific());
782
		nameBase1.setRank(Rank.SUBGENUS());
783
		assertFalse(nameBase1.isInfraSpecific());
784
		nameBase1.setRank(Rank.SPECIES());
785
		assertFalse(nameBase1.isInfraSpecific());
786
		nameBase1.setRank(Rank.FORM());
787
		assertTrue(nameBase1.isInfraSpecific());
788
		nameBase1.setRank(Rank.INFRASPECIFICTAXON());
789
		assertTrue(nameBase1.isInfraSpecific());
790
		nameBase1.setRank(null);
791
		assertFalse(nameBase1.isInfraSpecific());
792
	}
793

    
794
	/**
795
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getNomenclaturalCode()}.
796
	 */
797
	@Test
798
	public void testGetNomenclaturalCode() {
799
		//is abstract
800
	}
801

    
802

    
803
	//descriptions, fullTitleCache, homotypicalGroup,
804

    
805
	//no changes to: appendedPharse, nomenclaturalReference,
806
	//nomenclaturalMicroReference, parsingProblem, problemEnds, problemStarts
807
	//protectedFullTitleCache
808

    
809
	@Test
810
	public void testClone(){
811
		NonViralName taxonNameBase1 = NonViralName.NewInstance(Rank.SPECIES());
812
		NonViralName<?> genusName = NonViralName.NewInstance(Rank.GENUS());
813
		Taxon taxonBase = Taxon.NewInstance(taxonNameBase1, null);
814

    
815
		//basionym & homonym
816
		NonViralName<?> basionym = NonViralName.NewInstance(Rank.SPECIES());
817
		NonViralName<?> earlierHomonym = NonViralName.NewInstance(Rank.SPECIES());
818
		taxonNameBase1.addBasionym(basionym);
819
		taxonNameBase1.addRelationshipToName(earlierHomonym, NameRelationshipType.LATER_HOMONYM(), "later homonym rule");
820
		//status
821
		Reference statusReference = ReferenceFactory.newArticle();
822
		NomenclaturalStatus nomStatus = NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONSERVED(), statusReference, "55");
823
		taxonNameBase1.addStatus(nomStatus);
824
		//typeDesignation
825
		DerivedUnit typeSpecimen = DerivedUnit.NewPreservedSpecimenInstance();
826
		Reference specimenTypeCitation = ReferenceFactory.newArticle();
827
		Reference nameTypeCitation = ReferenceFactory.newArticle();
828
		SpecimenTypeDesignation specimenTypeDesignationOriginal = taxonNameBase1.addSpecimenTypeDesignation(typeSpecimen, SpecimenTypeDesignationStatus.HOLOTYPE(), specimenTypeCitation, null, null, false, false);
829
		NameTypeDesignation nameTypeDesignationOriginal = genusName.addNameTypeDesignation(taxonNameBase1, nameTypeCitation, null, null, NameTypeDesignationStatus.LECTOTYPE(), true, false, false, false);
830

    
831
		//description
832
		TaxonNameDescription description = TaxonNameDescription.NewInstance(taxonNameBase1);
833
		TextData textData = TextData.NewInstance(Feature.IMAGE());
834
		textData.putText(Language.DEFAULT(), "My media text data");
835
		Media media = Media.NewInstance();
836
		textData.addMedia(media);
837
		description.addElement(textData);
838

    
839
		//CLONE
840
		TaxonNameBase<?,?> clone = (TaxonNameBase)taxonNameBase1.clone();
841
		TaxonNameBase<?,?> genusClone = (TaxonNameBase)genusName.clone();
842
		assertSame("Rank should be same", taxonNameBase1.getRank(), clone.getRank());
843
		assertTrue("TaxonBases should not be cloned", clone.getTaxonBases().isEmpty());
844
		assertEquals("TaxonBases of original name should not be empty", 1, taxonNameBase1.getTaxonBases().size());
845
		//Homotypical group - CAUTION: behaviour may be changed in future
846
		//TODO still needs to be discussed
847
//		assertSame("The clone must have the same homotypical group as the original", taxonNameBase1.getHomotypicalGroup(), clone.getHomotypicalGroup());
848
//		assertSame("The genusClone must have the same homotypical group as the original genus", genusName.getHomotypicalGroup(), genusClone.getHomotypicalGroup());
849

    
850
		//description
851
		assertEquals("There should be exactly 1 name description", 1, clone.getDescriptions().size());
852
		TaxonNameDescription descriptionClone = clone.getDescriptions().iterator().next();
853
		assertEquals("There should be exactly 1 description element", 1, descriptionClone.getElements().size());
854
		TextData textDataClone = (TextData)descriptionClone.getElements().iterator().next();
855
		String text = textDataClone.getText(Language.DEFAULT());
856
		assertEquals("Textdata should be equal", "My media text data", text);
857
		assertEquals("There should be exactly 1 media attached", 1, textDataClone.getMedia().size());
858
		Media mediaClone = textDataClone.getMedia().get(0);
859
		assertSame("Media must be the same", media, mediaClone);
860

    
861
		//type designation
862
		assertEquals("There should be exactly 1 specimen type designation", 1, clone.getTypeDesignations().size());
863
		assertNotSame("type designation sets should not be the same", taxonNameBase1.getTypeDesignations(), clone.getTypeDesignations());
864
		SpecimenTypeDesignation specimenTypeDesignationClone = (SpecimenTypeDesignation)clone.getTypeDesignations().iterator().next();
865
		assertNotSame("The specimen type designation should not be the same", specimenTypeDesignationOriginal, specimenTypeDesignationClone);
866
		assertSame("The derived unit of the specimen type designation needs to be the same", specimenTypeDesignationOriginal.getTypeSpecimen(), specimenTypeDesignationClone.getTypeSpecimen());
867
		assertSame("The status of the specimen type designation needs to be the same", specimenTypeDesignationOriginal.getTypeStatus(), specimenTypeDesignationClone.getTypeStatus());
868
		assertEquals("The specimen type designation must have exactly 1 typified name which is 'clone'", 1, specimenTypeDesignationClone.getTypifiedNames().size());
869
		assertTrue("The specimen type designation must have 'clone' as typified name", specimenTypeDesignationClone.getTypifiedNames().contains(clone));
870
//		assertSame("The specimen type designation must have the same homotypical group as the typified name", specimenTypeDesignationClone.getHomotypicalGroup(), clone.getHomotypicalGroup());
871

    
872
		assertEquals("There should be exactly 1 name type designation", 1, genusClone.getTypeDesignations().size());
873
		assertNotSame("type designation sets should not be the same", genusName.getTypeDesignations(), genusClone.getTypeDesignations());
874
		NameTypeDesignation nameTypeDesignationClone = (NameTypeDesignation)genusClone.getTypeDesignations().iterator().next();
875
		assertNotSame("The name type designation should not be the same", nameTypeDesignationOriginal, nameTypeDesignationClone);
876
		assertSame("The nyme type of the name type designation needs to be the same", taxonNameBase1, nameTypeDesignationClone.getTypeName());
877
		assertSame("The status of the name type designation needs to be the same", nameTypeDesignationOriginal.getTypeStatus(), nameTypeDesignationClone.getTypeStatus());
878
		assertEquals("The name type designation must have exactly 1 typified name which is 'genusClone'", 1, nameTypeDesignationClone.getTypifiedNames().size());
879
		assertTrue("The name type designation must have 'genusClone' as typified name", nameTypeDesignationClone.getTypifiedNames().contains(genusClone));
880
//		assertSame("The name type designation must have the same homotypical group as the typified name", nameTypeDesignationClone.getHomotypicalGroup(), genusClone.getHomotypicalGroup());
881

    
882
		//status
883
		assertEquals("There should be exactly 1 status", 1, clone.getStatus().size());
884
		assertNotSame("Status sets should not be the same", taxonNameBase1.getStatus(), clone.getStatus());
885
		NomenclaturalStatus cloneStatus = clone.getStatus().iterator().next();
886
		assertSame("The type of the nomStatus needs to be the same", nomStatus.getType(), cloneStatus.getType());
887
		assertSame("The citation of the nomStatus needs to be the same", nomStatus.getCitation(), cloneStatus.getCitation());
888
		assertSame("The rule considered of the nomStatus needs to be the same", nomStatus.getRuleConsidered(), cloneStatus.getRuleConsidered());
889
		//DISCUSS: do we want to reuse the status
890
//		assertSame("The nomStatus needs to be the same", nomStatus, cloneStatus);
891

    
892

    
893
//		//hybrid parents of clone
894
//		assertEquals("There should be exactly 2 hybrid relationships in which the clone takes the child role", 2, clone.getChildRelationships().size());
895
//		Set<NonViralName> parentSet = new HashSet<NonViralName>();
896
//		Set<NonViralName> childSet = new HashSet<NonViralName>();
897
//		for (Object object : clone.getChildRelationships()){
898
//			HybridRelationship childRelation = (HybridRelationship)object;
899
//			NonViralName relatedFrom = childRelation.getRelatedFrom();
900
//			parentSet.add(relatedFrom);
901
//			NonViralName relatedTo = childRelation.getRelatedTo();
902
//			childSet.add(relatedTo);
903
//		}
904
//		assertTrue("Parent set should contain parent1", parentSet.contains(parent));
905
//		assertTrue("Parent set should contain parent2", parentSet.contains(parent2));
906
//		assertTrue("Child set should contain clone", childSet.contains(clone));
907

    
908
		//basionym of clone
909
		assertEquals("There should be exactly 1 relationship in which the clone takes the to role", 1, clone.getRelationsToThisName().size());
910
		NameRelationship nameRelation = clone.getRelationsToThisName().iterator().next();
911
		assertSame("Basionym should be from-object in relationship", basionym, nameRelation.getRelatedFrom());
912
		assertSame("Clone should be to-object in relationship", clone, nameRelation.getRelatedTo());
913
		assertSame("Relationship type should be cloned correctly", NameRelationshipType.BASIONYM(), nameRelation.getType());
914
//		assertEquals("Rule should be cloned correctly", "later homonym rule", nameRelation.getRuleConsidered());
915

    
916

    
917
		//homonym of clone
918
		assertEquals("There should be exactly 1 relationship in which the clone takes the from role", 1, clone.getRelationsFromThisName().size());
919
		nameRelation = clone.getRelationsFromThisName().iterator().next();
920
		assertSame("Clone should be from-object in relationship", clone, nameRelation.getRelatedFrom());
921
		assertSame("Homonym should be to-object in relationship", earlierHomonym, nameRelation.getRelatedTo());
922
		assertSame("Relationship type should be cloned correctly", NameRelationshipType.LATER_HOMONYM(), nameRelation.getType());
923
		assertEquals("Rule should be cloned correctly", "later homonym rule", nameRelation.getRuleConsidered());
924
	}
925

    
926
}
(11-11/13)