Project

General

Profile

Download (38.2 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

    
10
package eu.etaxonomy.cdm.model.name;
11

    
12
import static org.junit.Assert.assertEquals;
13
import static org.junit.Assert.assertFalse;
14
import static org.junit.Assert.assertNotNull;
15
import static org.junit.Assert.assertNotSame;
16
import static org.junit.Assert.assertNull;
17
import static org.junit.Assert.assertSame;
18
import static org.junit.Assert.assertTrue;
19

    
20
import 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 TaxonNameTest {
43
	private static final Logger logger = Logger.getLogger(TaxonNameTest.class);
44

    
45
	private TaxonNameTestClass nameBase1;
46
	private TaxonNameTestClass 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 TaxonNameTestClass(null,null);
60
		nameBase2 = new TaxonNameTestClass(Rank.GENUS(), null);
61
	}
62

    
63

    
64
	private class TaxonNameTestClass extends TaxonName{
65
		public TaxonNameTestClass(Rank rank, HomotypicalGroup hg){super(null, rank, hg);}
66
		@Override
67
		public void setCacheStrategy(INameCacheStrategy strategy){}
68
		@Override
69
		public INameCacheStrategy getCacheStrategy(){return null;}
70
		@Override
71
		public NomenclaturalCode getNomenclaturalCode(){return null;}
72
		@Override
73
		public String generateFullTitle(){return null;}
74
		@Override
75
		public String generateTitle() {
76
			return null;
77
		}
78

    
79
	}
80

    
81

    
82
/** *************************  TESTS ******************************************************/
83

    
84

    
85
	@Test
86
	public void testGenerateFullTitle() {
87
		//abstract
88
	}
89

    
90
	/**
91
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#TaxonName()}.
92
	 */
93
	@Test
94
	public void testTaxonName() {
95
		assertNotNull(nameBase1);
96
	}
97

    
98
	/**
99
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#TaxonName(eu.etaxonomy.cdm.model.name.Rank)}.
100
	 */
101
	@Test
102
	public void testTaxonNameRank() {
103
		assertNotNull(nameBase2);
104
		assertEquals(Rank.GENUS(), nameBase2.getRank());
105
		Rank rank = null;
106
		TaxonName testName = new TaxonNameTestClass(rank, null);
107
		assertNull(testName.getRank());
108
	}
109

    
110
	@Test
111
	public void testTaxonNameHomotypicalGroup() {
112
		HomotypicalGroup hg = HomotypicalGroup.NewInstance();
113
		TaxonName testHG = new TaxonNameTestClass(null, hg);
114
		assertSame(hg, testHG.getHomotypicalGroup());
115
		HomotypicalGroup hgNull = null;
116
		TaxonName testHGNull = new TaxonNameTestClass(null, hgNull);
117
		assertNotNull(testHGNull.getHomotypicalGroup());
118
	}
119

    
120
	/**
121
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#TaxonName(eu.etaxonomy.cdm.model.name.Rank, eu.etaxonomy.cdm.model.name.HomotypicalGroup)}.
122
	 */
123
	@Test
124
	public void testTaxonNameRankHomotypicalGroup() {
125
		Rank rank = Rank.SPECIES();
126
		HomotypicalGroup hg = HomotypicalGroup.NewInstance();
127
		TaxonName testHG = new TaxonNameTestClass(rank, hg);
128
		assertSame(rank, testHG.getRank());
129
		assertSame(hg, testHG.getHomotypicalGroup());
130

    
131
		Rank rankNull = null;
132
		HomotypicalGroup hgNull = null;
133
		TaxonName testHGNull = new TaxonNameTestClass(rankNull, hgNull);
134
		assertEquals(rankNull, testHGNull.getRank());
135
		assertNotNull(testHGNull.getHomotypicalGroup());
136
	}
137

    
138
	/**
139
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#isCodeCompliant()}.
140
	 */
141
	@Test
142
	public void testIsCodeCompliant() {
143
		//is abstract
144
	}
145

    
146
	/**
147
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#getNameRelations()}.
148
	 */
149
	@Test
150
	public void testGetNameRelations() {
151
		logger.warn("not yet implemented");
152
	}
153

    
154
	/**
155
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#addRelationshipToName(eu.etaxonomy.cdm.model.name.TaxonName, eu.etaxonomy.cdm.model.name.NameRelationshipType, java.lang.String)}.
156
	 */
157
	@Test
158
	public void testAddRelationshipToName() {
159
		logger.warn("not yet implemented");
160
	}
161

    
162
	/**
163
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#addRelationshipFromName(eu.etaxonomy.cdm.model.name.TaxonName, eu.etaxonomy.cdm.model.name.NameRelationshipType, java.lang.String)}.
164
	 */
165
	@Test
166
	public void testAddRelationshipFromName() {
167
		logger.warn("not yet implemented");
168
	}
169

    
170
	/**
171
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#addNameRelationship(eu.etaxonomy.cdm.model.name.NameRelationship)}.
172
	 */
173
	@Test
174
	public void testAddNameRelationship() {
175
		logger.warn("not yet implemented");
176
	}
177

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

    
186
	/**
187
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#addRelationship(eu.etaxonomy.cdm.model.common.RelationshipBase)}.
188
	 */
189
	@Test
190
	public void testAddRelationship() {
191
		logger.warn("not yet implemented");
192
	}
193

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

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

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

    
240

    
241
	}
242

    
243
	/**
244
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#isOriginalCombination()}.
245
	 */
246
	@Test
247
	public void testIsOriginalCombination() {
248
		logger.warn("not yet implemented");
249
	}
250

    
251
	/**
252
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#getBasionym()}.
253
	 */
254
	@Test
255
	public void testGetBasionym() {
256
		TaxonName name1 = TaxonNameFactory.NewBotanicalInstance(null);
257
		TaxonName basionym1 = TaxonNameFactory.NewBotanicalInstance(null);
258
		TaxonName basionym2 = TaxonNameFactory.NewBotanicalInstance(null);
259

    
260
		assertEquals(null, name1.getBasionym());
261
		name1.addBasionym(basionym1);
262
		assertEquals(basionym1, name1.getBasionym());
263
		name1.addBasionym(basionym2);
264
		TaxonName oneOfThebasionyms = name1.getBasionym();
265
		assertTrue(oneOfThebasionyms == basionym1 || oneOfThebasionyms == basionym2 );
266
		name1.removeBasionyms();
267
		assertEquals(null, name1.getBasionym());
268
	}
269

    
270
	/**
271
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#addBasionym(eu.etaxonomy.cdm.model.name.TaxonName)}.
272
	 */
273
	@Test
274
	public void testAddBasionymT() {
275
		assertNotSame(nameBase1.getHomotypicalGroup(), nameBase2.getHomotypicalGroup());
276
		assertFalse(nameBase1.getHomotypicalGroup().equals(nameBase2.getHomotypicalGroup()));
277
		nameBase1.addBasionym(nameBase2);
278
		assertTrue(nameBase1.getHomotypicalGroup().equals(nameBase2.getHomotypicalGroup()));
279
		assertSame(nameBase1.getHomotypicalGroup(), nameBase2.getHomotypicalGroup());
280
		logger.warn("not yet fully implemented");
281
	}
282

    
283
	/**
284
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#addBasionym(eu.etaxonomy.cdm.model.name.TaxonName, java.lang.String)}.
285
	 */
286
	@Test
287
	public void testAddBasionymTString() {
288
		logger.warn("not yet implemented");
289
	}
290

    
291

    
292
	/**
293
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#getCacheStrategy()}.
294
	 */
295
	@Test
296
	public void testGetCacheStrategy() {
297
		//is abstract
298
	}
299

    
300
	/**
301
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#setCacheStrategy(eu.etaxonomy.cdm.strategy.cache.name.INameCacheStrategy)}.
302
	 */
303
	@Test
304
	public void testSetCacheStrategy() {
305
		logger.warn("not yet implemented");
306
	}
307

    
308
	/**
309
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#getRank()}.
310
	 */
311
	@Test
312
	public void testGetRank() {
313
		TaxonName name1 = TaxonNameFactory.NewBotanicalInstance(null);
314
		assertNull("Rank shall be null", name1.getRank());
315
		name1.setRank(Rank.SPECIES());
316
		assertNotNull("Rank shall not be null", name1.getRank());
317
		name1.setRank(null);
318
		assertNull("Rank shall be null", name1.getRank());
319

    
320
	}
321

    
322
	/**
323
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#getNomenclaturalReference()}.
324
	 */
325
	@Test
326
	public void testGetSetNomenclaturalReference() {
327
		INomenclaturalReference nr = nameBase1.getNomenclaturalReference();
328
		assertNull("Nomenclatural Reference shall be null", nr);
329
		nameBase1.setNomenclaturalReference(ReferenceFactory.newGeneric());
330
		nr = nameBase1.getNomenclaturalReference();
331
		assertNotNull("Nomenclatural Reference shall not be null", nr);
332
	}
333

    
334
	/**
335
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#getAppendedPhrase()}.
336
	 */
337
	@Test
338
	public void testGetAppendedPhrase() {
339
		TaxonName name1 = TaxonNameFactory.NewBotanicalInstance(null);
340
		String appPhrase = "appPhrase";
341
		assertNull(name1.getAppendedPhrase());
342
		name1.setAppendedPhrase(appPhrase);
343
		assertSame(appPhrase, name1.getAppendedPhrase());
344
		name1.setAppendedPhrase(null);
345
		assertNull(name1.getAppendedPhrase());
346
	}
347

    
348
	/**
349
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#getNomenclaturalMicroReference()}.
350
	 */
351
	@Test
352
	public void testGetSetNomenclaturalMicroReference() {
353
		TaxonName name1 = TaxonNameFactory.NewBotanicalInstance(null);
354
		String microRef = "micro";
355
		assertNull(name1.getNomenclaturalMicroReference());
356
		name1.setNomenclaturalMicroReference(microRef);
357
		assertSame(microRef, name1.getNomenclaturalMicroReference());
358
		name1.setNomenclaturalMicroReference(null);
359
		assertNull(name1.getNomenclaturalMicroReference());
360
	}
361

    
362
	/**
363
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#getHasProblem()}.
364
	 */
365
	@Test
366
	public void testGetSetHasProblem() {
367
		TaxonName name1 = TaxonNameFactory.NewBotanicalInstance(null);
368
		name1.setParsingProblem(0);
369
		assertFalse(name1.hasProblem());
370
		name1.setParsingProblem(1);
371
		assertTrue(name1.hasProblem());
372
		name1.setParsingProblem(0);
373
		assertFalse(name1.getParsingProblem()!=0);
374
	}
375

    
376
	/**
377
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#getNameTypeDesignations()}.
378
	 */
379
	@Test
380
	public void testGetNameTypeDesignations() {
381
		logger.warn("not yet implemented");
382
	}
383

    
384
	/**
385
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#setNameTypeDesignations(java.util.Set)}.
386
	 */
387
	@Test
388
	public void testSetNameTypeDesignations() {
389
		logger.warn("not yet implemented");
390
	}
391

    
392
	/**
393
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#addNameTypeDesignation(eu.etaxonomy.cdm.model.name.TaxonName, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String, java.lang.String, boolean, boolean)}.
394
	 */
395
	@Test
396
	public void testAddNameTypeDesignation() {
397
		logger.warn("not yet implemented");
398
	}
399

    
400
	/**
401
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#removeNameTypeDesignation(eu.etaxonomy.cdm.model.name.NameTypeDesignation)}.
402
	 */
403
	@Test
404
	public void testRemoveNameTypeDesignation() {
405
		logger.warn("not yet implemented");
406
	}
407

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

    
416
	/**
417
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#setSpecimenTypeDesignations(java.util.Set)}.
418
	 */
419
	@Test
420
	public void testSetSpecimenTypeDesignations() {
421
		logger.warn("not yet implemented");
422
	}
423

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

    
432
	/**
433
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#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)}.
434
	 */
435
	@Test
436
	public void testAddSpecimenTypeDesignationSpecimenTypeDesignationStatusReferenceBaseStringStringBoolean() {
437
		logger.warn("not yet implemented");
438
	}
439

    
440
	/**
441
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#addSpecimenTypeDesignation(eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation)}.
442
	 */
443
	@Test
444
	public void testAddSpecimenTypeDesignationSpecimenTypeDesignation() {
445
		logger.warn("not yet implemented");
446
	}
447

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

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

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

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

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

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

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

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

    
518

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

    
530
	/**
531
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#getTaxa()}.
532
	 */
533
	@Test
534
	public void testGetTaxa() {
535
		logger.warn("not yet implemented");
536
	}
537

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

    
546
	@Test
547
	public void testMergeHomotypicGroups() {
548
		TaxonName name1 = TaxonNameFactory.NewBotanicalInstance(null);
549
		TaxonName name2 = TaxonNameFactory.NewBotanicalInstance(null);
550
		TaxonName name3 = TaxonNameFactory.NewBotanicalInstance(null);
551
		TaxonName name4 = TaxonNameFactory.NewBotanicalInstance(null);
552

    
553
		assertFalse(name1.getHomotypicalGroup().equals(name2.getHomotypicalGroup()));
554
		int numberOfTypifiedNames = name1.getHomotypicalGroup().getTypifiedNames().size();
555
		assertEquals(1, numberOfTypifiedNames);
556

    
557
		name1.mergeHomotypicGroups(name2);
558
		assertEquals(name1.getHomotypicalGroup(), name2.getHomotypicalGroup());
559
		assertSame(name1.getHomotypicalGroup(), name2.getHomotypicalGroup());
560
		numberOfTypifiedNames = name1.getHomotypicalGroup().getTypifiedNames().size();
561
		assertEquals(2, numberOfTypifiedNames);
562
		numberOfTypifiedNames = name2.getHomotypicalGroup().getTypifiedNames().size();
563
		assertEquals(2, numberOfTypifiedNames);
564
		assertTrue(name1.getHomotypicalGroup().getTypifiedNames().contains(name2));
565
		assertTrue(name2.getHomotypicalGroup().getTypifiedNames().contains(name1));
566

    
567
		name3.mergeHomotypicGroups(name2);
568
		assertEquals(name1.getHomotypicalGroup(), name3.getHomotypicalGroup());
569
		assertSame(name1.getHomotypicalGroup(), name3.getHomotypicalGroup());
570
		numberOfTypifiedNames = name1.getHomotypicalGroup().getTypifiedNames().size();
571
		assertEquals(3, numberOfTypifiedNames);
572
		numberOfTypifiedNames = name2.getHomotypicalGroup().getTypifiedNames().size();
573
		assertEquals(3, numberOfTypifiedNames);
574
		numberOfTypifiedNames = name3.getHomotypicalGroup().getTypifiedNames().size();
575
		assertEquals(3, numberOfTypifiedNames);
576
		assertTrue(name1.getHomotypicalGroup().getTypifiedNames().contains(name2));
577
		assertTrue(name2.getHomotypicalGroup().getTypifiedNames().contains(name1));
578
		assertTrue(name1.getHomotypicalGroup().getTypifiedNames().contains(name3));
579
		assertTrue(name3.getHomotypicalGroup().getTypifiedNames().contains(name1));
580
		assertTrue(name2.getHomotypicalGroup().getTypifiedNames().contains(name3));
581
		assertTrue(name3.getHomotypicalGroup().getTypifiedNames().contains(name2));
582

    
583

    
584
	}
585

    
586

    
587
	@Test
588
	public void testIsBasionymFor() {
589
		TaxonName name1 = TaxonNameFactory.NewBotanicalInstance(null);
590
		TaxonName name2 = TaxonNameFactory.NewBotanicalInstance(null);
591
		TaxonName name3 = TaxonNameFactory.NewBotanicalInstance(null);
592
		TaxonName name4 = TaxonNameFactory.NewBotanicalInstance(null);
593

    
594
		assertFalse(name2.isBasionymFor(name1));
595
		assertFalse(name1.isBasionymFor(name2));
596
		name1.addBasionym(name2);
597
		assertTrue(name2.isBasionymFor(name1));
598
		assertFalse(name1.isBasionymFor(name2));
599
	}
600

    
601
	/**
602
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#isHomotypic(eu.etaxonomy.cdm.model.name.TaxonName)}.
603
	 */
604
	@Test
605
	public void testIsHomotypic() {
606
		TaxonName name1 = TaxonNameFactory.NewBotanicalInstance(null);
607
		TaxonName name2 = TaxonNameFactory.NewBotanicalInstance(null);
608
		TaxonName name3 = TaxonNameFactory.NewBotanicalInstance(null);
609
		TaxonName name4 = TaxonNameFactory.NewBotanicalInstance(null);
610
		name1.mergeHomotypicGroups(name2);
611
		name2.mergeHomotypicGroups(name4);
612

    
613
		assertTrue(name1.isHomotypic(name4));
614
		assertTrue(name4.isHomotypic(name1));
615
		assertFalse(name1.isHomotypic(name3));
616
		assertFalse(name3.isHomotypic(name1));
617
		assertTrue(name2.isHomotypic(name1));
618

    
619
	}
620

    
621
	@Test
622
	public void testMakeGroupsBasionym(){
623
		TaxonName name1 = TaxonNameFactory.NewBotanicalInstance(null);
624
		TaxonName name2 = TaxonNameFactory.NewBotanicalInstance(null);
625
		TaxonName name3 = TaxonNameFactory.NewBotanicalInstance(null);
626
		TaxonName name4 = TaxonNameFactory.NewBotanicalInstance(null);
627

    
628
		name1.mergeHomotypicGroups(name2);
629
		name1.mergeHomotypicGroups(name3);
630
		name2.mergeHomotypicGroups(name4);
631

    
632
		name1.makeGroupsBasionym();
633

    
634
		assertEquals(1, name2.getBasionyms().size());
635
		assertEquals(1, name3.getBasionyms().size());
636
		assertEquals(1, name4.getBasionyms().size());
637
		assertEquals(name1, name4.getBasionym());
638

    
639
	}
640

    
641
	@Test
642
	public void testIsGroupsBasionym(){
643
		TaxonName name1 = TaxonNameFactory.NewBotanicalInstance(null);
644
		TaxonName name2 = TaxonNameFactory.NewBotanicalInstance(null);
645
		TaxonName name3 = TaxonNameFactory.NewBotanicalInstance(null);
646
		TaxonName name4 = TaxonNameFactory.NewBotanicalInstance(null);
647

    
648
		assertFalse(name1.isGroupsBasionym());
649

    
650
		name1.mergeHomotypicGroups(name2);
651
		name2.mergeHomotypicGroups(name4);
652

    
653
		name1.makeGroupsBasionym();
654

    
655
		assertTrue(name1.isGroupsBasionym());
656
		assertFalse(name2.isGroupsBasionym());
657
		name1.mergeHomotypicGroups(name3);
658
		assertFalse(name1.isGroupsBasionym());
659
	}
660

    
661

    
662

    
663
	@Test
664
	public void testRemoveBasionyms(){
665
		TaxonName name1 = TaxonNameFactory.NewBotanicalInstance(null);
666
		TaxonName basionym = TaxonNameFactory.NewBotanicalInstance(null);
667
		TaxonName name3 = TaxonNameFactory.NewBotanicalInstance(null);
668

    
669
		name1.addBasionym(basionym);
670
		assertEquals(1, name1.getBasionyms().size());
671
		name1.addBasionym(name3);
672
		assertEquals(2, name1.getBasionyms().size());
673
		name1.removeBasionyms();
674
		assertEquals(0, name1.getBasionyms().size());
675
	}
676

    
677
	/**
678
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#isSupraGeneric()}.
679
	 */
680
	@Test
681
	public void testIsSupraGeneric() {
682
		nameBase1.setRank(Rank.FAMILY());
683
		assertTrue(nameBase1.isSupraGeneric());
684
		nameBase1.setRank(Rank.GENUS());
685
		assertFalse(nameBase1.isSupraGeneric());
686
		nameBase1.setRank(Rank.FORM());
687
		assertFalse(nameBase1.isSupraGeneric());
688
		nameBase1.setRank(null);
689
		assertFalse(nameBase1.isSupraGeneric());
690
	}
691

    
692
	@Test
693
	public void testRemoveTaxonBases(){
694

    
695
		Taxon newTaxon = Taxon.NewInstance(nameBase1, null);
696
		assertEquals(1, nameBase1.getTaxonBases().size());
697

    
698

    
699
		nameBase1.removeTaxonBase(newTaxon);
700
		assertEquals(0, nameBase1.getTaxonBases().size());
701

    
702
	}
703
	/**
704
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#isGenus()}.
705
	 */
706
	@Test
707
	public void testIsGenus() {
708
		nameBase1.setRank(Rank.FAMILY());
709
		assertFalse(nameBase1.isGenus());
710
		nameBase1.setRank(Rank.GENUS());
711
		assertTrue(nameBase1.isGenus());
712
		nameBase1.setRank(Rank.FORM());
713
		assertFalse(nameBase1.isGenus());
714
		nameBase1.setRank(null);
715
		assertFalse(nameBase1.isGenus());
716
	}
717

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

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

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

    
779
	/**
780
	 * Test method for {@link eu.etaxonomy.cdm.model.name.TaxonName#getNomenclaturalCode()}.
781
	 */
782
	@Test
783
	public void testGetNomenclaturalCode() {
784
		//is abstract
785
	}
786

    
787

    
788
	//descriptions, fullTitleCache, homotypicalGroup,
789

    
790
	//no changes to: appendedPharse, nomenclaturalReference,
791
	//nomenclaturalMicroReference, parsingProblem, problemEnds, problemStarts
792
	//protectedFullTitleCache
793

    
794
	@Test
795
	public void testClone(){
796
	    TaxonName taxonName1 = TaxonNameFactory.NewNonViralInstance(Rank.SPECIES());
797
	    TaxonName genusName = TaxonNameFactory.NewNonViralInstance(Rank.GENUS());
798
        Taxon.NewInstance(taxonName1, null);
799

    
800
		//basionym & homonym
801
		TaxonName basionym = TaxonNameFactory.NewNonViralInstance(Rank.SPECIES());
802
		TaxonName earlierHomonym = TaxonNameFactory.NewNonViralInstance(Rank.SPECIES());
803
		taxonName1.addBasionym(basionym);
804
		taxonName1.addRelationshipToName(earlierHomonym, NameRelationshipType.LATER_HOMONYM(), "later homonym rule");
805
		//status
806
		Reference statusReference = ReferenceFactory.newArticle();
807
		NomenclaturalStatus nomStatus = NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONSERVED(), statusReference, "55");
808
		taxonName1.addStatus(nomStatus);
809
		//typeDesignation
810
		DerivedUnit typeSpecimen = DerivedUnit.NewPreservedSpecimenInstance();
811
		Reference specimenTypeCitation = ReferenceFactory.newArticle();
812
		Reference nameTypeCitation = ReferenceFactory.newArticle();
813
		SpecimenTypeDesignation specimenTypeDesignationOriginal = taxonName1.addSpecimenTypeDesignation(typeSpecimen, SpecimenTypeDesignationStatus.HOLOTYPE(), specimenTypeCitation, null, null, false, false);
814
		NameTypeDesignation nameTypeDesignationOriginal = genusName.addNameTypeDesignation(taxonName1, nameTypeCitation, null, null, NameTypeDesignationStatus.LECTOTYPE(), true, false, false, false);
815

    
816
		//description
817
		TaxonNameDescription description = TaxonNameDescription.NewInstance(taxonName1);
818
		TextData textData = TextData.NewInstance(Feature.IMAGE());
819
		textData.putText(Language.DEFAULT(), "My media text data");
820
		Media media = Media.NewInstance();
821
		textData.addMedia(media);
822
		description.addElement(textData);
823

    
824
		//CLONE
825
		TaxonName clone = (TaxonName)taxonName1.clone();
826
		TaxonName genusClone = (TaxonName)genusName.clone();
827
		assertSame("Rank should be same", taxonName1.getRank(), clone.getRank());
828
		assertTrue("TaxonBases should not be cloned", clone.getTaxonBases().isEmpty());
829
		assertEquals("TaxonBases of original name should not be empty", 1, taxonName1.getTaxonBases().size());
830
		//Homotypical group - CAUTION: behaviour may be changed in future
831
		//TODO still needs to be discussed
832
//		assertSame("The clone must have the same homotypical group as the original", taxonName1.getHomotypicalGroup(), clone.getHomotypicalGroup());
833
//		assertSame("The genusClone must have the same homotypical group as the original genus", genusName.getHomotypicalGroup(), genusClone.getHomotypicalGroup());
834

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

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

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

    
867
		//status
868
		assertEquals("There should be exactly 1 status", 1, clone.getStatus().size());
869
		assertNotSame("Status sets should not be the same", taxonName1.getStatus(), clone.getStatus());
870
		NomenclaturalStatus cloneStatus = clone.getStatus().iterator().next();
871
		assertSame("The type of the nomStatus needs to be the same", nomStatus.getType(), cloneStatus.getType());
872
		assertSame("The citation of the nomStatus needs to be the same", nomStatus.getCitation(), cloneStatus.getCitation());
873
		assertSame("The rule considered of the nomStatus needs to be the same", nomStatus.getRuleConsidered(), cloneStatus.getRuleConsidered());
874
		//DISCUSS: do we want to reuse the status
875
//		assertSame("The nomStatus needs to be the same", nomStatus, cloneStatus);
876

    
877

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

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

    
901

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

    
911

    
912
   /*
913
    * Moved from IdentifiableEntityTest to here due to #922
914
    */
915
   @Test
916
   public void testCompareTo() {
917
       TaxonName abies = TaxonNameFactory.NewNonViralInstance(Rank.GENUS(), null);
918
       abies.setNameCache("Abies");
919
       abies.setTitleCache("Abies", true);
920

    
921
       TaxonName abiesMill = TaxonNameFactory.NewNonViralInstance(Rank.GENUS(), null);
922
       abiesMill.setNameCache("Abies");
923
       abiesMill.setTitleCache("Abies Mill.", true);
924

    
925
       TaxonName abiesAlba = TaxonNameFactory.NewNonViralInstance(Rank.SPECIES(), null);
926
       abiesAlba.setNameCache("Abies alba");
927
       abiesAlba.setTitleCache("Abies alba", true);
928

    
929
       TaxonName abiesAlbaMichx = TaxonNameFactory.NewNonViralInstance(Rank.SPECIES(), null);
930
       abiesAlbaMichx.setNameCache("Abies alba");
931
       abiesAlbaMichx.setTitleCache("Abies alba Michx.", true);
932

    
933
       TaxonName abiesAutonym  = TaxonNameFactory.NewNonViralInstance(Rank.SECTION_BOTANY());
934
       abiesAutonym.setGenusOrUninomial("Abies");
935
       abiesAutonym.setInfraGenericEpithet("Abies");
936

    
937
       abiesAutonym.setTitleCache("Abies Mill. sect. Abies", true);
938
       abiesAutonym.getNameCache();
939

    
940
       TaxonName abiesBalsamea  = TaxonNameFactory.NewNonViralInstance(Rank.SECTION_BOTANY());
941
       abiesBalsamea.setGenusOrUninomial("Abies");
942
       abiesBalsamea.setInfraGenericEpithet("Balsamea");
943
       abiesBalsamea.getNameCache();
944
       abiesBalsamea.setTitleCache("Abies sect. Balsamea L.", true);
945

    
946
       TaxonName abiesAlbaxPinusBeta = TaxonNameFactory.NewNonViralInstance(Rank.SPECIES());
947
       abiesAlbaxPinusBeta.setHybridFormula(true);
948
       abiesAlbaxPinusBeta.addHybridParent(abiesAlba, HybridRelationshipType.FIRST_PARENT(), null);
949

    
950
       int result = 0;
951

    
952
       // "Abies" < "Abies Mill."
953
       result = abies.compareToName(abiesMill);
954
       assertTrue(result < 0);
955

    
956
       // "Abies Mill." > "Abies"
957
       result = abiesMill.compareToName(abies);
958
       assertTrue(result > 0);
959

    
960
       // "Abies" < "Abies alba"
961
       result = abies.compareToName(abiesAlba);
962
       assertTrue(result < 0);
963

    
964
       // "Abies alba" > "Abies"
965
       result = abiesAlba.compareToName(abies);
966
       assertTrue(result > 0);
967

    
968
       // "Abies Mill." < "Abies alba Michx."
969
       result = abiesMill.compareToName(abiesAlbaMichx);
970
       assertTrue(result < 0);
971

    
972
       // "Abies alba Michx." > "Abies Mill."
973
       result = abiesAlbaMichx.compareToName(abiesMill);
974
       assertTrue(result > 0);
975

    
976
       //Autonym should be sorted without the author string
977

    
978
       result = abiesAutonym.compareToName(abiesBalsamea);
979
       assertTrue(result < 0);
980
       // Test consistency of compareTo() with equals():
981
       // Is consistent if and only if for every e1 and e2 of class C
982
       // e1.compareTo(e2) == 0 has the same boolean value as e1.equals(e2)
983

    
984
       boolean compareResult = false;
985
       boolean equalsResult = false;
986

    
987
       compareResult = (abies.compareToName(abies) == 0);
988
       equalsResult = abies.equals(abies);
989
       assertEquals(compareResult, equalsResult);
990

    
991
       compareResult = (abies.compareToName(abiesAlba) == 0);
992
       equalsResult = abies.equals(abiesAlba);
993
       assertEquals(compareResult, equalsResult);
994

    
995
       compareResult = (abiesMill.compareToName(abies) == 0);
996
       equalsResult = abiesMill.equals(abies);
997
       assertEquals(compareResult, equalsResult);
998

    
999
       //Abies alba x Pinus beta < Abies alba xinus
1000
       TaxonName abiesAlbaXinus = TaxonNameFactory.NewBotanicalInstance(Rank.SUBSPECIES());
1001
       abiesAlbaXinus.setGenusOrUninomial("Abies");
1002
       abiesAlbaXinus.setSpecificEpithet("alba");
1003
       abiesAlbaXinus.setInfraSpecificEpithet("xinus");
1004
       result = abiesAlbaxPinusBeta.compareToName(abiesAlbaXinus);
1005
       assertTrue(result < 0);
1006
   }
1007

    
1008
}
(11-11/13)