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
.assertNotNull
;
14 import static org
.junit
.Assert
.assertNull
;
16 import java
.lang
.reflect
.InvocationTargetException
;
17 import java
.lang
.reflect
.Method
;
19 import org
.apache
.log4j
.Logger
;
20 import org
.junit
.Before
;
21 import org
.junit
.BeforeClass
;
22 import org
.junit
.Test
;
24 import eu
.etaxonomy
.cdm
.model
.agent
.INomenclaturalAuthor
;
25 import eu
.etaxonomy
.cdm
.model
.agent
.Person
;
26 import eu
.etaxonomy
.cdm
.model
.common
.DefaultTermInitializer
;
27 import eu
.etaxonomy
.cdm
.model
.name
.NonViralName
;
28 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
29 import eu
.etaxonomy
.cdm
.model
.name
.ZoologicalName
;
35 public class ZoologicalNameCacheStrategyTest
{
36 private static final Logger logger
= Logger
.getLogger(ZoologicalNameCacheStrategyTest
.class);
38 private ZooNameDefaultCacheStrategy strategy
;
39 private ZoologicalName familyName
;
40 private ZoologicalName genusName
;
41 private ZoologicalName subGenusName
;
42 private ZoologicalName speciesName
;
43 private ZoologicalName subSpeciesName
;
44 private INomenclaturalAuthor author
;
45 private INomenclaturalAuthor exAuthor
;
46 private INomenclaturalAuthor basAuthor
;
47 private INomenclaturalAuthor exBasAuthor
;
49 private final String familyNameString
= "Familia";
50 private final String genusNameString
= "Genus";
51 private final String speciesNameString
= "Abies alba";
52 private final String subSpeciesNameString
= "Abies alba subsp. beta";
54 private final String authorString
= "L.";
55 private final String exAuthorString
= "Exaut.";
56 private final String basAuthorString
= "Basio, A.";
57 private final String exBasAuthorString
= "ExBas. N.";
59 private final Integer publicationYear
= 1928;
60 private final Integer originalPublicationYear
= 1860;
65 * @throws java.lang.Exception
68 public static void setUpBeforeClass() {
69 DefaultTermInitializer vocabularyStore
= new DefaultTermInitializer();
70 vocabularyStore
.initialize();
74 * @throws java.lang.Exception
77 public void setUp() throws Exception
{
78 strategy
= ZooNameDefaultCacheStrategy
.NewInstance();
79 familyName
= ZoologicalName
.PARSED_NAME(familyNameString
, Rank
.FAMILY());
80 genusName
= ZoologicalName
.PARSED_NAME(genusNameString
, Rank
.GENUS());
82 subGenusName
= ZoologicalName
.NewInstance(Rank
.SUBGENUS());
83 subGenusName
.setGenusOrUninomial("Genus");
84 subGenusName
.setInfraGenericEpithet("InfraGenericPart");
86 speciesName
= ZoologicalName
.PARSED_NAME(speciesNameString
);
87 subSpeciesName
= ZoologicalName
.PARSED_NAME(subSpeciesNameString
);
89 author
= Person
.NewInstance();
90 author
.setNomenclaturalTitle(authorString
);
91 exAuthor
= Person
.NewInstance();
92 exAuthor
.setNomenclaturalTitle(exAuthorString
);
93 basAuthor
= Person
.NewInstance();
94 basAuthor
.setNomenclaturalTitle(basAuthorString
);
95 exBasAuthor
= Person
.NewInstance();
96 exBasAuthor
.setNomenclaturalTitle(exBasAuthorString
);
100 /********* TEST *******************************************/
103 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#NewInstance()}.
106 public final void testNewInstance() {
107 assertNotNull(strategy
);
111 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getNameCache(eu.etaxonomy.cdm.model.common.CdmBase)}.
114 public final void testGetNameCache() {
115 assertEquals(subSpeciesNameString
, subSpeciesName
.getNameCache());
116 assertNull(subSpeciesNameString
, strategy
.getNameCache(null));
120 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getFullNameCache(eu.etaxonomy.cdm.model.common.CdmBase)}.
123 public final void testGetTitleCache() {
124 assertNull(subSpeciesNameString
, strategy
.getTitleCache(null));
125 subSpeciesName
.setCombinationAuthorTeam(author
);
126 subSpeciesName
.setExCombinationAuthorTeam(exAuthor
);
127 subSpeciesName
.setBasionymAuthorTeam(basAuthor
);
128 subSpeciesName
.setExBasionymAuthorTeam(exBasAuthor
);
129 subSpeciesName
.setPublicationYear(publicationYear
);
130 subSpeciesName
.setOriginalPublicationYear(originalPublicationYear
);
132 assertEquals(subSpeciesNameString
, strategy
.getNameCache(subSpeciesName
));
133 assertEquals(subSpeciesNameString
+ " (" + exBasAuthorString
+ " ex " + basAuthorString
+ ", " + originalPublicationYear
+")" + " " + exAuthorString
+ " ex " + authorString
+ ", " + publicationYear
, strategy
.getTitleCache(subSpeciesName
));
135 //Autonym TODO are there autonyms in zoology?
136 subSpeciesName
.setInfraSpecificEpithet("alba");
137 subSpeciesName
.setCombinationAuthorTeam(author
);
138 subSpeciesName
.setBasionymAuthorTeam(null);
139 subSpeciesName
.setExCombinationAuthorTeam(null);
140 subSpeciesName
.setExBasionymAuthorTeam(null);
141 assertEquals("Abies alba alba", strategy
.getNameCache(subSpeciesName
));
142 assertEquals("Abies alba L. subsp. alba", strategy
.getTitleCache(subSpeciesName
));
146 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getAuthorCache(eu.etaxonomy.cdm.model.common.CdmBase)}.
149 public final void testGetAuthorshipCache() {
150 subSpeciesName
.setCombinationAuthorTeam(author
);
151 assertEquals(authorString
, strategy
.getAuthorshipCache(subSpeciesName
));
152 subSpeciesName
.setPublicationYear(publicationYear
);
153 assertEquals(authorString
+ ", " + publicationYear
, strategy
.getAuthorshipCache(subSpeciesName
));
155 subSpeciesName
.setExCombinationAuthorTeam(exAuthor
);
156 assertEquals( exAuthorString
+ " ex " + authorString
+ ", " + publicationYear
, strategy
.getAuthorshipCache(subSpeciesName
));
158 subSpeciesName
.setBasionymAuthorTeam(basAuthor
);
159 assertEquals("(" + basAuthorString
+ ")" + " " + exAuthorString
+ " ex " + authorString
+ ", " + publicationYear
, strategy
.getAuthorshipCache(subSpeciesName
));
160 subSpeciesName
.setOriginalPublicationYear(originalPublicationYear
);
161 assertEquals("(" + basAuthorString
+ ", " + originalPublicationYear
+ ")" + " " + exAuthorString
+ " ex " + authorString
+ ", " + publicationYear
, strategy
.getAuthorshipCache(subSpeciesName
));
163 subSpeciesName
.setExBasionymAuthorTeam(exBasAuthor
);
164 assertEquals("(" + exBasAuthorString
+ " ex " + basAuthorString
+ ", " + originalPublicationYear
+ ")" + " " + exAuthorString
+ " ex " + authorString
+ ", " + publicationYear
, strategy
.getAuthorshipCache(subSpeciesName
));
167 subSpeciesName
.setAuthorshipCache(authorString
);
168 assertEquals("AuthorshipCache must be updated", authorString
, subSpeciesName
.getAuthorshipCache());
169 assertEquals("TitleCache must be updated", "Abies alba subsp. beta " + authorString
, subSpeciesName
.getTitleCache());
170 subSpeciesName
.setProtectedAuthorshipCache(false);
171 //TODO make this not needed
172 subSpeciesName
.setTitleCache(null, false);
173 assertEquals("TitleCache must be updated", "Abies alba subsp. beta " + "(ExBas. N. ex Basio, A., 1860) Exaut. ex L., 1928", subSpeciesName
.getTitleCache());
175 assertNull("Authorship cache for null must return null", strategy
.getAuthorshipCache(null));
180 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getUninomialNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
183 public final void testGetGenusOrUninomialNameCache() {
184 assertEquals(familyNameString
, strategy
.getNameCache(familyName
));
188 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getInfraGenusNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
191 public final void testGetInfraGenusNameCache() {
192 String methodName
= "getInfraGenusNameCache";
193 Method method
= getMethod(NonViralNameDefaultCacheStrategy
.class, methodName
, NonViralName
.class);
195 this.getValue(method
, strategy
, subGenusName
);
196 assertEquals("Genus subg. InfraGenericPart", strategy
.getNameCache(subGenusName
));
200 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getSpeciesNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
203 public final void testGetSpeciesNameCache() {
204 assertEquals(speciesNameString
, strategy
.getNameCache(speciesName
));
208 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getInfraSpeciesNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
211 public final void testGetInfraSpeciesNameCache() {
212 assertEquals(subSpeciesNameString
, strategy
.getNameCache(subSpeciesName
));
217 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getInfraSpeciesNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
220 public final void testAutonyms() {
221 subSpeciesName
.setInfraSpecificEpithet("alba");
222 subSpeciesName
.setCombinationAuthorTeam(author
);
223 assertEquals("Abies alba alba", strategy
.getNameCache(subSpeciesName
));
224 assertEquals("Abies alba L. subsp. alba", strategy
.getTitleCache(subSpeciesName
));
232 protected Method
getMethod(Class clazz
, String methodName
, Class paramClazzes
){
235 method
= clazz
.getDeclaredMethod("getInfraGenusNameCache", paramClazzes
);
236 } catch (SecurityException e
) {
237 logger
.error("SecurityException " + e
.getMessage());
239 } catch (NoSuchMethodException e
) {
240 logger
.error("NoSuchMethodException " + e
.getMessage());
246 protected String
getValue(Method method
, Object object
,Object parameter
){
248 return (String
)method
.invoke(object
, parameter
);
249 } catch (IllegalArgumentException e
) {
250 logger
.error("IllegalArgumentException " + e
.getMessage());
252 } catch (IllegalAccessException e
) {
253 logger
.error("IllegalAccessException " + e
.getMessage());
255 } catch (InvocationTargetException e
) {
256 logger
.error("InvocationTargetException " + e
.getMessage());