2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.model
.name
;
12 import static org
.junit
.Assert
.assertEquals
;
13 import static org
.junit
.Assert
.assertNotNull
;
15 import java
.util
.HashSet
;
18 import org
.junit
.Assert
;
20 import org
.apache
.log4j
.Logger
;
21 import org
.junit
.After
;
22 import org
.junit
.Before
;
23 import org
.junit
.BeforeClass
;
24 import org
.junit
.Test
;
26 import eu
.etaxonomy
.cdm
.model
.agent
.Team
;
27 import eu
.etaxonomy
.cdm
.model
.common
.DefaultTermInitializer
;
28 import eu
.etaxonomy
.cdm
.model
.reference
.IGeneric
;
29 import eu
.etaxonomy
.cdm
.model
.reference
.INomenclaturalReference
;
30 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceFactory
;
31 import eu
.etaxonomy
.cdm
.test
.unit
.EntityTestBase
;
37 public class NonViralNameTest
extends EntityTestBase
{
38 private static Logger logger
= Logger
.getLogger(NonViralNameTest
.class);
41 NonViralName
<?
> nonViralName1
;
42 NonViralName
<?
> nonViralName2
;
45 public static void setUpBeforeClass() {
46 DefaultTermInitializer vocabularyStore
= new DefaultTermInitializer();
47 vocabularyStore
.initialize();
51 * @throws java.lang.Exception
54 public void setUp() throws Exception
{
55 nonViralName1
= new BotanicalName();
56 nonViralName2
= new BotanicalName();
60 * @throws java.lang.Exception
63 public void tearDown() throws Exception
{
66 // ******************* TESTS ***********************************/
69 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#generateTitle()}.
72 public final void testGenerateTitle() {
73 String fullName
= "Abies alba subsp. beta (L.) Mill.";
74 nonViralName1
.setGenusOrUninomial("Genus");
75 nonViralName1
.setSpecificEpithet("spec");
76 nonViralName1
.setRank(Rank
.SPECIES());
77 assertEquals("Genus spec", nonViralName1
.generateTitle());
78 assertEquals("", nonViralName2
.generateTitle());
82 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#isCodeCompliant()}.
85 public final void testIsCodeCompliant() {
86 logger
.warn("Not yet implemented"); // TODO
90 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#NonViralName()}.
93 public final void testNonViralName() {
94 assertNotNull(nonViralName1
);
98 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#NonViralName(eu.etaxonomy.cdm.model.name.Rank)}.
101 public final void testNonViralNameRank() {
102 NonViralName
<?
> nonViralName
= NonViralName
.NewInstance(Rank
.GENUS());
103 assertNotNull(nonViralName
);
107 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#NonViralName(eu.etaxonomy.cdm.model.name.Rank, java.lang.String, java.lang.String, java.lang.String, eu.etaxonomy.cdm.model.agent.Agent, eu.etaxonomy.cdm.model.reference.INomenclaturalReference, java.lang.String)}.
110 public final void testNonViralNameRankStringStringStringAgentINomenclaturalReferenceString() {
111 Team agent
= Team
.NewInstance();
112 INomenclaturalReference article
= ReferenceFactory
.newArticle();
113 HomotypicalGroup homotypicalGroup
= HomotypicalGroup
.NewInstance();
114 NonViralName
<?
> nonViralName
= new NonViralName(Rank
.GENUS(), "Genus", "infraGen", "species", "infraSpec", agent
, article
, "mikro", homotypicalGroup
);
115 assertEquals("Genus", nonViralName
.getGenusOrUninomial() );
116 assertEquals("infraGen", nonViralName
.getInfraGenericEpithet());
117 assertEquals("species", nonViralName
.getSpecificEpithet() );
118 assertEquals("infraSpec", nonViralName
.getInfraSpecificEpithet());
119 assertEquals(agent
, nonViralName
.getCombinationAuthorTeam() );
120 assertEquals(article
, nonViralName
.getNomenclaturalReference() );
121 assertEquals("mikro", nonViralName
.getNomenclaturalMicroReference() );
125 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getCombinationAuthorTeam()}.
126 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#setCombinationAuthorTeam(eu.etaxonomy.cdm.model.agent.Agent)}.
129 public final void testGetSetCombinationAuthorTeam() {
130 Team team1
= Team
.NewInstance();
131 nonViralName1
.setCombinationAuthorTeam(team1
);
132 assertEquals(team1
, nonViralName1
.getCombinationAuthorTeam());
133 nonViralName1
.setCombinationAuthorTeam(null);
134 assertEquals(null, nonViralName1
.getCombinationAuthorTeam());
135 nonViralName2
.setCombinationAuthorTeam(null);
136 assertEquals(null, nonViralName2
.getCombinationAuthorTeam());
141 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getExCombinationAuthorTeam()}.
144 public final void testGetSetExCombinationAuthorTeam() {
145 Team team1
= Team
.NewInstance();
146 nonViralName1
.setExCombinationAuthorTeam(team1
);
147 assertEquals(team1
, nonViralName1
.getExCombinationAuthorTeam());
148 nonViralName1
.setExCombinationAuthorTeam(null);
149 assertEquals(null, nonViralName1
.getExCombinationAuthorTeam());
150 nonViralName2
.setExCombinationAuthorTeam(null);
151 assertEquals(null, nonViralName2
.getExCombinationAuthorTeam());
156 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getCombinationAuthorTeam()}.
157 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#setCombinationAuthorTeam(eu.etaxonomy.cdm.model.agent.Agent)}.
160 public final void testGetSetBasionymAuthorTeam() {
161 Team team1
= Team
.NewInstance();
162 nonViralName1
.setBasionymAuthorTeam(team1
);
163 assertEquals(team1
, nonViralName1
.getBasionymAuthorTeam());
164 nonViralName1
.setBasionymAuthorTeam(null);
165 assertEquals(null, nonViralName1
.getBasionymAuthorTeam());
166 nonViralName2
.setBasionymAuthorTeam(null);
167 assertEquals(null, nonViralName2
.getBasionymAuthorTeam());
172 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getExCombinationAuthorTeam()}.
175 public final void testGetSetExBasionymAuthorTeam() {
176 Team team1
= Team
.NewInstance();
177 nonViralName1
.setExBasionymAuthorTeam(team1
);
178 assertEquals(team1
, nonViralName1
.getExBasionymAuthorTeam());
179 nonViralName1
.setExBasionymAuthorTeam(null);
180 assertEquals(null, nonViralName1
.getExBasionymAuthorTeam());
181 nonViralName2
.setExBasionymAuthorTeam(null);
182 assertEquals(null, nonViralName2
.getExBasionymAuthorTeam());
187 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getGenusOrUninomial()}.
190 public final void testGetSetGenusOrUninomial() {
191 nonViralName1
.setGenusOrUninomial("Genus");
192 assertEquals("Genus", nonViralName1
.getGenusOrUninomial());
193 nonViralName1
.setGenusOrUninomial(null);
194 assertEquals(null, nonViralName1
.getGenusOrUninomial());
195 nonViralName2
.setGenusOrUninomial(null);
196 assertEquals(null, nonViralName2
.getGenusOrUninomial());
200 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getInfraGenericEpithet()}.
203 public final void testGetSetInfraGenericEpithet() {
204 nonViralName1
.setInfraGenericEpithet("InfraGenus");
205 assertEquals("InfraGenus", nonViralName1
.getInfraGenericEpithet());
206 nonViralName1
.setInfraGenericEpithet(null);
207 assertEquals(null, nonViralName1
.getInfraGenericEpithet());
208 nonViralName2
.setInfraGenericEpithet(null);
209 assertEquals(null, nonViralName2
.getInfraGenericEpithet());
213 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getSpecificEpithet()}.
216 public final void testGetSetSpecificEpithet() {
217 nonViralName1
.setSpecificEpithet("specEpi");
218 assertEquals("specEpi", nonViralName1
.getSpecificEpithet());
219 nonViralName1
.setSpecificEpithet(null);
220 assertEquals(null, nonViralName1
.getSpecificEpithet());
221 nonViralName2
.setSpecificEpithet(null);
222 assertEquals(null, nonViralName2
.getSpecificEpithet());
226 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getInfraSpecificEpithet()}.
229 public final void testGetSetInfraSpecificEpithet() {
230 nonViralName1
.setInfraSpecificEpithet("InfraSpecEpi");
231 assertEquals("InfraSpecEpi", nonViralName1
.getInfraSpecificEpithet());
232 nonViralName1
.setInfraSpecificEpithet(null);
233 assertEquals(null, nonViralName1
.getInfraSpecificEpithet());
234 nonViralName2
.setInfraSpecificEpithet(null);
235 assertEquals(null, nonViralName2
.getInfraSpecificEpithet());
239 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#setAuthorshipCache(java.lang.String)}.
240 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getAuthorshipCache()}.
245 public final void testGetSetAuthorshipCache() {
246 String strTeam1
= "Team1";
247 String strTeam2
= "Team2";
248 String strTeam3
= "Team3";
249 IGeneric ref1
= ReferenceFactory
.newGeneric();
250 ref1
.setTitleCache("RefTitle",true);
252 Team team1
= Team
.NewInstance();
253 Team team2
= Team
.NewInstance();
254 team1
.setNomenclaturalTitle(strTeam1
);
255 team2
.setNomenclaturalTitle(strTeam2
);
256 nonViralName1
.setGenusOrUninomial("Abies");
257 nonViralName1
.setSpecificEpithet("alba");
258 nonViralName1
.setNomenclaturalReference(ref1
);
259 Assert
.assertEquals("Abies alba", nonViralName1
.getNameCache());
261 nonViralName1
.setCombinationAuthorTeam(team1
);
262 assertEquals(team1
, nonViralName1
.getCombinationAuthorTeam());
263 assertEquals(strTeam1
, nonViralName1
.getAuthorshipCache());
264 Assert
.assertEquals("Abies alba "+strTeam1
, nonViralName1
.getTitleCache());
265 Assert
.assertEquals("Abies alba "+strTeam1
+ ", RefTitle", nonViralName1
.getFullTitleCache());
267 nonViralName1
.setAuthorshipCache(strTeam2
);
268 assertEquals(strTeam2
, nonViralName1
.getAuthorshipCache());
269 nonViralName1
.setGenusOrUninomial("Calendula");
270 Assert
.assertEquals("Calendula alba "+strTeam2
, nonViralName1
.getTitleCache());
272 nonViralName1
.setAuthorshipCache(strTeam3
);
273 Assert
.assertEquals("Calendula alba "+strTeam3
, nonViralName1
.getTitleCache());
275 Assert
.assertEquals("Calendula alba "+strTeam3
+ ", RefTitle", nonViralName1
.getFullTitleCache());
277 nonViralName1
.setCombinationAuthorTeam(null);
278 assertEquals(null, nonViralName1
.getCombinationAuthorTeam());
283 public final void testGetChildAndParentRelationships() {
284 NonViralName
<?
> nonViralName1
= new NonViralName();
285 assertEquals(0, nonViralName1
.getParentRelationships().size());
286 assertEquals(0, nonViralName1
.getHybridChildRelations().size());
287 BotanicalName femaleParent
= BotanicalName
.NewInstance(null);
288 HybridRelationship hybridRelationship
= new HybridRelationship(nonViralName1
, femaleParent
, HybridRelationshipType
.FEMALE_PARENT(), null );
289 assertEquals(1, nonViralName1
.getHybridChildRelations().size());
290 assertEquals(hybridRelationship
, nonViralName1
.getHybridChildRelations().iterator().next());
291 assertEquals(1, femaleParent
.getParentRelationships().size());
295 public final void testAddHybridRelationships() {
296 NonViralName
<?
> nonViralName1
= new NonViralName();
297 assertEquals(0, nonViralName1
.getParentRelationships().size());
298 assertEquals(0, nonViralName1
.getChildRelationships().size());
299 BotanicalName femaleParent
= BotanicalName
.NewInstance(null);
300 BotanicalName maleParent
= BotanicalName
.NewInstance(null);
302 nonViralName1
.addHybridParent(femaleParent
, HybridRelationshipType
.MALE_PARENT(), null);
303 nonViralName1
.addHybridParent(maleParent
, HybridRelationshipType
.MALE_PARENT(), null);
305 assertEquals(2, nonViralName1
.getHybridChildRelations().size());
306 assertEquals(0, nonViralName1
.getHybridParentRelations().size());
307 assertEquals(1, maleParent
.getHybridParentRelations().size());
308 assertEquals(1, femaleParent
.getHybridParentRelations().size());
309 assertEquals(0, maleParent
.getHybridChildRelations().size());
310 assertEquals(0, femaleParent
.getHybridChildRelations().size());
314 @Test(expected
=IllegalArgumentException
.class)
315 public final void testAddHybridRelationship() {
316 NonViralName
<?
> nonViralName1
= new NonViralName();
317 assertEquals(0, nonViralName1
.getHybridParentRelations().size());
318 assertEquals(0, nonViralName1
.getHybridChildRelations().size());
319 NonViralName
<?
> botanicalName2
= new NonViralName();
320 botanicalName2
.addHybridRelationship(null);
324 public final void testRemoveHybridRelationship() {
325 NonViralName
<?
> botanicalName1
= new NonViralName();
326 assertEquals(0, botanicalName1
.getHybridParentRelations().size());
327 assertEquals(0, botanicalName1
.getHybridChildRelations().size());
328 BotanicalName femaleParent
= BotanicalName
.NewInstance(null);
329 NonViralName
<?
> maleParent
= NonViralName
.NewInstance(null);
330 ZoologicalName child
= ZoologicalName
.NewInstance(null);
332 botanicalName1
.addHybridParent(femaleParent
, HybridRelationshipType
.FEMALE_PARENT(), null);
333 botanicalName1
.addHybridParent(maleParent
, HybridRelationshipType
.MALE_PARENT(), null);
334 botanicalName1
.addHybridChild(child
, HybridRelationshipType
.FIRST_PARENT(), null);
335 assertEquals(2, botanicalName1
.getHybridChildRelations().size());
336 assertEquals(1, botanicalName1
.getHybridParentRelations().size());
337 assertEquals(1, child
.getHybridChildRelations().size());
339 botanicalName1
.removeHybridParent(femaleParent
);
340 assertEquals(1, botanicalName1
.getHybridChildRelations().size());
341 assertEquals(1, botanicalName1
.getHybridParentRelations().size());
343 botanicalName1
.removeHybridParent(maleParent
);
344 assertEquals(0, botanicalName1
.getHybridChildRelations().size());
345 assertEquals(1, botanicalName1
.getHybridParentRelations().size());
347 botanicalName1
.removeHybridChild(child
);
348 assertEquals(0, botanicalName1
.getHybridParentRelations().size());
351 botanicalName1
.removeHybridRelationship(null);
352 assertEquals(0, botanicalName1
.getHybridChildRelations().size());
358 public void testClone(){
360 Team combinationAuthor
= Team
.NewTitledInstance("CombinationAuthor", "comb. auth.");
361 nonViralName1
.setRank(Rank
.SUBSPECIES());
362 nonViralName1
.setCombinationAuthorTeam(combinationAuthor
);
363 nonViralName1
.setGenusOrUninomial("Aus");
364 nonViralName1
.setInfraGenericEpithet("Infaus");
365 nonViralName1
.setSpecificEpithet("bus");
366 nonViralName1
.setInfraSpecificEpithet("infrabus");
367 nonViralName1
.setBinomHybrid(true);
369 NonViralName
<?
> parent
= NonViralName
.NewInstance(Rank
.SPECIES());
370 NonViralName
<?
> parent2
= NonViralName
.NewInstance(Rank
.SPECIES());
371 NonViralName
<?
> child
= NonViralName
.NewInstance(Rank
.SPECIES());
372 NonViralName
<?
> child2
= NonViralName
.NewInstance(Rank
.SPECIES());
373 nonViralName1
.addHybridParent(parent
, HybridRelationshipType
.FIRST_PARENT(), "parent rule");
374 nonViralName1
.addHybridParent(parent2
, HybridRelationshipType
.SECOND_PARENT(), "parent rule2");
375 nonViralName1
.addHybridChild(child
, HybridRelationshipType
.FEMALE_PARENT(), "child rule");
378 NonViralName
<?
> clone
= (NonViralName
)nonViralName1
.clone();
379 Assert
.assertEquals("Genus should be equal", "Aus", clone
.getGenusOrUninomial());
380 Assert
.assertEquals("Infragenus should be equal", "Infaus", clone
.getInfraGenericEpithet());
381 Assert
.assertEquals("Specific epithet should be equal", "bus", clone
.getSpecificEpithet());
382 Assert
.assertEquals("Infraspecific epithet should be equal", "infrabus", clone
.getInfraSpecificEpithet());
383 Assert
.assertEquals("BinomHybrid should be equal", true, clone
.isBinomHybrid());
384 Assert
.assertSame("Combination author should be the same", combinationAuthor
, clone
.getCombinationAuthorTeam());
385 Assert
.assertEquals("NameCache should be equal", nonViralName1
.getNameCache(), clone
.getNameCache());
386 Assert
.assertEquals("AuthorshipCache should be equal", nonViralName1
.getAuthorshipCache(), clone
.getAuthorshipCache());
388 clone
.setSpecificEpithet("sub");
389 Assert
.assertEquals("NameCache should be changed", "Aus (\u00D7Infaus) sub subsp. infrabus", clone
.getNameCache());
391 //hybrid parents of clone
392 Assert
.assertEquals("There should be exactly 2 hybrid relationships in which the clone takes the child role", 2, clone
.getChildRelationships().size());
393 Set
<NonViralName
> parentSet
= new HashSet
<NonViralName
>();
394 Set
<NonViralName
> childSet
= new HashSet
<NonViralName
>();
395 for (Object object
: clone
.getHybridChildRelations()){
396 HybridRelationship childRelation
= (HybridRelationship
)object
;
397 NonViralName
<?
> relatedFrom
= childRelation
.getRelatedFrom();
398 parentSet
.add(relatedFrom
);
399 NonViralName
<?
> relatedTo
= childRelation
.getRelatedTo();
400 childSet
.add(relatedTo
);
402 Assert
.assertTrue("Parent set should contain parent1", parentSet
.contains(parent
));
403 Assert
.assertTrue("Parent set should contain parent2", parentSet
.contains(parent2
));
404 Assert
.assertTrue("Child set should contain clone", childSet
.contains(clone
));
406 //hybrid child of clone
407 Assert
.assertEquals("There should be exactly 1 hybrid relationship in which the clone takes the parent role", 1, clone
.getParentRelationships().size());
408 HybridRelationship parentRelation
= (HybridRelationship
)clone
.getHybridParentRelations().iterator().next();
409 Assert
.assertSame("Clone should be parent in parentRelationship", clone
, parentRelation
.getRelatedFrom());
410 Assert
.assertSame("Child should be child in parentRelationship", child
, parentRelation
.getRelatedTo());
411 Assert
.assertSame("Relationship type should be cloned correctly", HybridRelationshipType
.FEMALE_PARENT(), parentRelation
.getType());
412 Assert
.assertEquals("Rule should be cloned correctly", "child rule", parentRelation
.getRuleConsidered());