Project

General

Profile

Download (36 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 java.util.HashSet;
13
import java.util.Map;
14
import java.util.Set;
15

    
16
import static org.junit.Assert.*;
17

    
18
import org.apache.log4j.Logger;
19
import org.junit.Before;
20
import org.junit.BeforeClass;
21
import org.junit.Test;
22

    
23
import eu.etaxonomy.cdm.model.agent.Team;
24
import eu.etaxonomy.cdm.model.common.DefaultTermInitializer;
25
import eu.etaxonomy.cdm.model.common.Language;
26
import eu.etaxonomy.cdm.model.description.Feature;
27
import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
28
import eu.etaxonomy.cdm.model.description.TextData;
29
import eu.etaxonomy.cdm.model.media.Media;
30
import eu.etaxonomy.cdm.model.occurrence.Specimen;
31
import eu.etaxonomy.cdm.model.reference.IArticle;
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
import eu.etaxonomy.cdm.strategy.cache.reference.ReferenceBaseDefaultCacheStrategy;
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
		ReferenceFactory refFactory = ReferenceFactory.newInstance();
342
		INomenclaturalReference nr = (INomenclaturalReference) nameBase1.getNomenclaturalReference();
343
		assertNull("Nomenclatural Reference shall be null", nr);
344
		nameBase1.setNomenclaturalReference(refFactory.newGeneric());
345
		nr = (INomenclaturalReference) nameBase1.getNomenclaturalReference();
346
		assertNotNull("Nomenclatural Reference shall not be null", nr);
347
	}
348

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
783
	/**
784
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonNameBase#getNomeclaturalCode()}.
785
	 */
786
	@Test
787
	public void testGetNomeclaturalCode() {
788
		//is abstract
789
	}
790
	
791
	
792
	//descriptions, fullTitleCache, homotypicalGroup,
793

    
794
	//no changes to: appendedPharse, nomenclaturalReference, 
795
	//nomenclaturalMicroReference, parsingProblem, problemEnds, problemStarts
796
	//protectedFullTitleCache
797
	
798
	@Test
799
	public void testClone(){
800
		NonViralName taxonNameBase1 = NonViralName.NewInstance(Rank.SPECIES());
801
		NonViralName genusName = NonViralName.NewInstance(Rank.GENUS());
802
		Taxon taxonBase = Taxon.NewInstance(taxonNameBase1, null);
803
		
804
		//basionym & homonym
805
		NonViralName basionym = NonViralName.NewInstance(Rank.SPECIES());
806
		NonViralName earlierHomonym = NonViralName.NewInstance(Rank.SPECIES());
807
		taxonNameBase1.addBasionym(basionym);
808
		taxonNameBase1.addRelationshipToName(earlierHomonym, NameRelationshipType.LATER_HOMONYM(), "later homonym rule");
809
		//status
810
		Reference statusReference = ReferenceFactory.newArticle();
811
		NomenclaturalStatus nomStatus = NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONSERVED(), statusReference, "55");
812
		taxonNameBase1.addStatus(nomStatus);
813
		//typeDesignation
814
		Specimen typeSpecimen = Specimen.NewInstance();
815
		Reference specimenTypeCitation = ReferenceFactory.newArticle();
816
		Reference nameTypeCitation = ReferenceFactory.newArticle();
817
		SpecimenTypeDesignation specimenTypeDesignationOriginal = taxonNameBase1.addSpecimenTypeDesignation(typeSpecimen, SpecimenTypeDesignationStatus.HOLOTYPE(), specimenTypeCitation, null, null, false, false);
818
		NameTypeDesignation nameTypeDesignationOriginal = genusName.addNameTypeDesignation(taxonNameBase1, nameTypeCitation, null, null, NameTypeDesignationStatus.LECTOTYPE(), true, false, false, false);
819

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

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