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
.strategy
.cache
.name
;
12 import static org
.junit
.Assert
.assertEquals
;
13 import static org
.junit
.Assert
.assertNull
;
15 import java
.util
.List
;
17 import org
.apache
.log4j
.Logger
;
18 import org
.junit
.Assert
;
19 import org
.junit
.Before
;
20 import org
.junit
.Test
;
22 import eu
.etaxonomy
.cdm
.common
.UTF8
;
23 import eu
.etaxonomy
.cdm
.model
.agent
.Person
;
24 import eu
.etaxonomy
.cdm
.model
.agent
.Team
;
25 import eu
.etaxonomy
.cdm
.model
.agent
.TeamOrPersonBase
;
26 import eu
.etaxonomy
.cdm
.model
.name
.HybridRelationshipType
;
27 import eu
.etaxonomy
.cdm
.model
.name
.IBotanicalName
;
28 import eu
.etaxonomy
.cdm
.model
.name
.INonViralName
;
29 import eu
.etaxonomy
.cdm
.model
.name
.IZoologicalName
;
30 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalStatus
;
31 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalStatusType
;
32 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
33 import eu
.etaxonomy
.cdm
.model
.name
.TaxonName
;
34 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameFactory
;
35 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
36 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceFactory
;
37 import eu
.etaxonomy
.cdm
.strategy
.cache
.HTMLTagRules
;
38 import eu
.etaxonomy
.cdm
.strategy
.cache
.TagEnum
;
39 import eu
.etaxonomy
.cdm
.strategy
.cache
.TaggedCacheHelper
;
40 import eu
.etaxonomy
.cdm
.strategy
.cache
.TaggedText
;
41 import eu
.etaxonomy
.cdm
.strategy
.parser
.NonViralNameParserImpl
;
42 import eu
.etaxonomy
.cdm
.strategy
.parser
.TimePeriodParser
;
48 public class TaxonNameDefaultCacheStrategyTest
extends NameCacheStrategyTestBase
{
50 @SuppressWarnings("unused")
51 private static final Logger logger
= Logger
.getLogger(TaxonNameDefaultCacheStrategyTest
.class);
53 private TaxonNameDefaultCacheStrategy strategy
;
55 private static final String familyNameString
= "Familia";
56 private static final String genusNameString
= "Genus";
57 private static final String speciesNameString
= "Abies alba";
58 private static final String subSpeciesNameString
= "Abies alba subsp. beta";
60 private static final String authorString
= "L.";
61 private static final String exAuthorString
= "Exaut.";
62 private static final String basAuthorString
= "Basio, A.";
63 private static final String exBasAuthorString
= "ExBas. N.";
65 private static final String referenceTitle
= "My Reference";
67 private IBotanicalName familyName
;
68 private IBotanicalName genusName
;
69 private IBotanicalName subGenusName
;
70 private TaxonName speciesName
;
71 private TaxonName subSpeciesName
;
72 private TeamOrPersonBase
<?
> author
;
73 private TeamOrPersonBase
<?
> exAuthor
;
74 private TeamOrPersonBase
<?
> basAuthor
;
75 private TeamOrPersonBase
<?
> exBasAuthor
;
76 private Reference citationRef
;
79 public void setUp() throws Exception
{
80 strategy
= TaxonNameDefaultCacheStrategy
.NewInstance();
81 familyName
= TaxonNameFactory
.PARSED_BOTANICAL(familyNameString
, Rank
.FAMILY());
82 genusName
= TaxonNameFactory
.PARSED_BOTANICAL(genusNameString
, Rank
.GENUS());
84 subGenusName
= TaxonNameFactory
.NewBotanicalInstance(Rank
.SUBGENUS());
85 subGenusName
.setGenusOrUninomial("Genus");
86 subGenusName
.setInfraGenericEpithet("InfraGenericPart");
88 speciesName
= TaxonNameFactory
.PARSED_BOTANICAL(speciesNameString
);
89 subSpeciesName
= TaxonNameFactory
.PARSED_BOTANICAL(subSpeciesNameString
);
91 author
= Person
.NewInstance();
92 author
.setNomenclaturalTitle(authorString
);
93 exAuthor
= Person
.NewInstance();
94 exAuthor
.setNomenclaturalTitle(exAuthorString
);
95 basAuthor
= Person
.NewInstance();
96 basAuthor
.setNomenclaturalTitle(basAuthorString
);
97 exBasAuthor
= Person
.NewInstance();
98 exBasAuthor
.setNomenclaturalTitle(exBasAuthorString
);
100 citationRef
= ReferenceFactory
.newGeneric();
101 citationRef
.setTitleCache(referenceTitle
, true);
104 //**************************** TESTS **************************************************
107 public void testGetTitleCache() {
108 Assert
.assertEquals(speciesNameString
, speciesName
.getTitleCache());
109 //TODO not yet completed
113 public void testGetFullTitleCache() {
114 subSpeciesName
.setNomenclaturalReference(citationRef
);
115 Assert
.assertEquals(subSpeciesNameString
+ ", " + referenceTitle
, subSpeciesName
.getFullTitleCache());
116 subSpeciesName
.setNomenclaturalMicroReference("25");
117 Assert
.assertEquals(subSpeciesNameString
+ ", " + referenceTitle
+ ": 25", subSpeciesName
.getFullTitleCache());
118 //TODO not yet completed
122 public void testGattungsAutonyme() {
123 IBotanicalName botName
= TaxonNameFactory
.NewBotanicalInstance(Rank
.SECTION_BOTANY());
124 String strTaraxacum
= "Traxacum";
125 botName
.setGenusOrUninomial(strTaraxacum
);
126 botName
.setInfraGenericEpithet(strTaraxacum
);
127 botName
.setAuthorshipCache("Author");
128 Assert
.assertFalse(botName
.getFullTitleCache().contains("bot."));
130 // System.out.println(botName.getFullTitleCache());
134 public void testGetNameCache() {
135 assertEquals("Species Name should be Abies alba", speciesNameString
, speciesName
.getNameCache());
136 speciesName
.setNameCache("Any species");
137 assertEquals("Species Name should be Any species", "Any species", speciesName
.getNameCache());
138 assertEquals("Species Name should be Any species", "Any species", speciesName
.getTitleCache());
139 assertEquals("subSpeciesNameString should be correct", subSpeciesNameString
, subSpeciesName
.getNameCache());
140 IBotanicalName botName
= TaxonNameFactory
.NewBotanicalInstance(Rank
.VARIETY());
141 botName
.setGenusOrUninomial("Lepidocaryum");
142 botName
.setSpecificEpithet("tenue");
143 botName
.setInfraSpecificEpithet("tenue");
144 assertEquals("", "Lepidocaryum tenue var. tenue", botName
.getNameCache());
145 IBotanicalName specName
= TaxonNameFactory
.NewBotanicalInstance(Rank
.SPECIES());
146 specName
.setGenusOrUninomial("Genus");
147 specName
.setSpecificEpithet("");
148 assertEquals("Empty species string must not result in trailing whitespace", "Genus", specName
.getNameCache());
151 String unrankedCache
;
152 TaxonName unrankedName
= TaxonNameFactory
.NewBotanicalInstance(Rank
.INFRASPECIFICTAXON());
153 unrankedName
.setGenusOrUninomial("Genus");
154 TaxonNameDefaultCacheStrategy strategy
= TaxonNameDefaultCacheStrategy
.NewInstance();
156 unrankedName
.setInfraSpecificEpithet("infraspecific");
157 unrankedName
.setSpecificEpithet("species");
158 unrankedCache
= strategy
.getNameCache(unrankedName
);
160 Assert
.assertEquals("Correct unranked cache expected", "Genus species [infraspec.] infraspecific", unrankedCache
);
163 unrankedName
.setRank(Rank
.INFRAGENERICTAXON());
164 unrankedName
.setInfraSpecificEpithet(null);
165 unrankedName
.setSpecificEpithet(null);
166 unrankedName
.setInfraGenericEpithet("Infrageneric");
167 unrankedCache
= strategy
.getNameCache(unrankedName
);
168 Assert
.assertEquals("Correct unranked cache expected", "Genus [unranked] Infrageneric", unrankedCache
);
170 //bot. specific ranks
171 botName
= TaxonNameFactory
.NewBotanicalInstance(Rank
.SECTION_BOTANY());
172 botName
.setGenusOrUninomial("Genus");
173 botName
.setInfraGenericEpithet("Infragenus");
174 Assert
.assertEquals("", "Genus sect. Infragenus", botName
.getNameCache());
175 botName
.setRank(Rank
.SUBSECTION_BOTANY());
176 botName
.setNameCache(null, false);
177 Assert
.assertEquals("", "Genus subsect. Infragenus", botName
.getNameCache());
179 //zool. specific ranks (we don't have markers here therefore no problem should exist
180 IZoologicalName zooName
= TaxonNameFactory
.NewZoologicalInstance(Rank
.SECTION_ZOOLOGY());
181 zooName
.setGenusOrUninomial("Genus");
182 zooName
.setInfraGenericEpithet("Infragenus");
183 Assert
.assertEquals("", "Genus", zooName
.getNameCache());
184 zooName
.setRank(Rank
.SUBSECTION_ZOOLOGY());
185 Assert
.assertEquals("", "Genus", zooName
.getNameCache());
189 public void testNameCacheWithInfraGenericEpithet() {
190 speciesName
.setInfraGenericEpithet("Infraabies");
191 assertEquals("Species Name should be Abies (Infraabies) alba", "Abies (Infraabies) alba", speciesName
.getNameCache());
193 IBotanicalName botName
= TaxonNameFactory
.NewBotanicalInstance(Rank
.VARIETY());
194 botName
.setGenusOrUninomial("Lepidocaryum");
195 botName
.setInfraGenericEpithet("Infralepi");
196 botName
.setSpecificEpithet("tenue");
197 botName
.setInfraSpecificEpithet("tenue");
198 assertEquals("Name cache should be Lepidocaryum (Infralepi) tenue var. tenue", "Lepidocaryum (Infralepi) tenue var. tenue", botName
.getNameCache());
200 botName
.setInfraGenericEpithet(" ");
201 botName
.setNameCache(null, false);
202 assertEquals("Empty infrageneric epithet must be neglegted", "Lepidocaryum tenue var. tenue", botName
.getNameCache());
206 public void testGetAuthorshipCache() {
207 this.speciesName
.setCombinationAuthorship(author
);
208 assertEquals(author
.getNomenclaturalTitleCache(), speciesName
.getAuthorshipCache());
209 this.speciesName
.setBasionymAuthorship(basAuthor
);
210 String expected
= strategy
.getBasionymStart()+ basAuthor
.getNomenclaturalTitleCache()+strategy
.getBasionymEnd()+strategy
.getBasionymAuthorCombinationAuthorSeperator()+author
.getNomenclaturalTitleCache();
211 assertEquals(expected
, speciesName
.getAuthorshipCache());
212 String authorshipcache
= "authorshipcache";
213 speciesName
.setAuthorshipCache(authorshipcache
);
214 assertEquals(authorshipcache
, speciesName
.getAuthorshipCache());
215 speciesName
.setCombinationAuthorship(exAuthor
);
216 assertEquals(authorshipcache
, speciesName
.getAuthorshipCache()); //cache is protected
217 assertEquals(speciesNameString
+ " " + authorshipcache
, speciesName
.getFullTitleCache());
219 speciesName
.setProtectedAuthorshipCache(false);
220 String atomizedAuthorCache
= strategy
.getBasionymStart()+ basAuthor
.getNomenclaturalTitleCache()+strategy
.getBasionymEnd()+strategy
.getBasionymAuthorCombinationAuthorSeperator()+exAuthor
.getNomenclaturalTitleCache();
221 assertEquals(atomizedAuthorCache
, speciesName
.getAuthorshipCache());
222 String atomizedTitleCache
= speciesNameString
+ " "+ strategy
.getBasionymStart()+ basAuthor
.getNomenclaturalTitleCache()+strategy
.getBasionymEnd()+strategy
.getBasionymAuthorCombinationAuthorSeperator()+exAuthor
.getNomenclaturalTitleCache();
223 //Note: This test may fail if aspectj doesn't work correctly
224 assertEquals(atomizedTitleCache
, speciesName
.getTitleCache());
225 speciesName
.setFullTitleCache(null, false);
226 assertEquals(atomizedTitleCache
, speciesName
.getFullTitleCache());
230 public void testHybridNames() {
231 //Note \u00D7 : hybrid sign (multiplication sign)
232 this.speciesName
.setCombinationAuthorship(author
);
233 Assert
.assertEquals(author
.getNomenclaturalTitleCache(), speciesName
.getAuthorshipCache());
234 Assert
.assertEquals("Should be Abies alba L.", "Abies alba L.", speciesName
.getTitleCache());
236 speciesName
.setBinomHybrid(true);
237 speciesName
.setTitleCache(null, false);
238 Assert
.assertEquals("Should be Abies \u00D7alba L.", "Abies \u00D7alba L.", speciesName
.getTitleCache());
239 speciesName
.setMonomHybrid(true);
240 speciesName
.setTitleCache(null, false);
241 Assert
.assertEquals("Should be '\u00D7Abies \u00D7alba L.'", "\u00D7Abies \u00D7alba L.", speciesName
.getTitleCache());
243 Assert
.assertEquals("Should be 'Genus'", "Genus", genusName
.getTitleCache());
244 genusName
.setMonomHybrid(true);
245 genusName
.setTitleCache(null, false);
246 Assert
.assertEquals("Should be '\u00D7Genus'", "\u00D7Genus", genusName
.getTitleCache());
248 Assert
.assertEquals("Should be 'Abies alba subsp. beta'", subSpeciesNameString
, subSpeciesName
.getTitleCache());
249 subSpeciesName
.setTrinomHybrid(true);
250 subSpeciesName
.setTitleCache(null, false);
251 Assert
.assertEquals("Should be 'Abies alba nothosubsp. beta or nbeta'", "Abies alba nothosubsp. beta", subSpeciesName
.getTitleCache());
252 subSpeciesName
.setMonomHybrid(true);
253 subSpeciesName
.setTitleCache(null, false);
254 Assert
.assertEquals("Should be '\u00D7Abies alba nothosubsp. beta'", "\u00D7Abies alba nothosubsp. beta", subSpeciesName
.getTitleCache());
256 Assert
.assertEquals("Should be 'Genus subg. InfraGenericPart'", "Genus subg. InfraGenericPart", subGenusName
.getTitleCache());
257 subGenusName
.setBinomHybrid(true);
258 subGenusName
.setTitleCache(null, false);
259 Assert
.assertEquals("Should be 'Genus nothosubg. InfraGenericPart'", "Genus nothosubg. InfraGenericPart", subGenusName
.getTitleCache());
263 public void testHybridFormula(){
264 this.speciesName
.setCombinationAuthorship(author
);
265 Assert
.assertEquals(author
.getNomenclaturalTitleCache(), speciesName
.getAuthorshipCache());
266 Assert
.assertEquals("Should be 'Abies alba L.'", "Abies alba L.", speciesName
.getTitleCache());
268 INonViralName hybridName
= TaxonNameFactory
.NewNonViralInstance(Rank
.SPECIES());
269 INonViralName secondParent
= TaxonNameFactory
.NewNonViralInstance(Rank
.SPECIES());
271 secondParent
.setTitleCache("Second parent Mill.", true);
272 hybridName
.addHybridParent(speciesName
, HybridRelationshipType
.FIRST_PARENT(), null);
273 hybridName
.addHybridParent(secondParent
, HybridRelationshipType
.SECOND_PARENT(), null);
274 hybridName
.setHybridFormula(true);
276 Assert
.assertEquals("", "Abies alba L. \u00D7 Second parent Mill.", hybridName
.getTitleCache());
277 //Note: handling of empty nameCache of parents may change in future
278 Assert
.assertEquals("", "Abies alba \u00D7", hybridName
.getNameCache());
279 secondParent
.setGenusOrUninomial("Second");
280 secondParent
.setSpecificEpithet("parent");
281 hybridName
.setNameCache(null, false);
282 Assert
.assertEquals("", "Abies alba \u00D7 Second parent", hybridName
.getNameCache());
288 public void testOriginalSpelling() {
290 TaxonName originalName
= speciesName
.clone();
291 originalName
.setSpecificEpithet("alpa");
292 Assert
.assertEquals("Preconditions are wrong", "Abies alpa", originalName
.getTitleCache());
293 Assert
.assertEquals("Name cache should not show original spelling", "Abies alpa", originalName
.getNameCache());
295 speciesName
.setOriginalSpelling(originalName
);
296 Assert
.assertEquals("Abies alba [as \"alpa\"]", speciesName
.getFullTitleCache());
297 Assert
.assertEquals("Abies alba", speciesName
.getTitleCache());
298 Assert
.assertEquals("Name cache should not show original spelling", "Abies alba", speciesName
.getNameCache());
300 originalName
.setGenusOrUninomial("Apies");
301 speciesName
.setFullTitleCache(null, false);
302 originalName
.setNameCache(null, false);
303 //TODO update cache of current name (species name)
304 Assert
.assertEquals("Abies alba [as \"Apies alpa\"]", speciesName
.getFullTitleCache());
305 Assert
.assertEquals("Abies alba", speciesName
.getTitleCache());
306 Assert
.assertEquals("Name cache should not show original spelling", "Abies alba", speciesName
.getNameCache());
307 originalName
.setSpecificEpithet("alba");
308 originalName
.setNameCache(null, false);
309 speciesName
.setFullTitleCache(null, false);
310 //not fully sure if it is wanted that here only the genus name is given and not the specific epithet too, may change if required by users
311 Assert
.assertEquals("Abies alba [as \"Apies\"]", speciesName
.getFullTitleCache());
314 originalName
= subSpeciesName
.clone();
315 originalName
.setInfraSpecificEpithet("peta");
316 Assert
.assertEquals("Preconditions are wrong", "Abies alba subsp. peta", originalName
.getTitleCache());
317 subSpeciesName
.setOriginalSpelling(originalName
);
318 Assert
.assertEquals("Abies alba subsp. beta [as \"peta\"]", subSpeciesName
.getFullTitleCache());
319 Assert
.assertEquals("Abies alba subsp. beta", subSpeciesName
.getTitleCache());
320 originalName
.setSpecificEpithet("alpa");
321 originalName
.setNameCache(null, false);
322 subSpeciesName
.setFullTitleCache(null, false);
323 Assert
.assertEquals("Abies alba subsp. beta [as \"alpa subsp. peta\"]", subSpeciesName
.getFullTitleCache());
325 originalName
.setInfraSpecificEpithet("beta");
326 originalName
.setNameCache(null, false);
327 subSpeciesName
.setFullTitleCache(null, false);
328 //not fully sure if it is wanted that here only the specific epithet is given and not the infra specific epithet too, may change if required by users
329 Assert
.assertEquals("Abies alba subsp. beta [as \"alpa\"]", subSpeciesName
.getFullTitleCache());
331 INonViralName correctName
= NonViralNameParserImpl
.NewInstance().parseFullName("Nepenthes glabrata J.R.Turnbull & A.T.Middleton");
332 TaxonName originalSpelling
= (TaxonName
)NonViralNameParserImpl
.NewInstance().parseFullName("Nepenthes glabratus");
333 correctName
.setOriginalSpelling(originalSpelling
);
334 Assert
.assertEquals("Nepenthes glabrata", correctName
.getNameCache());
335 Assert
.assertEquals("Nepenthes glabrata J.R.Turnbull & A.T.Middleton", correctName
.getTitleCache());
336 Assert
.assertEquals("Nepenthes glabrata J.R.Turnbull & A.T.Middleton [as \"glabratus\"]", correctName
.getFullTitleCache());
338 correctName
.setNomenclaturalReference(citationRef
);
339 Assert
.assertEquals("Nepenthes glabrata J.R.Turnbull & A.T.Middleton, My Reference [as \"glabratus\"]", correctName
.getFullTitleCache());
340 citationRef
.setProtectedTitleCache(false);
341 citationRef
.setTitle("Sp. Pl.");
342 citationRef
.setDatePublished(TimePeriodParser
.parseStringVerbatim("1988"));
343 correctName
.setFullTitleCache(null, false);
344 Assert
.assertEquals("Nepenthes glabrata J.R.Turnbull & A.T.Middleton, Sp. Pl. 1988 [as \"glabratus\"]", correctName
.getFullTitleCache());
345 correctName
.addStatus(NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.ILLEGITIMATE()));
346 correctName
.setFullTitleCache(null, false);
347 Assert
.assertEquals("Nepenthes glabrata J.R.Turnbull & A.T.Middleton, Sp. Pl. 1988 [as \"glabratus\"], nom. illeg.", correctName
.getFullTitleCache());
352 public void testOriginalSpellingItalics() {
354 TaxonName originalName
= subSpeciesName
.clone();
355 originalName
.setSpecificEpithet("alpa");
356 Assert
.assertEquals("Preconditions are wrong", "Abies alpa subsp. beta", originalName
.getTitleCache());
358 subSpeciesName
.setOriginalSpelling(originalName
);
360 List
<TaggedText
> taggedFullTitle
= subSpeciesName
.getCacheStrategy().getTaggedFullTitle(subSpeciesName
);
361 Assert
.assertEquals(7, taggedFullTitle
.size());
362 Assert
.assertEquals(new TaggedText(TagEnum
.name
, "Abies"), taggedFullTitle
.get(0));
363 Assert
.assertEquals(new TaggedText(TagEnum
.name
, "alba"), taggedFullTitle
.get(1));
364 Assert
.assertEquals(new TaggedText(TagEnum
.rank
, "subsp."), taggedFullTitle
.get(2));
365 Assert
.assertEquals(new TaggedText(TagEnum
.name
, "beta"), taggedFullTitle
.get(3));
366 Assert
.assertEquals(new TaggedText(TagEnum
.separator
, " [as \""), taggedFullTitle
.get(4));
367 Assert
.assertEquals(new TaggedText(TagEnum
.name
, "alpa"), taggedFullTitle
.get(5));
368 Assert
.assertEquals(new TaggedText(TagEnum
.separator
, "\"]"), taggedFullTitle
.get(6));
370 originalName
.setInfraSpecificEpithet("peta");
371 originalName
.setNameCache(null, false);
372 taggedFullTitle
= subSpeciesName
.getCacheStrategy().getTaggedFullTitle(subSpeciesName
);
373 Assert
.assertEquals(9, taggedFullTitle
.size());
374 Assert
.assertEquals(new TaggedText(TagEnum
.name
, "alba"), taggedFullTitle
.get(1));
375 Assert
.assertEquals(new TaggedText(TagEnum
.name
, "Abies"), taggedFullTitle
.get(0));
376 Assert
.assertEquals(new TaggedText(TagEnum
.name
, "alba"), taggedFullTitle
.get(1));
377 Assert
.assertEquals(new TaggedText(TagEnum
.rank
, "subsp."), taggedFullTitle
.get(2));
378 Assert
.assertEquals(new TaggedText(TagEnum
.name
, "beta"), taggedFullTitle
.get(3));
379 Assert
.assertEquals(new TaggedText(TagEnum
.separator
, " [as \""), taggedFullTitle
.get(4));
380 Assert
.assertEquals(new TaggedText(TagEnum
.name
, "alpa"), taggedFullTitle
.get(5));
381 Assert
.assertEquals(new TaggedText(TagEnum
.rank
, "subsp."), taggedFullTitle
.get(6));
382 Assert
.assertEquals(new TaggedText(TagEnum
.name
, "peta"), taggedFullTitle
.get(7));
383 Assert
.assertEquals(new TaggedText(TagEnum
.separator
, "\"]"), taggedFullTitle
.get(8));
387 public void testCacheListener() {
388 Reference ref
= ReferenceFactory
.newGeneric();
389 ref
.setTitleCache("GenericRef",true);
390 this.subSpeciesName
.setNomenclaturalReference(ref
);
391 Assert
.assertEquals("Expected full title cache has error", "Abies alba subsp. beta, GenericRef", subSpeciesName
.getFullTitleCache());
392 subSpeciesName
.setCombinationAuthorship(author
);
393 subSpeciesName
.setBasionymAuthorship(basAuthor
);
394 Assert
.assertEquals("Expected full title cache has error", "Abies alba subsp. beta (Basio, A.) L., GenericRef", subSpeciesName
.getFullTitleCache());
395 //cascade name change to fullTitleCache
396 subSpeciesName
.setRank(Rank
.SPECIES());
397 subSpeciesName
.setProtectedNameCache(true);
398 Assert
.assertNull("name cache should be null", subSpeciesName
.getNameCache());
399 subSpeciesName
.setProtectedNameCache(false);
400 Assert
.assertNotNull("name cache should not be null", subSpeciesName
.getNameCache());
401 Assert
.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) L., GenericRef", subSpeciesName
.getFullTitleCache());
402 Assert
.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) L.", subSpeciesName
.getTitleCache());
403 Assert
.assertEquals("Expected full title cache has error", "Abies alba", subSpeciesName
.getNameCache());
405 subSpeciesName
.setProtectedNameCache(true);
406 subSpeciesName
.setSpecificEpithet("gamma");
407 Assert
.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) L., GenericRef", subSpeciesName
.getFullTitleCache());
408 Assert
.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) L.", subSpeciesName
.getTitleCache());
409 Assert
.assertEquals("Expected full title cache has error", "Abies alba", subSpeciesName
.getNameCache());
410 //make original status
411 subSpeciesName
.setRank(Rank
.SUBSPECIES());
412 Assert
.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) L., GenericRef", subSpeciesName
.getFullTitleCache());
415 author
.setNomenclaturalTitle("M.");
416 Assert
.assertEquals("Expected full title cache has error", "(Basio, A.) M.", subSpeciesName
.getAuthorshipCache());
417 Assert
.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) M., GenericRef", subSpeciesName
.getFullTitleCache());
418 Assert
.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) M.", subSpeciesName
.getTitleCache());
420 //protectedTitleCache
421 subSpeciesName
.setProtectedTitleCache(true);
422 subSpeciesName
.setProtectedNameCache(false);
423 subSpeciesName
.setGenusOrUninomial("Pinus");
424 subSpeciesName
.setSpecificEpithet("alba");
425 Assert
.assertEquals("Expected full title cache has error", "Pinus alba subsp. beta", subSpeciesName
.getNameCache());
426 Assert
.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) M., GenericRef", subSpeciesName
.getFullTitleCache());
427 Assert
.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) M.", subSpeciesName
.getTitleCache());
429 subSpeciesName
.setTitleCache("Pinus beta C.", true);
430 Assert
.assertEquals("Expected full title cache has error", "Pinus beta C., GenericRef", subSpeciesName
.getFullTitleCache());
431 subSpeciesName
.setProtectedTitleCache(false);
433 Assert
.assertEquals("Expected full title cache has error", "Pinus alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName
.getFullTitleCache());
435 //protected full title cache set
436 subSpeciesName
.setFullTitleCache("ABC");
437 Assert
.assertEquals("Expected full title cache has error", "ABC", subSpeciesName
.getFullTitleCache());
438 subSpeciesName
.setProtectedFullTitleCache(false);
439 Assert
.assertEquals("Expected full title cache has error", "Pinus alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName
.getFullTitleCache());
441 //protected title cache set
442 subSpeciesName
.setProtectedTitleCache(false);
443 Assert
.assertEquals("Expected full title cache has error", "Pinus alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName
.getFullTitleCache());
445 //protectedNameCache set
446 subSpeciesName
.setProtectedNameCache(true);
447 Assert
.assertEquals("Expected full title cache has error", "Pinus alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName
.getFullTitleCache());
448 subSpeciesName
.setNameCache("P. alba subsp. beta");
449 Assert
.assertEquals("Expected full title cache has error", "P. alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName
.getFullTitleCache());
451 subSpeciesName
.setGenusOrUninomial("A.");
452 subSpeciesName
.setProtectedNameCache(false);
453 Assert
.assertEquals("Expected full title cache has error", "A. alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName
.getFullTitleCache());
454 subSpeciesName
.setNameCache("P. alba subsp. beta");
455 Assert
.assertEquals("Expected full title cache has error", "P. alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName
.getFullTitleCache());
457 //protected authorship
458 subSpeciesName
.setProtectedAuthorshipCache(true);
459 Assert
.assertEquals("Expected full title cache has error", "P. alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName
.getFullTitleCache());
460 subSpeciesName
.setAuthorshipCache("Ciard.");
461 Assert
.assertEquals("Expected full title cache has error", "P. alba subsp. beta Ciard., GenericRef", subSpeciesName
.getFullTitleCache());
463 author
.setNomenclaturalTitle("X.");
464 subSpeciesName
.setProtectedAuthorshipCache(false);
465 Assert
.assertEquals("Expected full title cache has error", "P. alba subsp. beta (Basio, A.) X., GenericRef", subSpeciesName
.getFullTitleCache());
468 subSpeciesName
.setProtectedNameCache(false);
469 Assert
.assertEquals("Expected full title cache has error", "A. alba subsp. beta (Basio, A.) X., GenericRef", subSpeciesName
.getFullTitleCache());
472 subSpeciesName
.setProtectedNameCache(true);
473 Assert
.assertEquals("Expected full title cache has error", "A. alba subsp. beta (Basio, A.) X., GenericRef", subSpeciesName
.getFullTitleCache());
474 subSpeciesName
.setAppendedPhrase("app phrase");
475 Assert
.assertEquals("Expected full title cache has error", "A. alba subsp. beta (Basio, A.) X., GenericRef", subSpeciesName
.getFullTitleCache());
476 subSpeciesName
.setProtectedNameCache(false);
477 Assert
.assertEquals("Expected full title cache has error", "A. alba subsp. beta app phrase (Basio, A.) X., GenericRef", subSpeciesName
.getFullTitleCache());
478 subSpeciesName
.setAppendedPhrase("app2 phrase2");
479 subSpeciesName
.setProtectedNameCache(true);
480 Assert
.assertNull("NameCache should be null", subSpeciesName
.getNameCache());
481 subSpeciesName
.setProtectedNameCache(false);
482 subSpeciesName
.setAppendedPhrase(null);
485 Reference book
= ReferenceFactory
.newBook();
486 book
.setTitle("Booktitle");
487 Assert
.assertNotNull("TitleCache should not be null", subSpeciesName
.getTitleCache());
488 subSpeciesName
.setNomenclaturalReference(book
);
489 subSpeciesName
.setNomenclaturalMicroReference("22");
490 Assert
.assertEquals("Expected full title cache has error", "A. alba subsp. beta (Basio, A.) X., Booktitle: 22", subSpeciesName
.getFullTitleCache());
491 subSpeciesName
.setProtectedTitleCache(true);
492 Assert
.assertNotNull("TitleCache should not be null", subSpeciesName
.getTitleCache());
495 IZoologicalName zooName
= TaxonNameFactory
.NewZoologicalInstance(Rank
.SPECIES());
496 zooName
.setGenusOrUninomial("Homo");
497 zooName
.setSpecificEpithet("sapiens");
498 zooName
.setBasionymAuthorship(basAuthor
);
499 zooName
.setCombinationAuthorship(author
);
500 zooName
.setNomenclaturalReference(book
);
501 zooName
.setNomenclaturalMicroReference("22");
502 Assert
.assertEquals("Expected full title cache has error", "Homo sapiens (Basio, A.) X., Booktitle: 22", zooName
.getFullTitleCache());
504 zooName
.setOriginalPublicationYear(1922);
505 zooName
.setPublicationYear(1948);
506 Assert
.assertEquals("Expected full title cache has error", "Homo sapiens (Basio, A., 1922) X., 1948, Booktitle: 22", zooName
.getFullTitleCache());
507 zooName
.setOriginalPublicationYear(1923);
508 zooName
.setProtectedAuthorshipCache(true);
509 Assert
.assertNull("AuthorshipCache should be null", zooName
.getAuthorshipCache());
510 zooName
.setProtectedAuthorshipCache(false);
511 Assert
.assertNotNull("AuthorshipCache should not be null", zooName
.getAuthorshipCache());
512 zooName
.setPublicationYear(1949);
513 zooName
.setProtectedAuthorshipCache(true);
514 Assert
.assertNull("AuthorshipCache should be null", zooName
.getAuthorshipCache());
519 public void testGetSetNameAuthorSeperator() {
520 String authorSeparator
= "authorSeparator";
521 strategy
.setNameAuthorSeperator(authorSeparator
);
522 assertEquals(authorSeparator
, strategy
.getNameAuthorSeperator());
523 strategy
.setNameAuthorSeperator(null);
524 assertNull(strategy
.getNameAuthorSeperator());
528 public void testGetSetBasionymStart() {
529 String basStart
= "start";
530 strategy
.setBasionymStart(basStart
);
531 assertEquals(basStart
, strategy
.getBasionymStart());
532 strategy
.setBasionymStart(null);
533 assertNull(strategy
.getBasionymStart());
537 public void testGetSetBasionymEnd() {
538 String basEnd
= "end";
539 strategy
.setBasionymEnd(basEnd
);
540 assertEquals(basEnd
, strategy
.getBasionymEnd());
541 strategy
.setBasionymEnd(null);
542 assertNull(strategy
.getBasionymEnd());
546 public void testGetSetExAuthorSeperator() {
547 String exAuthorSeparator
= "exAuthorSeparator";
548 strategy
.setExAuthorSeperator(exAuthorSeparator
);
549 assertEquals(exAuthorSeparator
, strategy
.getExAuthorSeperator());
550 strategy
.setExAuthorSeperator(null);
551 assertNull(strategy
.getExAuthorSeperator());
555 public void testSetBasionymAuthorCombinationAuthorSeperator() {
556 String basComSeparator
= "basComSeparator";
557 strategy
.setBasionymAuthorCombinationAuthorSeperator(basComSeparator
);
558 assertEquals(basComSeparator
, strategy
.getBasionymAuthorCombinationAuthorSeperator());
559 strategy
.setBasionymAuthorCombinationAuthorSeperator(null);
560 assertNull(strategy
.getBasionymAuthorCombinationAuthorSeperator());
564 public void testGetInfraGenericNames(){
565 String author
= "Anyauthor";
566 TaxonName nonViralName
= TaxonNameFactory
.NewNonViralInstance(Rank
.SUBGENUS());
567 nonViralName
.setGenusOrUninomial("Genus");
568 nonViralName
.setInfraGenericEpithet("subgenus");
569 nonViralName
.setAuthorshipCache(author
);
571 //test ordinary infrageneric
572 List
<TaggedText
> subGenusNameCacheTagged
= strategy
.getInfraGenusTaggedNameCache(nonViralName
);
573 String subGenusNameCache
= TaggedCacheHelper
.createString(subGenusNameCacheTagged
);
574 assertEquals("Subgenus name should be 'Genus subg. subgenus'.", "Genus subg. subgenus", subGenusNameCache
);
575 String subGenusTitle
= strategy
.getTitleCache(nonViralName
);
576 assertEquals("Subgenus name should be 'Genus subg. subgenus Anyauthor'.", "Genus subg. subgenus Anyauthor", subGenusTitle
);
578 //test species aggregates and species groups
579 nonViralName
.setRank(Rank
.SPECIESAGGREGATE());
580 nonViralName
.setSpecificEpithet("myspecies");
581 nonViralName
.setInfraGenericEpithet(null);
582 nonViralName
.setAuthorshipCache(null);
584 List
<TaggedText
> aggrNameCacheTagged
= strategy
.getInfraGenusTaggedNameCache(nonViralName
);
586 String aggrNameCache
= TaggedCacheHelper
.createString(aggrNameCacheTagged
);
587 assertEquals("Species aggregate name should be 'Genus myspecies aggr.'.", "Genus myspecies aggr.", aggrNameCache
);
588 String aggrNameTitle
= strategy
.getTitleCache(nonViralName
);
589 Assert
.assertTrue("Species aggregate should not include author information.", aggrNameTitle
.indexOf(author
) == -1);
590 assertEquals("Species aggregate name should be 'Genus myspecies aggr.'.", "Genus myspecies aggr.", aggrNameTitle
);
591 nonViralName
.setRank(Rank
.SPECIESGROUP());
592 String groupNameTitle
= strategy
.getTitleCache(nonViralName
);
593 assertEquals("Species group name should be 'Genus myspecies species group'.", "Genus myspecies species group", groupNameTitle
);
595 //test species aggregates and species groups with infrageneric information
596 //TODO check if groups do ever have infrageneric epithets
597 nonViralName
.setRank(Rank
.SPECIESAGGREGATE());
598 nonViralName
.setSpecificEpithet("myspecies");
599 nonViralName
.setInfraGenericEpithet("Infragenus");
601 aggrNameCacheTagged
= strategy
.getInfraGenusTaggedNameCache(nonViralName
);
602 aggrNameCache
= TaggedCacheHelper
.createString(aggrNameCacheTagged
);
603 assertEquals("Species aggregate name should be 'Genus (Infragenus) myspecies aggr.'.", "Genus (Infragenus) myspecies aggr.", aggrNameCache
);
605 aggrNameTitle
= strategy
.getTitleCache(nonViralName
);
606 Assert
.assertTrue("Species aggregate should not include author information.", aggrNameTitle
.indexOf(author
) == -1);
607 assertEquals("Species aggregate name should be 'Genus (Infragenus) myspecies aggr.'.", "Genus (Infragenus) myspecies aggr.", aggrNameTitle
);
609 nonViralName
.setRank(Rank
.SPECIESGROUP());
610 groupNameTitle
= strategy
.getTitleCache(nonViralName
);
611 assertEquals("Species group name should be 'Genus (Infragenus) myspecies species group'.", "Genus (Infragenus) myspecies species group", groupNameTitle
);
613 //aggregates with author and nom.ref. information #4288
614 nonViralName
.setRank(Rank
.SPECIESAGGREGATE());
615 nonViralName
.setSpecificEpithet("myspecies");
616 nonViralName
.setInfraGenericEpithet(null);
617 nonViralName
.setAuthorshipCache("L.");
619 aggrNameCacheTagged
= strategy
.getTaggedTitle(nonViralName
);
620 aggrNameCache
= TaggedCacheHelper
.createString(aggrNameCacheTagged
);
621 assertEquals("Species aggregate name should be 'Genus myspecies L.'.", "Genus myspecies L.", aggrNameCache
);
626 public void testGetTaggedNameSpeciesAggregate() {
627 TaxonName speciesAggregate
= TaxonNameFactory
.NewBotanicalInstance(Rank
.SPECIESAGGREGATE());
628 speciesAggregate
.setGenusOrUninomial("Mygenus");
629 speciesAggregate
.setSpecificEpithet("myspecies");
630 List
<TaggedText
> taggedName
= strategy
.getTaggedName(speciesAggregate
);
631 Assert
.assertEquals("1rd tag must be genus epithet", "Mygenus", taggedName
.get(0).getText());
632 Assert
.assertEquals("2rd tag must be species epithet", "myspecies", taggedName
.get(1).getText());
633 Assert
.assertEquals("3rd tag must be aggregate marker", "aggr.",taggedName
.get(2).getText());
637 public void testGetTaggedNameSubspecies(){
638 List
<TaggedText
> taggedName
= strategy
.getTaggedName(subSpeciesName
);
639 Assert
.assertEquals("First tag should be 'Abies'", "Abies", taggedName
.get(0).getText());
640 Assert
.assertEquals("Second tag should be 'alba'", "alba", taggedName
.get(1).getText());
641 Assert
.assertEquals("Third tag should be subspecies rank, and rank abbreviatioin should be subsp.", "subsp.", taggedName
.get(2).getText());
642 Assert
.assertEquals("Fourth tag should be 'beta'", "beta", taggedName
.get(3).getText());
647 public void testTitleCacheHtmlTagged(){
648 HTMLTagRules rules
= new HTMLTagRules().addRule(TagEnum
.name
, "i");
649 Assert
.assertEquals("<i>Abies alba</i>", strategy
.getTitleCache(speciesName
, rules
));
650 rules
.addRule(TagEnum
.name
, "b");
651 Assert
.assertEquals("<b><i>Abies alba</i></b>", strategy
.getTitleCache(speciesName
, rules
));
652 speciesName
.setCombinationAuthorship(author
);
653 Assert
.assertEquals("<b><i>Abies alba</i></b> L.", strategy
.getTitleCache(speciesName
, rules
));
654 rules
.addRule(TagEnum
.authors
, "i");
655 Assert
.assertEquals("<b><i>Abies alba</i></b> <i>L.</i>", strategy
.getTitleCache(speciesName
, rules
));
656 rules
= new HTMLTagRules().addRule(TagEnum
.name
, "i").addRule(TagEnum
.name
, "b").addRule(TagEnum
.authors
, "b");
657 Assert
.assertEquals("<b><i>Abies alba</i> L.</b>", strategy
.getTitleCache(speciesName
, rules
));
661 public void testAutonymWithExAuthor(){
662 IBotanicalName name
= TaxonNameFactory
.NewBotanicalInstance(Rank
.FORM());
663 name
.setGenusOrUninomial("Euphorbia");
664 name
.setSpecificEpithet("atropurpurea");
665 name
.setInfraSpecificEpithet("atropurpurea");
666 Team combTeam
= Team
.NewTitledInstance("Combauthor", "Combauthor");
667 name
.setCombinationAuthorship(combTeam
);
668 Team exCombTeam
= Team
.NewTitledInstance("Excomb", "Excomb");
669 name
.setExCombinationAuthorship(exCombTeam
);
671 Assert
.assertEquals("", "Euphorbia atropurpurea Excomb ex Combauthor f. atropurpurea", name
.getTitleCache());
675 public void testAutonymHybrids(){
676 IBotanicalName name
= TaxonNameFactory
.NewBotanicalInstance(Rank
.SUBSPECIES());
677 name
.setGenusOrUninomial("Ophrys");
678 name
.setSpecificEpithet("kastelli");
679 name
.setInfraSpecificEpithet("kastelli");
680 Team combTeam
= Team
.NewTitledInstance("E. Klein", "E. Klein");
681 name
.setCombinationAuthorship(combTeam
);
682 name
.setBinomHybrid(true);
683 name
.setTrinomHybrid(true);
685 String expected
= String
.format("Ophrys %skastelli E. Klein nothosubsp. kastelli", UTF8
.HYBRID
.toString());
686 Assert
.assertEquals("", expected
, name
.getTitleCache());