Project

General

Profile

Download (36.4 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 void setCacheStrategy(INameCacheStrategy strategy){}
71
		@Override
72
		public INameCacheStrategy getCacheStrategy(){return null;}
73
		@Override
74
		public NomenclaturalCode getNomenclaturalCode(){return null;}
75
		@Override
76
		public String generateFullTitle(){return null;}
77
		@Override
78
		public String generateTitle() {
79
			return null;
80
		}
81

    
82
	}
83

    
84

    
85
/** *************************  TESTS ******************************************************/
86

    
87

    
88
	@Test
89
	public void testGenerateFullTitle() {
90
		//abstract
91
	}
92

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
246

    
247
	}
248

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

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

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

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

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

    
297

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

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

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

    
326
	}
327

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
524

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

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

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

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

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

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

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

    
589

    
590
	}
591

    
592

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

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

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

    
619
		assertTrue(name1.isHomotypic(name4));
620
		assertTrue(name4.isHomotypic(name1));
621
		assertFalse(name1.isHomotypic(name3));
622
		assertFalse(name3.isHomotypic(name1));
623
		assertTrue(name2.isHomotypic(name1));
624

    
625
	}
626

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

    
634
		name1.mergeHomotypicGroups(name2);
635
		name1.mergeHomotypicGroups(name3);
636
		name2.mergeHomotypicGroups(name4);
637

    
638
		name1.makeGroupsBasionym();
639

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

    
645
	}
646

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

    
654
		assertFalse(name1.isGroupsBasionym());
655

    
656
		name1.mergeHomotypicGroups(name2);
657
		name2.mergeHomotypicGroups(name4);
658

    
659
		name1.makeGroupsBasionym();
660

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

    
667

    
668

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

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

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

    
698
	@Test
699
	public void testRemoveTaxonBases(){
700

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

    
704

    
705
		nameBase1.removeTaxonBase(newTaxon);
706
		assertEquals(0, nameBase1.getTaxonBases().size());
707

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

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

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

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

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

    
793

    
794
	//descriptions, fullTitleCache, homotypicalGroup,
795

    
796
	//no changes to: appendedPharse, nomenclaturalReference,
797
	//nomenclaturalMicroReference, parsingProblem, problemEnds, problemStarts
798
	//protectedFullTitleCache
799

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

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

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

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

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

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

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

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

    
883

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

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

    
907

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

    
917
}
(11-11/13)