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 java.util.Map;
21
import org.apache.log4j.Logger;
22
import org.junit.Before;
23
import org.junit.BeforeClass;
24
import org.junit.Test;
25

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

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

    
47
	private TaxonNameBaseTestClass nameBase1;
48
	private TaxonNameBaseTestClass nameBase2;
49
	
50
	@BeforeClass
51
	public static void setUpBeforeClass() {
52
		DefaultTermInitializer vocabularyStore = new DefaultTermInitializer();
53
		vocabularyStore.initialize();
54
	}
55

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

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

    
92
	
93
/** *************************  TESTS ******************************************************/
94
	
95

    
96
	@Test
97
	public void testGenerateFullTitle() {
98
		//abstract
99
	}
100
	
101
	/**
102
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#TaxonNameBase()}.
103
	 */
104
	@Test
105
	public void testTaxonNameBase() {
106
		assertNotNull(nameBase1);
107
	}
108

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

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

    
134
	/**
135
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#TaxonNameBase(eu.etaxonomy.cdm.model.name.Rank, eu.etaxonomy.cdm.model.name.HomotypicalGroup)}.
136
	 */
137
	@Test
138
	public void testTaxonNameBaseRankHomotypicalGroup() {
139
		Rank rank = Rank.SPECIES();
140
		HomotypicalGroup hg = HomotypicalGroup.NewInstance();
141
		TaxonNameBase testHG = new TaxonNameBaseTestClass(rank, hg);
142
		assertSame(rank, testHG.getRank());
143
		assertSame(hg, testHG.getHomotypicalGroup());
144
		
145
		Rank rankNull = null;
146
		HomotypicalGroup hgNull = null;
147
		TaxonNameBase testHGNull = new TaxonNameBaseTestClass(rankNull, hgNull);
148
		assertEquals(rankNull, testHGNull.getRank());
149
		assertNotNull(testHGNull.getHomotypicalGroup());
150
	}
151

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

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

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

    
176
	/**
177
	 * 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)}.
178
	 */
179
	@Test
180
	public void testAddRelationshipFromName() {
181
		logger.warn("not yet implemented");
182
	}
183

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

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

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

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

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

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

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

    
265
	/**
266
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getBasionym()}.
267
	 */
268
	@Test
269
	public void testGetBasionym() {
270
		TaxonNameBase name1 = BotanicalName.NewInstance(null);
271
		TaxonNameBase basionym1 = BotanicalName.NewInstance(null);
272
		TaxonNameBase basionym2 = BotanicalName.NewInstance(null);
273
		
274
		assertEquals(null, name1.getBasionym());	
275
		name1.addBasionym(basionym1);
276
		assertEquals(basionym1, name1.getBasionym());
277
		name1.addBasionym(basionym2);
278
		TaxonNameBase oneOfThebasionyms = name1.getBasionym();
279
		assertTrue(oneOfThebasionyms == basionym1 || oneOfThebasionyms == basionym2 );
280
		name1.removeBasionyms();
281
		assertEquals(null, name1.getBasionym());	
282
	}
283

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

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

    
305

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

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

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

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

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

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

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

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

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

    
406
	/**
407
	 * 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)}.
408
	 */
409
	@Test
410
	public void testAddNameTypeDesignation() {
411
		logger.warn("not yet implemented");
412
	}
413

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

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

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

    
438
	/**
439
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getSpecimenTypeDesignationsOfHomotypicalGroup()}.
440
	 */
441
	@Test
442
	public void testGetSpecimenTypeDesignationsOfHomotypicalGroup() {
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.occurrence.Specimen, eu.etaxonomy.cdm.model.name.TypeDesignationStatus, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String, java.lang.String, boolean)}.
448
	 */
449
	@Test
450
	public void testAddSpecimenTypeDesignationSpecimenTypeDesignationStatusReferenceBaseStringStringBoolean() {
451
		logger.warn("not yet implemented");
452
	}
453

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

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

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

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

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

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

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

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

    
518
	/**
519
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#addTaxonBase(eu.etaxonomy.cdm.model.taxon.TaxonBase)}.
520
	 */
521
	@Test
522
	public void testAddTaxonBase() {
523
		Taxon taxon = Taxon.NewInstance(null, null);  
524
		nameBase2.addTaxonBase(taxon);  //test if reflection method addTaxonBase() works
525
		assertTrue("The taxon has not properly been added to the taxonName", nameBase2.getTaxonBases().contains(taxon));
526
		assertEquals("The taxon name has not properly been added to the taxon", nameBase2, taxon.getName());
527
		nameBase2.removeTaxonBase(taxon); //test if reflection method in removeTaxonBase() works
528
		assertFalse("The taxon has not properly been removed from the taxon name", nameBase2.getTaxonBases().contains(taxon));
529
		assertEquals("The taxon name has not properly been removed from the taxon", null, taxon.getName());
530
	}
531
	
532
	
533
	@Test
534
	public void testAddAndRemoveDescriptionTaxonNameDescription() {
535
		TaxonNameDescription description = TaxonNameDescription.NewInstance();
536
		nameBase2.addDescription(description);  //test if reflection method in addDescription() works
537
		assertTrue("The description has not properly been added to the taxonName", nameBase2.getDescriptions().contains(description));
538
		assertEquals("The taxon name has not properly been added to the description", nameBase2, description.getTaxonName());
539
		nameBase2.removeDescription(description); //test if reflection method in removeDescription() works
540
		assertFalse("The description has not properly been removed from the taxon name", nameBase2.getDescriptions().contains(description));
541
		assertEquals("The taxon name has not properly been removed from the description", null, description.getTaxonName());
542
	}
543

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

    
552
	/**
553
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getSynonyms()}.
554
	 */
555
	@Test
556
	public void testGetSynonyms() {
557
		logger.warn("not yet implemented");
558
	}
559
	
560
	@Test
561
	public void testMergeHomotypicGroups() {
562
		TaxonNameBase<?,?> name1 = BotanicalName.NewInstance(null);
563
		TaxonNameBase<?,?> name2 = BotanicalName.NewInstance(null);
564
		TaxonNameBase<?,?> name3 = BotanicalName.NewInstance(null);
565
		TaxonNameBase<?,?> name4 = BotanicalName.NewInstance(null);
566
		
567
		assertFalse(name1.getHomotypicalGroup().equals(name2.getHomotypicalGroup()));
568
		int numberOfTypifiedNames = name1.getHomotypicalGroup().getTypifiedNames().size();
569
		assertEquals(1, numberOfTypifiedNames);
570
		
571
		name1.mergeHomotypicGroups(name2);
572
		assertEquals(name1.getHomotypicalGroup(), name2.getHomotypicalGroup());
573
		assertSame(name1.getHomotypicalGroup(), name2.getHomotypicalGroup());
574
		numberOfTypifiedNames = name1.getHomotypicalGroup().getTypifiedNames().size();
575
		assertEquals(2, numberOfTypifiedNames);
576
		numberOfTypifiedNames = name2.getHomotypicalGroup().getTypifiedNames().size();
577
		assertEquals(2, numberOfTypifiedNames);
578
		assertTrue(name1.getHomotypicalGroup().getTypifiedNames().contains(name2));
579
		assertTrue(name2.getHomotypicalGroup().getTypifiedNames().contains(name1));
580

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

    
597
		
598
	}
599
	
600
	
601
	@Test
602
	public void testIsBasionymFor() {
603
		TaxonNameBase name1 = BotanicalName.NewInstance(null);
604
		TaxonNameBase name2 = BotanicalName.NewInstance(null);
605
		TaxonNameBase<?,?> name3 = BotanicalName.NewInstance(null);
606
		TaxonNameBase<?,?> name4 = BotanicalName.NewInstance(null);
607
		
608
		assertFalse(name2.isBasionymFor(name1));
609
		assertFalse(name1.isBasionymFor(name2));
610
		name1.addBasionym(name2);
611
		assertTrue(name2.isBasionymFor(name1));
612
		assertFalse(name1.isBasionymFor(name2));
613
	}
614

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

    
635
	@Test
636
	public void testMakeGroupsBasionym(){
637
		TaxonNameBase<?,?> name1 = BotanicalName.NewInstance(null);
638
		TaxonNameBase<?,?> name2 = BotanicalName.NewInstance(null);
639
		TaxonNameBase<?,?> name3 = BotanicalName.NewInstance(null);
640
		TaxonNameBase<?,?> name4 = BotanicalName.NewInstance(null);
641
		
642
		name1.mergeHomotypicGroups(name2);
643
		name1.mergeHomotypicGroups(name3);
644
		name2.mergeHomotypicGroups(name4);
645
		
646
		name1.makeGroupsBasionym();
647
		
648
		assertEquals(1, name2.getBasionyms().size());
649
		assertEquals(1, name3.getBasionyms().size());
650
		assertEquals(1, name4.getBasionyms().size());
651
		assertEquals(name1, name4.getBasionym());
652
		
653
	}
654
	
655
	@Test
656
	public void testIsGroupsBasionym(){
657
		TaxonNameBase<?,?> name1 = BotanicalName.NewInstance(null);
658
		TaxonNameBase<?,?> name2 = BotanicalName.NewInstance(null);
659
		TaxonNameBase<?,?> name3 = BotanicalName.NewInstance(null);
660
		TaxonNameBase<?,?> name4 = BotanicalName.NewInstance(null);
661
		
662
		assertFalse(name1.isGroupsBasionym());
663
		
664
		name1.mergeHomotypicGroups(name2);
665
		name2.mergeHomotypicGroups(name4);
666
		
667
		name1.makeGroupsBasionym();
668
		
669
		assertTrue(name1.isGroupsBasionym());
670
		assertFalse(name2.isGroupsBasionym());
671
		name1.mergeHomotypicGroups(name3);
672
		assertFalse(name1.isGroupsBasionym());	
673
	}
674
	
675
	
676
	
677
	@Test
678
	public void testRemoveBasionyms(){
679
		TaxonNameBase name1 = BotanicalName.NewInstance(null);
680
		TaxonNameBase basionym = BotanicalName.NewInstance(null);
681
		TaxonNameBase name3 = BotanicalName.NewInstance(null);
682
		
683
		name1.addBasionym(basionym);
684
		assertEquals(1, name1.getBasionyms().size());
685
		name1.addBasionym(name3);
686
		assertEquals(2, name1.getBasionyms().size());
687
		name1.removeBasionyms();
688
		assertEquals(0, name1.getBasionyms().size());	
689
	}
690

    
691
	/**
692
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isSupraGeneric()}.
693
	 */
694
	@Test
695
	public void testIsSupraGeneric() {
696
		nameBase1.setRank(Rank.FAMILY());
697
		assertTrue(nameBase1.isSupraGeneric());
698
		nameBase1.setRank(Rank.GENUS());
699
		assertFalse(nameBase1.isSupraGeneric());
700
		nameBase1.setRank(Rank.FORM());
701
		assertFalse(nameBase1.isSupraGeneric());
702
		nameBase1.setRank(null);
703
		assertFalse(nameBase1.isSupraGeneric());
704
	}
705
	
706
	@Test
707
	public void testRemoveTaxonBases(){
708
		
709
		Taxon newTaxon = new Taxon(nameBase1, null);
710
		assertEquals(1, nameBase1.getTaxonBases().size());
711
		
712
		
713
		nameBase1.removeTaxonBase(newTaxon);
714
		assertEquals(0, nameBase1.getTaxonBases().size());
715
		
716
	}
717
	/**
718
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#isGenus()}.
719
	 */
720
	@Test
721
	public void testIsGenus() {
722
		nameBase1.setRank(Rank.FAMILY());
723
		assertFalse(nameBase1.isGenus());
724
		nameBase1.setRank(Rank.GENUS());
725
		assertTrue(nameBase1.isGenus());
726
		nameBase1.setRank(Rank.FORM());
727
		assertFalse(nameBase1.isGenus());
728
		nameBase1.setRank(null);
729
		assertFalse(nameBase1.isGenus());
730
	}
731

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

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

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

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

    
804
	//no changes to: appendedPharse, nomenclaturalReference, 
805
	//nomenclaturalMicroReference, parsingProblem, problemEnds, problemStarts
806
	//protectedFullTitleCache
807
	
808
	@Test
809
	public void testClone(){
810
		NonViralName taxonNameBase1 = NonViralName.NewInstance(Rank.SPECIES());
811
		NonViralName<?> genusName = NonViralName.NewInstance(Rank.GENUS());
812
		Taxon taxonBase = Taxon.NewInstance(taxonNameBase1, null);
813
		
814
		//basionym & homonym
815
		NonViralName<?> basionym = NonViralName.NewInstance(Rank.SPECIES());
816
		NonViralName<?> earlierHomonym = NonViralName.NewInstance(Rank.SPECIES());
817
		taxonNameBase1.addBasionym(basionym);
818
		taxonNameBase1.addRelationshipToName(earlierHomonym, NameRelationshipType.LATER_HOMONYM(), "later homonym rule");
819
		//status
820
		Reference<?> statusReference = ReferenceFactory.newArticle();
821
		NomenclaturalStatus nomStatus = NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONSERVED(), statusReference, "55");
822
		taxonNameBase1.addStatus(nomStatus);
823
		//typeDesignation
824
		DerivedUnit typeSpecimen = DerivedUnit.NewPreservedSpecimenInstance();
825
		Reference<?> specimenTypeCitation = ReferenceFactory.newArticle();
826
		Reference<?> nameTypeCitation = ReferenceFactory.newArticle();
827
		SpecimenTypeDesignation specimenTypeDesignationOriginal = taxonNameBase1.addSpecimenTypeDesignation(typeSpecimen, SpecimenTypeDesignationStatus.HOLOTYPE(), specimenTypeCitation, null, null, false, false);
828
		NameTypeDesignation nameTypeDesignationOriginal = genusName.addNameTypeDesignation(taxonNameBase1, nameTypeCitation, null, null, NameTypeDesignationStatus.LECTOTYPE(), true, false, false, false);
829

    
830
		//description
831
		TaxonNameDescription description = TaxonNameDescription.NewInstance(taxonNameBase1);
832
		TextData textData = TextData.NewInstance(Feature.IMAGE());
833
		textData.putText(Language.DEFAULT(), "My media text data");
834
		Media media = Media.NewInstance();
835
		textData.addMedia(media);
836
		description.addElement(textData);
837
		
838
		//CLONE
839
		TaxonNameBase<?,?> clone = (TaxonNameBase)taxonNameBase1.clone();
840
		TaxonNameBase<?,?> genusClone = (TaxonNameBase)genusName.clone();
841
		assertSame("Rank should be same", taxonNameBase1.getRank(), clone.getRank());
842
		assertTrue("TaxonBases should not be cloned", clone.getTaxonBases().isEmpty());
843
		assertEquals("TaxonBases of original name should not be empty", 1, taxonNameBase1.getTaxonBases().size());
844
		//Homotypical group - CAUTION: behaviour may be changed in future
845
		//TODO still needs to be discussed
846
//		assertSame("The clone must have the same homotypical group as the original", taxonNameBase1.getHomotypicalGroup(), clone.getHomotypicalGroup());
847
//		assertSame("The genusClone must have the same homotypical group as the original genus", genusName.getHomotypicalGroup(), genusClone.getHomotypicalGroup());
848
		
849
		//description
850
		assertEquals("There should be exactly 1 name description", 1, clone.getDescriptions().size());
851
		TaxonNameDescription descriptionClone = (TaxonNameDescription)clone.getDescriptions().iterator().next();
852
		assertEquals("There should be exactly 1 description element", 1, descriptionClone.getElements().size());
853
		TextData textDataClone = (TextData)descriptionClone.getElements().iterator().next();
854
		String text = textDataClone.getText(Language.DEFAULT());
855
		assertEquals("Textdata should be equal", "My media text data", text);
856
		assertEquals("There should be exactly 1 media attached", 1, textDataClone.getMedia().size());
857
		Media mediaClone = textDataClone.getMedia().get(0);
858
		assertSame("Media must be the same", media, mediaClone);
859
		
860
		//type designation
861
		assertEquals("There should be exactly 1 specimen type designation", 1, clone.getTypeDesignations().size());
862
		assertNotSame("type designation sets should not be the same", taxonNameBase1.getTypeDesignations(), clone.getTypeDesignations());
863
		SpecimenTypeDesignation specimenTypeDesignationClone = (SpecimenTypeDesignation)clone.getTypeDesignations().iterator().next();
864
		assertNotSame("The specimen type designation should not be the same", specimenTypeDesignationOriginal, specimenTypeDesignationClone);
865
		assertSame("The derived unit of the specimen type designation needs to be the same", specimenTypeDesignationOriginal.getTypeSpecimen(), specimenTypeDesignationClone.getTypeSpecimen());
866
		assertSame("The status of the specimen type designation needs to be the same", specimenTypeDesignationOriginal.getTypeStatus(), specimenTypeDesignationClone.getTypeStatus());
867
		assertEquals("The specimen type designation must have exactly 1 typified name which is 'clone'", 1, specimenTypeDesignationClone.getTypifiedNames().size());
868
		assertTrue("The specimen type designation must have 'clone' as typified name", specimenTypeDesignationClone.getTypifiedNames().contains(clone));
869
//		assertSame("The specimen type designation must have the same homotypical group as the typified name", specimenTypeDesignationClone.getHomotypicalGroup(), clone.getHomotypicalGroup());
870
		
871
		assertEquals("There should be exactly 1 name type designation", 1, genusClone.getTypeDesignations().size());
872
		assertNotSame("type designation sets should not be the same", genusName.getTypeDesignations(), genusClone.getTypeDesignations());
873
		NameTypeDesignation nameTypeDesignationClone = (NameTypeDesignation)genusClone.getTypeDesignations().iterator().next();
874
		assertNotSame("The name type designation should not be the same", nameTypeDesignationOriginal, nameTypeDesignationClone);
875
		assertSame("The nyme type of the name type designation needs to be the same", taxonNameBase1, nameTypeDesignationClone.getTypeName());
876
		assertSame("The status of the name type designation needs to be the same", nameTypeDesignationOriginal.getTypeStatus(), nameTypeDesignationClone.getTypeStatus());
877
		assertEquals("The name type designation must have exactly 1 typified name which is 'genusClone'", 1, nameTypeDesignationClone.getTypifiedNames().size());
878
		assertTrue("The name type designation must have 'genusClone' as typified name", nameTypeDesignationClone.getTypifiedNames().contains(genusClone));
879
//		assertSame("The name type designation must have the same homotypical group as the typified name", nameTypeDesignationClone.getHomotypicalGroup(), genusClone.getHomotypicalGroup());
880
		
881
		//status
882
		assertEquals("There should be exactly 1 status", 1, clone.getStatus().size());
883
		assertNotSame("Status sets should not be the same", taxonNameBase1.getStatus(), clone.getStatus());
884
		NomenclaturalStatus cloneStatus = (NomenclaturalStatus)clone.getStatus().iterator().next();
885
		assertSame("The type of the nomStatus needs to be the same", nomStatus.getType(), cloneStatus.getType());
886
		assertSame("The citation of the nomStatus needs to be the same", nomStatus.getCitation(), cloneStatus.getCitation());
887
		assertSame("The rule considered of the nomStatus needs to be the same", nomStatus.getRuleConsidered(), cloneStatus.getRuleConsidered());
888
		//DISCUSS: do we want to reuse the status
889
//		assertSame("The nomStatus needs to be the same", nomStatus, cloneStatus);
890
		
891
		
892
//		//hybrid parents of clone 
893
//		assertEquals("There should be exactly 2 hybrid relationships in which the clone takes the child role", 2, clone.getChildRelationships().size());
894
//		Set<NonViralName> parentSet = new HashSet<NonViralName>();
895
//		Set<NonViralName> childSet = new HashSet<NonViralName>();
896
//		for (Object object : clone.getChildRelationships()){
897
//			HybridRelationship childRelation = (HybridRelationship)object;
898
//			NonViralName relatedFrom = childRelation.getRelatedFrom();
899
//			parentSet.add(relatedFrom);
900
//			NonViralName relatedTo = childRelation.getRelatedTo();
901
//			childSet.add(relatedTo);
902
//		}
903
//		assertTrue("Parent set should contain parent1", parentSet.contains(parent));
904
//		assertTrue("Parent set should contain parent2", parentSet.contains(parent2));
905
//		assertTrue("Child set should contain clone", childSet.contains(clone));
906
		
907
		//basionym of clone
908
		assertEquals("There should be exactly 1 relationship in which the clone takes the to role", 1, clone.getRelationsToThisName().size());
909
		NameRelationship nameRelation = (NameRelationship)clone.getRelationsToThisName().iterator().next();
910
		assertSame("Basionym should be from-object in relationship", basionym, nameRelation.getRelatedFrom());
911
		assertSame("Clone should be to-object in relationship", clone, nameRelation.getRelatedTo());
912
		assertSame("Relationship type should be cloned correctly", NameRelationshipType.BASIONYM(), nameRelation.getType());
913
//		assertEquals("Rule should be cloned correctly", "later homonym rule", nameRelation.getRuleConsidered());
914

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