Project

General

Profile

Download (36.3 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 org.apache.log4j.Logger;
21
import org.junit.Before;
22
import org.junit.BeforeClass;
23
import org.junit.Test;
24

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

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

    
45
	private TaxonNameBaseTestClass nameBase1;
46
	private TaxonNameBaseTestClass nameBase2;
47

    
48
	@BeforeClass
49
	public static void setUpBeforeClass() {
50
		DefaultTermInitializer vocabularyStore = new DefaultTermInitializer();
51
		vocabularyStore.initialize();
52
	}
53

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

    
63

    
64
	private class TaxonNameBaseTestClass extends TaxonNameBase<TaxonNameBaseTestClass, INameCacheStrategy<TaxonNameBaseTestClass>>{
65
		public TaxonNameBaseTestClass(){super();}
66
		public TaxonNameBaseTestClass(Rank rank){super(rank);}
67
		public TaxonNameBaseTestClass(HomotypicalGroup hg){super(hg);}
68
		public TaxonNameBaseTestClass(Rank rank, HomotypicalGroup hg){super(rank, hg);}
69
		@Override
70
		public boolean isCodeCompliant(){return false;}
71
		@Override
72
		public void setCacheStrategy(INameCacheStrategy strategy){}
73
		@Override
74
		public INameCacheStrategy getCacheStrategy(){return null;}
75
		@Override
76
		public NomenclaturalCode getNomenclaturalCode(){return null;}
77
		@Override
78
		public String generateFullTitle(){return null;}
79
		@Override
80
		public String generateTitle() {
81
			return null;
82
		}
83

    
84
	}
85

    
86

    
87
/** *************************  TESTS ******************************************************/
88

    
89

    
90
	@Test
91
	public void testGenerateFullTitle() {
92
		//abstract
93
	}
94

    
95
	/**
96
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#TaxonNameBase()}.
97
	 */
98
	@Test
99
	public void testTaxonNameBase() {
100
		assertNotNull(nameBase1);
101
	}
102

    
103
	/**
104
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#TaxonNameBase(eu.etaxonomy.cdm.model.name.Rank)}.
105
	 */
106
	@Test
107
	public void testTaxonNameBaseRank() {
108
		assertNotNull(nameBase2);
109
		assertEquals(Rank.GENUS(), nameBase2.getRank());
110
		Rank rank = null;
111
		TaxonNameBase testName = new TaxonNameBaseTestClass(rank);
112
		assertNull(testName.getRank());
113
	}
114

    
115
	/**
116
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#TaxonNameBase(eu.etaxonomy.cdm.model.name.HomotypicalGroup)}.
117
	 */
118
	@Test
119
	public void testTaxonNameBaseHomotypicalGroup() {
120
		HomotypicalGroup hg = HomotypicalGroup.NewInstance();
121
		TaxonNameBase testHG = new TaxonNameBaseTestClass(hg);
122
		assertSame(hg, testHG.getHomotypicalGroup());
123
		HomotypicalGroup hgNull = null;
124
		TaxonNameBase testHGNull = new TaxonNameBaseTestClass(hgNull);
125
		assertNotNull(testHGNull.getHomotypicalGroup());
126
	}
127

    
128
	/**
129
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#TaxonNameBase(eu.etaxonomy.cdm.model.name.Rank, eu.etaxonomy.cdm.model.name.HomotypicalGroup)}.
130
	 */
131
	@Test
132
	public void testTaxonNameBaseRankHomotypicalGroup() {
133
		Rank rank = Rank.SPECIES();
134
		HomotypicalGroup hg = HomotypicalGroup.NewInstance();
135
		TaxonNameBase testHG = new TaxonNameBaseTestClass(rank, hg);
136
		assertSame(rank, testHG.getRank());
137
		assertSame(hg, testHG.getHomotypicalGroup());
138

    
139
		Rank rankNull = null;
140
		HomotypicalGroup hgNull = null;
141
		TaxonNameBase testHGNull = new TaxonNameBaseTestClass(rankNull, hgNull);
142
		assertEquals(rankNull, testHGNull.getRank());
143
		assertNotNull(testHGNull.getHomotypicalGroup());
144
	}
145

    
146
	/**
147
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isCodeCompliant()}.
148
	 */
149
	@Test
150
	public void testIsCodeCompliant() {
151
		//is abstract
152
	}
153

    
154
	/**
155
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getNameRelations()}.
156
	 */
157
	@Test
158
	public void testGetNameRelations() {
159
		logger.warn("not yet implemented");
160
	}
161

    
162
	/**
163
	 * 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)}.
164
	 */
165
	@Test
166
	public void testAddRelationshipToName() {
167
		logger.warn("not yet implemented");
168
	}
169

    
170
	/**
171
	 * 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)}.
172
	 */
173
	@Test
174
	public void testAddRelationshipFromName() {
175
		logger.warn("not yet implemented");
176
	}
177

    
178
	/**
179
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addNameRelationship(eu.etaxonomy.cdm.model.name.NameRelationship)}.
180
	 */
181
	@Test
182
	public void testAddNameRelationship() {
183
		logger.warn("not yet implemented");
184
	}
185

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

    
194
	/**
195
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addRelationship(eu.etaxonomy.cdm.model.common.RelationshipBase)}.
196
	 */
197
	@Test
198
	public void testAddRelationship() {
199
		logger.warn("not yet implemented");
200
	}
201

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

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

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

    
248

    
249
	}
250

    
251
	/**
252
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isOriginalCombination()}.
253
	 */
254
	@Test
255
	public void testIsOriginalCombination() {
256
		logger.warn("not yet implemented");
257
	}
258

    
259
	/**
260
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getBasionym()}.
261
	 */
262
	@Test
263
	public void testGetBasionym() {
264
		TaxonNameBase name1 = TaxonNameBase.NewBotanicalInstance(null);
265
		TaxonNameBase basionym1 = TaxonNameBase.NewBotanicalInstance(null);
266
		TaxonNameBase basionym2 = TaxonNameBase.NewBotanicalInstance(null);
267

    
268
		assertEquals(null, name1.getBasionym());
269
		name1.addBasionym(basionym1);
270
		assertEquals(basionym1, name1.getBasionym());
271
		name1.addBasionym(basionym2);
272
		TaxonNameBase oneOfThebasionyms = name1.getBasionym();
273
		assertTrue(oneOfThebasionyms == basionym1 || oneOfThebasionyms == basionym2 );
274
		name1.removeBasionyms();
275
		assertEquals(null, name1.getBasionym());
276
	}
277

    
278
	/**
279
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addBasionym(eu.etaxonomy.cdm.model.name.TaxonNameBase)}.
280
	 */
281
	@Test
282
	public void testAddBasionymT() {
283
		assertNotSame(nameBase1.getHomotypicalGroup(), nameBase2.getHomotypicalGroup());
284
		assertFalse(nameBase1.getHomotypicalGroup().equals(nameBase2.getHomotypicalGroup()));
285
		nameBase1.addBasionym(nameBase2);
286
		assertTrue(nameBase1.getHomotypicalGroup().equals(nameBase2.getHomotypicalGroup()));
287
		assertSame(nameBase1.getHomotypicalGroup(), nameBase2.getHomotypicalGroup());
288
		logger.warn("not yet fully implemented");
289
	}
290

    
291
	/**
292
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addBasionym(eu.etaxonomy.cdm.model.name.TaxonNameBase, java.lang.String)}.
293
	 */
294
	@Test
295
	public void testAddBasionymTString() {
296
		logger.warn("not yet implemented");
297
	}
298

    
299

    
300
	/**
301
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getCacheStrategy()}.
302
	 */
303
	@Test
304
	public void testGetCacheStrategy() {
305
		//is abstract
306
	}
307

    
308
	/**
309
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#setCacheStrategy(eu.etaxonomy.cdm.strategy.cache.name.INameCacheStrategy)}.
310
	 */
311
	@Test
312
	public void testSetCacheStrategy() {
313
		logger.warn("not yet implemented");
314
	}
315

    
316
	/**
317
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getRank()}.
318
	 */
319
	@Test
320
	public void testGetRank() {
321
		TaxonNameBase<?,?> name1 = TaxonNameBase.NewBotanicalInstance(null);
322
		assertNull("Rank shall be null", name1.getRank());
323
		name1.setRank(Rank.SPECIES());
324
		assertNotNull("Rank shall not be null", name1.getRank());
325
		name1.setRank(null);
326
		assertNull("Rank shall be null", name1.getRank());
327

    
328
	}
329

    
330
	/**
331
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getNomenclaturalReference()}.
332
	 */
333
	@Test
334
	public void testGetSetNomenclaturalReference() {
335
		INomenclaturalReference nr = nameBase1.getNomenclaturalReference();
336
		assertNull("Nomenclatural Reference shall be null", nr);
337
		nameBase1.setNomenclaturalReference(ReferenceFactory.newGeneric());
338
		nr = nameBase1.getNomenclaturalReference();
339
		assertNotNull("Nomenclatural Reference shall not be null", nr);
340
	}
341

    
342
	/**
343
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getAppendedPhrase()}.
344
	 */
345
	@Test
346
	public void testGetAppendedPhrase() {
347
		TaxonNameBase<?,?> name1 = TaxonNameBase.NewBotanicalInstance(null);
348
		String appPhrase = "appPhrase";
349
		assertNull(name1.getAppendedPhrase());
350
		name1.setAppendedPhrase(appPhrase);
351
		assertSame(appPhrase, name1.getAppendedPhrase());
352
		name1.setAppendedPhrase(null);
353
		assertNull(name1.getAppendedPhrase());
354
	}
355

    
356
	/**
357
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getNomenclaturalMicroReference()}.
358
	 */
359
	@Test
360
	public void testGetSetNomenclaturalMicroReference() {
361
		TaxonNameBase<?,?> name1 = TaxonNameBase.NewBotanicalInstance(null);
362
		String microRef = "micro";
363
		assertNull(name1.getNomenclaturalMicroReference());
364
		name1.setNomenclaturalMicroReference(microRef);
365
		assertSame(microRef, name1.getNomenclaturalMicroReference());
366
		name1.setNomenclaturalMicroReference(null);
367
		assertNull(name1.getNomenclaturalMicroReference());
368
	}
369

    
370
	/**
371
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getHasProblem()}.
372
	 */
373
	@Test
374
	public void testGetSetHasProblem() {
375
		TaxonNameBase<?,?> name1 = TaxonNameBase.NewBotanicalInstance(null);
376
		name1.setParsingProblem(0);
377
		assertFalse(name1.hasProblem());
378
		name1.setParsingProblem(1);
379
		assertTrue(name1.hasProblem());
380
		name1.setParsingProblem(0);
381
		assertFalse(name1.getParsingProblem()!=0);
382
	}
383

    
384
	/**
385
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getNameTypeDesignations()}.
386
	 */
387
	@Test
388
	public void testGetNameTypeDesignations() {
389
		logger.warn("not yet implemented");
390
	}
391

    
392
	/**
393
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#setNameTypeDesignations(java.util.Set)}.
394
	 */
395
	@Test
396
	public void testSetNameTypeDesignations() {
397
		logger.warn("not yet implemented");
398
	}
399

    
400
	/**
401
	 * 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)}.
402
	 */
403
	@Test
404
	public void testAddNameTypeDesignation() {
405
		logger.warn("not yet implemented");
406
	}
407

    
408
	/**
409
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#removeNameTypeDesignation(eu.etaxonomy.cdm.model.name.NameTypeDesignation)}.
410
	 */
411
	@Test
412
	public void testRemoveNameTypeDesignation() {
413
		logger.warn("not yet implemented");
414
	}
415

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

    
424
	/**
425
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#setSpecimenTypeDesignations(java.util.Set)}.
426
	 */
427
	@Test
428
	public void testSetSpecimenTypeDesignations() {
429
		logger.warn("not yet implemented");
430
	}
431

    
432
	/**
433
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getSpecimenTypeDesignationsOfHomotypicalGroup()}.
434
	 */
435
	@Test
436
	public void testGetSpecimenTypeDesignationsOfHomotypicalGroup() {
437
		logger.warn("not yet implemented");
438
	}
439

    
440
	/**
441
	 * 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)}.
442
	 */
443
	@Test
444
	public void testAddSpecimenTypeDesignationSpecimenTypeDesignationStatusReferenceBaseStringStringBoolean() {
445
		logger.warn("not yet implemented");
446
	}
447

    
448
	/**
449
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addSpecimenTypeDesignation(eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation)}.
450
	 */
451
	@Test
452
	public void testAddSpecimenTypeDesignationSpecimenTypeDesignation() {
453
		logger.warn("not yet implemented");
454
	}
455

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

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

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

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

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

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

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

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

    
526

    
527
	@Test
528
	public void testAddAndRemoveDescriptionTaxonNameDescription() {
529
		TaxonNameDescription description = TaxonNameDescription.NewInstance();
530
		nameBase2.addDescription(description);  //test if reflection method in addDescription() works
531
		assertTrue("The description has not properly been added to the taxonName", nameBase2.getDescriptions().contains(description));
532
		assertEquals("The taxon name has not properly been added to the description", nameBase2, description.getTaxonName());
533
		nameBase2.removeDescription(description); //test if reflection method in removeDescription() works
534
		assertFalse("The description has not properly been removed from the taxon name", nameBase2.getDescriptions().contains(description));
535
		assertEquals("The taxon name has not properly been removed from the description", null, description.getTaxonName());
536
	}
537

    
538
	/**
539
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getTaxa()}.
540
	 */
541
	@Test
542
	public void testGetTaxa() {
543
		logger.warn("not yet implemented");
544
	}
545

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

    
554
	@Test
555
	public void testMergeHomotypicGroups() {
556
		TaxonNameBase<?,?> name1 = TaxonNameBase.NewBotanicalInstance(null);
557
		TaxonNameBase<?,?> name2 = TaxonNameBase.NewBotanicalInstance(null);
558
		TaxonNameBase<?,?> name3 = TaxonNameBase.NewBotanicalInstance(null);
559
		TaxonNameBase<?,?> name4 = TaxonNameBase.NewBotanicalInstance(null);
560

    
561
		assertFalse(name1.getHomotypicalGroup().equals(name2.getHomotypicalGroup()));
562
		int numberOfTypifiedNames = name1.getHomotypicalGroup().getTypifiedNames().size();
563
		assertEquals(1, numberOfTypifiedNames);
564

    
565
		name1.mergeHomotypicGroups(name2);
566
		assertEquals(name1.getHomotypicalGroup(), name2.getHomotypicalGroup());
567
		assertSame(name1.getHomotypicalGroup(), name2.getHomotypicalGroup());
568
		numberOfTypifiedNames = name1.getHomotypicalGroup().getTypifiedNames().size();
569
		assertEquals(2, numberOfTypifiedNames);
570
		numberOfTypifiedNames = name2.getHomotypicalGroup().getTypifiedNames().size();
571
		assertEquals(2, numberOfTypifiedNames);
572
		assertTrue(name1.getHomotypicalGroup().getTypifiedNames().contains(name2));
573
		assertTrue(name2.getHomotypicalGroup().getTypifiedNames().contains(name1));
574

    
575
		name3.mergeHomotypicGroups(name2);
576
		assertEquals(name1.getHomotypicalGroup(), name3.getHomotypicalGroup());
577
		assertSame(name1.getHomotypicalGroup(), name3.getHomotypicalGroup());
578
		numberOfTypifiedNames = name1.getHomotypicalGroup().getTypifiedNames().size();
579
		assertEquals(3, numberOfTypifiedNames);
580
		numberOfTypifiedNames = name2.getHomotypicalGroup().getTypifiedNames().size();
581
		assertEquals(3, numberOfTypifiedNames);
582
		numberOfTypifiedNames = name3.getHomotypicalGroup().getTypifiedNames().size();
583
		assertEquals(3, numberOfTypifiedNames);
584
		assertTrue(name1.getHomotypicalGroup().getTypifiedNames().contains(name2));
585
		assertTrue(name2.getHomotypicalGroup().getTypifiedNames().contains(name1));
586
		assertTrue(name1.getHomotypicalGroup().getTypifiedNames().contains(name3));
587
		assertTrue(name3.getHomotypicalGroup().getTypifiedNames().contains(name1));
588
		assertTrue(name2.getHomotypicalGroup().getTypifiedNames().contains(name3));
589
		assertTrue(name3.getHomotypicalGroup().getTypifiedNames().contains(name2));
590

    
591

    
592
	}
593

    
594

    
595
	@Test
596
	public void testIsBasionymFor() {
597
		TaxonNameBase name1 = TaxonNameBase.NewBotanicalInstance(null);
598
		TaxonNameBase name2 = TaxonNameBase.NewBotanicalInstance(null);
599
		TaxonNameBase<?,?> name3 = TaxonNameBase.NewBotanicalInstance(null);
600
		TaxonNameBase<?,?> name4 = TaxonNameBase.NewBotanicalInstance(null);
601

    
602
		assertFalse(name2.isBasionymFor(name1));
603
		assertFalse(name1.isBasionymFor(name2));
604
		name1.addBasionym(name2);
605
		assertTrue(name2.isBasionymFor(name1));
606
		assertFalse(name1.isBasionymFor(name2));
607
	}
608

    
609
	/**
610
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isHomotypic(eu.etaxonomy.cdm.model.name.TaxonNameBase)}.
611
	 */
612
	@Test
613
	public void testIsHomotypic() {
614
		TaxonNameBase<?,?> name1 = TaxonNameBase.NewBotanicalInstance(null);
615
		TaxonNameBase<?,?> name2 = TaxonNameBase.NewBotanicalInstance(null);
616
		TaxonNameBase<?,?> name3 = TaxonNameBase.NewBotanicalInstance(null);
617
		TaxonNameBase<?,?> name4 = TaxonNameBase.NewBotanicalInstance(null);
618
		name1.mergeHomotypicGroups(name2);
619
		name2.mergeHomotypicGroups(name4);
620

    
621
		assertTrue(name1.isHomotypic(name4));
622
		assertTrue(name4.isHomotypic(name1));
623
		assertFalse(name1.isHomotypic(name3));
624
		assertFalse(name3.isHomotypic(name1));
625
		assertTrue(name2.isHomotypic(name1));
626

    
627
	}
628

    
629
	@Test
630
	public void testMakeGroupsBasionym(){
631
		TaxonNameBase<?,?> name1 = TaxonNameBase.NewBotanicalInstance(null);
632
		TaxonNameBase<?,?> name2 = TaxonNameBase.NewBotanicalInstance(null);
633
		TaxonNameBase<?,?> name3 = TaxonNameBase.NewBotanicalInstance(null);
634
		TaxonNameBase<?,?> name4 = TaxonNameBase.NewBotanicalInstance(null);
635

    
636
		name1.mergeHomotypicGroups(name2);
637
		name1.mergeHomotypicGroups(name3);
638
		name2.mergeHomotypicGroups(name4);
639

    
640
		name1.makeGroupsBasionym();
641

    
642
		assertEquals(1, name2.getBasionyms().size());
643
		assertEquals(1, name3.getBasionyms().size());
644
		assertEquals(1, name4.getBasionyms().size());
645
		assertEquals(name1, name4.getBasionym());
646

    
647
	}
648

    
649
	@Test
650
	public void testIsGroupsBasionym(){
651
		TaxonNameBase<?,?> name1 = TaxonNameBase.NewBotanicalInstance(null);
652
		TaxonNameBase<?,?> name2 = TaxonNameBase.NewBotanicalInstance(null);
653
		TaxonNameBase<?,?> name3 = TaxonNameBase.NewBotanicalInstance(null);
654
		TaxonNameBase<?,?> name4 = TaxonNameBase.NewBotanicalInstance(null);
655

    
656
		assertFalse(name1.isGroupsBasionym());
657

    
658
		name1.mergeHomotypicGroups(name2);
659
		name2.mergeHomotypicGroups(name4);
660

    
661
		name1.makeGroupsBasionym();
662

    
663
		assertTrue(name1.isGroupsBasionym());
664
		assertFalse(name2.isGroupsBasionym());
665
		name1.mergeHomotypicGroups(name3);
666
		assertFalse(name1.isGroupsBasionym());
667
	}
668

    
669

    
670

    
671
	@Test
672
	public void testRemoveBasionyms(){
673
		TaxonNameBase name1 = TaxonNameBase.NewBotanicalInstance(null);
674
		TaxonNameBase basionym = TaxonNameBase.NewBotanicalInstance(null);
675
		TaxonNameBase name3 = TaxonNameBase.NewBotanicalInstance(null);
676

    
677
		name1.addBasionym(basionym);
678
		assertEquals(1, name1.getBasionyms().size());
679
		name1.addBasionym(name3);
680
		assertEquals(2, name1.getBasionyms().size());
681
		name1.removeBasionyms();
682
		assertEquals(0, name1.getBasionyms().size());
683
	}
684

    
685
	/**
686
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isSupraGeneric()}.
687
	 */
688
	@Test
689
	public void testIsSupraGeneric() {
690
		nameBase1.setRank(Rank.FAMILY());
691
		assertTrue(nameBase1.isSupraGeneric());
692
		nameBase1.setRank(Rank.GENUS());
693
		assertFalse(nameBase1.isSupraGeneric());
694
		nameBase1.setRank(Rank.FORM());
695
		assertFalse(nameBase1.isSupraGeneric());
696
		nameBase1.setRank(null);
697
		assertFalse(nameBase1.isSupraGeneric());
698
	}
699

    
700
	@Test
701
	public void testRemoveTaxonBases(){
702

    
703
		Taxon newTaxon = Taxon.NewInstance(nameBase1, null);
704
		assertEquals(1, nameBase1.getTaxonBases().size());
705

    
706

    
707
		nameBase1.removeTaxonBase(newTaxon);
708
		assertEquals(0, nameBase1.getTaxonBases().size());
709

    
710
	}
711
	/**
712
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isGenus()}.
713
	 */
714
	@Test
715
	public void testIsGenus() {
716
		nameBase1.setRank(Rank.FAMILY());
717
		assertFalse(nameBase1.isGenus());
718
		nameBase1.setRank(Rank.GENUS());
719
		assertTrue(nameBase1.isGenus());
720
		nameBase1.setRank(Rank.FORM());
721
		assertFalse(nameBase1.isGenus());
722
		nameBase1.setRank(null);
723
		assertFalse(nameBase1.isGenus());
724
	}
725

    
726
	/**
727
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isInfraGeneric()}.
728
	 */
729
	@Test
730
	public void testIsInfraGeneric() {
731
		nameBase1.setRank(Rank.FAMILY());
732
		assertFalse(nameBase1.isInfraGeneric());
733
		nameBase1.setRank(Rank.GENUS());
734
		assertFalse(nameBase1.isInfraGeneric());
735
		nameBase1.setRank(Rank.SUBGENUS());
736
		assertTrue(nameBase1.isInfraGeneric());
737
		nameBase1.setRank(Rank.SPECIES());
738
		assertFalse(nameBase1.isInfraGeneric());
739
		nameBase1.setRank(Rank.FORM());
740
		assertFalse(nameBase1.isInfraGeneric());
741
		nameBase1.setRank(Rank.INFRAGENERICTAXON());
742
		assertTrue(nameBase1.isInfraGeneric());
743
		nameBase1.setRank(null);
744
		assertFalse(nameBase1.isInfraGeneric());
745
	}
746

    
747
	/**
748
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isSpecies()}.
749
	 */
750
	@Test
751
	public void testIsSpecies() {
752
		nameBase1.setRank(Rank.FAMILY());
753
		assertFalse(nameBase1.isSpecies());
754
		nameBase1.setRank(Rank.GENUS());
755
		assertFalse(nameBase1.isSpecies());
756
		nameBase1.setRank(Rank.SUBGENUS());
757
		assertFalse(nameBase1.isSpecies());
758
		nameBase1.setRank(Rank.SPECIES());
759
		assertTrue(nameBase1.isSpecies());
760
		nameBase1.setRank(Rank.FORM());
761
		assertFalse(nameBase1.isSpecies());
762
		nameBase1.setRank(null);
763
		assertFalse(nameBase1.isSpecies());
764
	}
765

    
766
	/**
767
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isInfraSpecific()}.
768
	 */
769
	@Test
770
	public void testIsInfraSpecific() {
771
		nameBase1.setRank(Rank.FAMILY());
772
		assertFalse(nameBase1.isInfraSpecific());
773
		nameBase1.setRank(Rank.GENUS());
774
		assertFalse(nameBase1.isInfraSpecific());
775
		nameBase1.setRank(Rank.SUBGENUS());
776
		assertFalse(nameBase1.isInfraSpecific());
777
		nameBase1.setRank(Rank.SPECIES());
778
		assertFalse(nameBase1.isInfraSpecific());
779
		nameBase1.setRank(Rank.FORM());
780
		assertTrue(nameBase1.isInfraSpecific());
781
		nameBase1.setRank(Rank.INFRASPECIFICTAXON());
782
		assertTrue(nameBase1.isInfraSpecific());
783
		nameBase1.setRank(null);
784
		assertFalse(nameBase1.isInfraSpecific());
785
	}
786

    
787
	/**
788
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getNomenclaturalCode()}.
789
	 */
790
	@Test
791
	public void testGetNomenclaturalCode() {
792
		//is abstract
793
	}
794

    
795

    
796
	//descriptions, fullTitleCache, homotypicalGroup,
797

    
798
	//no changes to: appendedPharse, nomenclaturalReference,
799
	//nomenclaturalMicroReference, parsingProblem, problemEnds, problemStarts
800
	//protectedFullTitleCache
801

    
802
	@Test
803
	public void testClone(){
804
		NonViralName taxonNameBase1 = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
805
		NonViralName<?> genusName = TaxonNameBase.NewNonViralInstance(Rank.GENUS());
806
		Taxon taxonBase = Taxon.NewInstance(taxonNameBase1, null);
807

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

    
824
		//description
825
		TaxonNameDescription description = TaxonNameDescription.NewInstance(taxonNameBase1);
826
		TextData textData = TextData.NewInstance(Feature.IMAGE());
827
		textData.putText(Language.DEFAULT(), "My media text data");
828
		Media media = Media.NewInstance();
829
		textData.addMedia(media);
830
		description.addElement(textData);
831

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

    
843
		//description
844
		assertEquals("There should be exactly 1 name description", 1, clone.getDescriptions().size());
845
		TaxonNameDescription descriptionClone = clone.getDescriptions().iterator().next();
846
		assertEquals("There should be exactly 1 description element", 1, descriptionClone.getElements().size());
847
		TextData textDataClone = (TextData)descriptionClone.getElements().iterator().next();
848
		String text = textDataClone.getText(Language.DEFAULT());
849
		assertEquals("Textdata should be equal", "My media text data", text);
850
		assertEquals("There should be exactly 1 media attached", 1, textDataClone.getMedia().size());
851
		Media mediaClone = textDataClone.getMedia().get(0);
852
		assertSame("Media must be the same", media, mediaClone);
853

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

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

    
875
		//status
876
		assertEquals("There should be exactly 1 status", 1, clone.getStatus().size());
877
		assertNotSame("Status sets should not be the same", taxonNameBase1.getStatus(), clone.getStatus());
878
		NomenclaturalStatus cloneStatus = clone.getStatus().iterator().next();
879
		assertSame("The type of the nomStatus needs to be the same", nomStatus.getType(), cloneStatus.getType());
880
		assertSame("The citation of the nomStatus needs to be the same", nomStatus.getCitation(), cloneStatus.getCitation());
881
		assertSame("The rule considered of the nomStatus needs to be the same", nomStatus.getRuleConsidered(), cloneStatus.getRuleConsidered());
882
		//DISCUSS: do we want to reuse the status
883
//		assertSame("The nomStatus needs to be the same", nomStatus, cloneStatus);
884

    
885

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

    
901
		//basionym of clone
902
		assertEquals("There should be exactly 1 relationship in which the clone takes the to role", 1, clone.getRelationsToThisName().size());
903
		NameRelationship nameRelation = clone.getRelationsToThisName().iterator().next();
904
		assertSame("Basionym should be from-object in relationship", basionym, nameRelation.getRelatedFrom());
905
		assertSame("Clone should be to-object in relationship", clone, nameRelation.getRelatedTo());
906
		assertSame("Relationship type should be cloned correctly", NameRelationshipType.BASIONYM(), nameRelation.getType());
907
//		assertEquals("Rule should be cloned correctly", "later homonym rule", nameRelation.getRuleConsidered());
908

    
909

    
910
		//homonym of clone
911
		assertEquals("There should be exactly 1 relationship in which the clone takes the from role", 1, clone.getRelationsFromThisName().size());
912
		nameRelation = clone.getRelationsFromThisName().iterator().next();
913
		assertSame("Clone should be from-object in relationship", clone, nameRelation.getRelatedFrom());
914
		assertSame("Homonym should be to-object in relationship", earlierHomonym, nameRelation.getRelatedTo());
915
		assertSame("Relationship type should be cloned correctly", NameRelationshipType.LATER_HOMONYM(), nameRelation.getType());
916
		assertEquals("Rule should be cloned correctly", "later homonym rule", nameRelation.getRuleConsidered());
917
	}
918

    
919
}
(11-11/13)