Added clone() to all TaxonNameBase classes (including some descriptive and common...
[cdmlib.git] / cdmlib-model / src / test / java / eu / etaxonomy / cdm / model / name / NonViralNameTest.java
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.assertNotNull;
14
15 import java.util.HashSet;
16 import java.util.Set;
17
18 import junit.framework.Assert;
19
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;
25
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;
32
33 /**
34 * @author a.mueller
35 *
36 */
37 public class NonViralNameTest extends EntityTestBase {
38 private static Logger logger = Logger.getLogger(NonViralNameTest.class);
39
40
41 NonViralName<?> nonViralName1;
42 NonViralName<?> nonViralName2;
43
44 @BeforeClass
45 public static void setUpBeforeClass() {
46 DefaultTermInitializer vocabularyStore = new DefaultTermInitializer();
47 vocabularyStore.initialize();
48 }
49
50 /**
51 * @throws java.lang.Exception
52 */
53 @Before
54 public void setUp() throws Exception {
55 nonViralName1 = new BotanicalName();
56 nonViralName2 = new BotanicalName();
57 }
58
59 /**
60 * @throws java.lang.Exception
61 */
62 @After
63 public void tearDown() throws Exception {
64 }
65
66 // ******************* TESTS ***********************************/
67
68 /**
69 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#generateTitle()}.
70 */
71 @Test
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());
79 }
80
81 /**
82 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#isCodeCompliant()}.
83 */
84 @Test
85 public final void testIsCodeCompliant() {
86 logger.warn("Not yet implemented"); // TODO
87 }
88
89 /**
90 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#NonViralName()}.
91 */
92 @Test
93 public final void testNonViralName() {
94 assertNotNull(nonViralName1);
95 }
96
97 /**
98 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#NonViralName(eu.etaxonomy.cdm.model.name.Rank)}.
99 */
100 @Test
101 public final void testNonViralNameRank() {
102 NonViralName<?> nonViralName = NonViralName.NewInstance(Rank.GENUS());
103 assertNotNull(nonViralName);
104 }
105
106 /**
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)}.
108 */
109 @Test
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() );
122 }
123
124 /**
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)}.
127 */
128 @Test
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());
137 }
138
139
140 /**
141 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getExCombinationAuthorTeam()}.
142 */
143 @Test
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());
152 }
153
154
155 /**
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)}.
158 */
159 @Test
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());
168 }
169
170
171 /**
172 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getExCombinationAuthorTeam()}.
173 */
174 @Test
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());
183 }
184
185
186 /**
187 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getGenusOrUninomial()}.
188 */
189 @Test
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());
197 }
198
199 /**
200 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getInfraGenericEpithet()}.
201 */
202 @Test
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());
210 }
211
212 /**
213 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getSpecificEpithet()}.
214 */
215 @Test
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());
223 }
224
225 /**
226 * Test method for {@link eu.etaxonomy.cdm.model.name.NonViralName#getInfraSpecificEpithet()}.
227 */
228 @Test
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());
236 }
237
238 /**
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()}.
241 * NOT FINISHED YET
242 */
243 @Test
244
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);
251
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());
260
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());
266
267 nonViralName1.setAuthorshipCache(strTeam2);
268 assertEquals(strTeam2, nonViralName1.getAuthorshipCache());
269 nonViralName1.setGenusOrUninomial("Calendula");
270 Assert.assertEquals("Calendula alba "+strTeam2, nonViralName1.getTitleCache());
271
272 nonViralName1.setAuthorshipCache(strTeam3);
273 Assert.assertEquals("Calendula alba "+strTeam3, nonViralName1.getTitleCache());
274
275 Assert.assertEquals("Calendula alba "+strTeam3+ ", RefTitle", nonViralName1.getFullTitleCache());
276
277 nonViralName1.setCombinationAuthorTeam(null);
278 assertEquals(null, nonViralName1.getCombinationAuthorTeam());
279 }
280
281
282 @Test
283 public final void testGetChildAndParentRelationships() {
284 NonViralName nonViralName1 = new NonViralName();
285 assertEquals(0, nonViralName1.getParentRelationships().size());
286 assertEquals(0, nonViralName1.getChildRelationships().size());
287 BotanicalName femaleParent = BotanicalName.NewInstance(null);
288 HybridRelationship hybridRelationship = new HybridRelationship(nonViralName1, femaleParent, HybridRelationshipType.FEMALE_PARENT(), null );
289 assertEquals(1, nonViralName1.getChildRelationships().size());
290 assertEquals(hybridRelationship, nonViralName1.getChildRelationships().iterator().next());
291 assertEquals(1, femaleParent.getParentRelationships().size());
292 }
293
294 @Test
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);
301
302 nonViralName1.addHybridParent(femaleParent, HybridRelationshipType.MALE_PARENT(), null);
303 nonViralName1.addHybridParent(maleParent, HybridRelationshipType.MALE_PARENT(), null);
304
305 assertEquals(2, nonViralName1.getChildRelationships().size());
306 assertEquals(0, nonViralName1.getParentRelationships().size());
307 assertEquals(1, maleParent.getParentRelationships().size());
308 assertEquals(1, femaleParent.getParentRelationships().size());
309 assertEquals(0, maleParent.getChildRelationships().size());
310 assertEquals(0, femaleParent.getChildRelationships().size());
311
312 }
313
314 @Test(expected=IllegalArgumentException.class)
315 public final void testAddHybridRelationship() {
316 NonViralName nonViralName1 = new NonViralName();
317 assertEquals(0, nonViralName1.getParentRelationships().size());
318 assertEquals(0, nonViralName1.getChildRelationships().size());
319 NonViralName botanicalName2 = new NonViralName();
320 botanicalName2.addHybridRelationship(null);
321 }
322
323 @Test
324 public final void testRemoveHybridRelationship() {
325 NonViralName botanicalName1 = new NonViralName();
326 assertEquals(0, botanicalName1.getParentRelationships().size());
327 assertEquals(0, botanicalName1.getChildRelationships().size());
328 BotanicalName femaleParent = BotanicalName.NewInstance(null);
329 NonViralName maleParent = NonViralName.NewInstance(null);
330 ZoologicalName child = ZoologicalName.NewInstance(null);
331
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.getChildRelationships().size());
336 assertEquals(1, botanicalName1.getParentRelationships().size());
337 assertEquals(1, child.getChildRelationships().size());
338
339 botanicalName1.removeHybridParent(femaleParent);
340 assertEquals(1, botanicalName1.getChildRelationships().size());
341 assertEquals(1, botanicalName1.getParentRelationships().size());
342
343 botanicalName1.removeHybridParent(maleParent);
344 assertEquals(0, botanicalName1.getChildRelationships().size());
345 assertEquals(1, botanicalName1.getParentRelationships().size());
346
347 botanicalName1.removeHybridChild(child);
348 assertEquals(0, botanicalName1.getParentRelationships().size());
349
350 //null
351 botanicalName1.removeHybridRelationship(null);
352 assertEquals(0, botanicalName1.getChildRelationships().size());
353 }
354
355
356
357 @Test
358 public void testClone(){
359
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);
368
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");
376
377
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());
387
388 //hybrid parents of clone
389 Assert.assertEquals("There should be exactly 2 hybrid relationships in which the clone takes the child role", 2, clone.getChildRelationships().size());
390 Set<NonViralName> parentSet = new HashSet<NonViralName>();
391 Set<NonViralName> childSet = new HashSet<NonViralName>();
392 for (Object object : clone.getChildRelationships()){
393 HybridRelationship childRelation = (HybridRelationship)object;
394 NonViralName relatedFrom = childRelation.getRelatedFrom();
395 parentSet.add(relatedFrom);
396 NonViralName relatedTo = childRelation.getRelatedTo();
397 childSet.add(relatedTo);
398 }
399 Assert.assertTrue("Parent set should contain parent1", parentSet.contains(parent));
400 Assert.assertTrue("Parent set should contain parent2", parentSet.contains(parent2));
401 Assert.assertTrue("Child set should contain clone", childSet.contains(clone));
402
403 //hybrid child of clone
404 Assert.assertEquals("There should be exactly 1 hybrid relationship in which the clone takes the parent role", 1, clone.getParentRelationships().size());
405 HybridRelationship parentRelation = (HybridRelationship)clone.getParentRelationships().iterator().next();
406 Assert.assertSame("Clone should be parent in parentRelationship", clone, parentRelation.getRelatedFrom());
407 Assert.assertSame("Child should be child in parentRelationship", child, parentRelation.getRelatedTo());
408 Assert.assertSame("Relationship type should be cloned correctly", HybridRelationshipType.FEMALE_PARENT(), parentRelation.getType());
409 Assert.assertEquals("Rule should be cloned correctly", "child rule", parentRelation.getRuleConsidered());
410 }
411 }