Name cache strategy for infrageneric names and rank species group
[cdmlib.git] / cdmlib-model / src / test / java / eu / etaxonomy / cdm / strategy / parser / NonViralNameParserImplTest.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.strategy.parser;
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.assertNull;
16 import static org.junit.Assert.assertTrue;
17
18 import java.lang.reflect.InvocationTargetException;
19 import java.lang.reflect.Method;
20
21 import org.apache.log4j.Logger;
22 import org.junit.After;
23 import org.junit.AfterClass;
24 import org.junit.Before;
25 import org.junit.BeforeClass;
26 import org.junit.Ignore;
27 import org.junit.Test;
28
29 import eu.etaxonomy.cdm.model.agent.Team;
30 import eu.etaxonomy.cdm.model.common.DefaultTermInitializer;
31 import eu.etaxonomy.cdm.model.name.BotanicalName;
32 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
33 import eu.etaxonomy.cdm.model.name.NonViralName;
34 import eu.etaxonomy.cdm.model.name.Rank;
35 import eu.etaxonomy.cdm.model.name.ZoologicalName;
36 import eu.etaxonomy.cdm.model.reference.Article;
37 import eu.etaxonomy.cdm.model.reference.Book;
38 import eu.etaxonomy.cdm.model.reference.BookSection;
39 import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;
40 import eu.etaxonomy.cdm.model.reference.Journal;
41 import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;
42
43 /**
44 * @author a.mueller
45 *
46 */
47 public class NonViralNameParserImplTest {
48 private static final Logger logger = Logger.getLogger(NonViralNameParserImplTest.class);
49
50 final private String strNameFamily = "Asteraceae";
51 final private String strNameGenus = "Abies Mueller";
52 final private String strNameGenusUnicode = "Abies M�ller";
53 final private String strNameAbies1 = "Abies alba";
54 final private String strNameAbiesSub1 = "Abies alba subsp. beta";
55 final private String strNameAbiesAuthor1 = "Abies alba Mueller";
56 final private String strNameAbiesAuthor1Unicode = "Abies alba M�ller";
57 final private String strNameAbiesBasionymAuthor1 = "Abies alba (Ciardelli) D'Mueller";
58 final private String strNameAbiesBasionymAuthor1Unicode = "Abies alba (Ciardelli) D'Müller";
59 final private String strNameAbiesBasionymExAuthor1 ="Abies alba (Ciardelli ex Doering) D'Mueller ex. de Greuther";
60 final private String strNameAbiesBasionymExAuthor1Unicode ="Abies alba (Ciardelli ex D�ring) D'�ller ex. de Greuther";
61 final private String strNameTeam1 = "Abies alba Mueller & L.";
62 final private String strNameZoo1 = "Abies alba Mueller & L., 1822";
63 final private String strNameZoo2 = "Abies alba (Mueller, 1822) Ciardelli, 2002";
64
65 final private String strNameEmpty = "";
66 final private String strNameNull = null;
67
68 private NonViralNameParserImpl parser ;
69 private NomenclaturalCode botanicCode;
70
71 /**
72 * @throws java.lang.Exception
73 */
74 @BeforeClass
75 public static void setUpBeforeClass() throws Exception {
76 DefaultTermInitializer termInitializer = new DefaultTermInitializer();
77 termInitializer.initialize();
78 }
79
80 /**
81 * @throws java.lang.Exception
82 */
83 @AfterClass
84 public static void tearDownAfterClass() throws Exception {
85 }
86
87 /**
88 * @throws java.lang.Exception
89 */
90 @Before
91 public void setUp() throws Exception {
92 parser = NonViralNameParserImpl.NewInstance();
93 botanicCode = NomenclaturalCode.ICBN;
94 }
95
96 /**
97 * @throws java.lang.Exception
98 */
99 @After
100 public void tearDown() throws Exception {
101 }
102
103 /*************** TEST *********************************************/
104
105 /**
106 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#NEW_INSTANCE()}.
107 */
108 @Test
109 public final void testNEW_INSTANCE() {
110 logger.warn("Not yet implemented"); // TODO
111 }
112
113 /**
114 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#TaxonNameParserBotanicalNameImpl()}.
115 */
116 @Test
117 public final void testTaxonNameParserBotanicalNameImpl() {
118 logger.warn("Not yet implemented"); // TODO
119 }
120
121 /**
122 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseSimpleName(java.lang.String, eu.etaxonomy.cdm.model.name.Rank)}.
123 */
124 @Test
125 public final void testParseSimpleName() {
126 logger.warn("Not yet implemented"); // TODO
127 }
128
129 /**
130 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseSubGenericFullName(java.lang.String)}.
131 */
132 @Test
133 public final void testParseSubGenericFullName() {
134 logger.warn("Not yet implemented"); // TODO
135 }
136
137 /**
138 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseSubGenericSimpleName(java.lang.String)}.
139 */
140 @Test
141 public final void testParseSubGenericSimpleName() {
142 logger.warn("Not yet implemented"); // TODO
143 }
144
145 /**
146 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseFullName(java.lang.String, eu.etaxonomy.cdm.model.name.Rank)}.
147 */
148 @Test
149 @Ignore //TODO Character encoding in svn
150 public final void testParseFullNameUnicode() {
151
152 NonViralName nameAuthor = parser.parseFullName(strNameAbiesAuthor1Unicode, null, Rank.SPECIES());
153 assertEquals("Abies", nameAuthor.getGenusOrUninomial());
154 assertEquals("alba", nameAuthor.getSpecificEpithet());
155 assertEquals("M�ller", nameAuthor.getCombinationAuthorTeam().getNomenclaturalTitle());
156
157 NonViralName nameBasionymAuthor = parser.parseFullName(strNameAbiesBasionymAuthor1Unicode, null, Rank.SPECIES());
158 assertEquals("Abies", nameBasionymAuthor.getGenusOrUninomial());
159 assertEquals("alba", nameBasionymAuthor.getSpecificEpithet());
160 assertEquals("D'M�ller", nameBasionymAuthor.getCombinationAuthorTeam().getNomenclaturalTitle());
161 BotanicalName basionym = (BotanicalName)nameBasionymAuthor.getBasionym();
162 assertEquals("Ciardelli", basionym.getCombinationAuthorTeam().getNomenclaturalTitle());
163
164 NonViralName nameBasionymExAuthor = parser.parseFullName(strNameAbiesBasionymExAuthor1Unicode, null, Rank.SPECIES());
165 assertEquals("Abies", nameBasionymExAuthor.getGenusOrUninomial());
166 assertEquals("alba", nameBasionymExAuthor.getSpecificEpithet());
167 assertEquals("D'M�ller", nameBasionymExAuthor.getCombinationAuthorTeam().getNomenclaturalTitle());
168 assertEquals("de Greuther", nameBasionymExAuthor.getExCombinationAuthorTeam().getNomenclaturalTitle());
169 BotanicalName basionym2 = (BotanicalName)nameBasionymExAuthor.getBasionym();
170 assertEquals("Ciardelli", basionym2.getCombinationAuthorTeam().getNomenclaturalTitle());
171 assertEquals("D�ring", basionym2.getExCombinationAuthorTeam().getNomenclaturalTitle());
172 }
173
174
175 /**
176 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseFullName(java.lang.String, eu.etaxonomy.cdm.model.name.Rank)}.
177 */
178 @Test
179 public final void testParseFullName() {
180 try {
181 Method parseMethod = parser.getClass().getDeclaredMethod("parseFullName", String.class, NomenclaturalCode.class, Rank.class);
182 testName_StringNomcodeRank(parseMethod);
183 } catch (Exception e) {
184 e.printStackTrace();
185 assertTrue(false);
186 }
187
188 //Team
189 NonViralName nameTeam1 = parser.parseFullName(strNameTeam1);
190 assertEquals( "Abies", nameTeam1.getGenusOrUninomial());
191 assertEquals( "alba", nameTeam1.getSpecificEpithet());
192 assertEquals("Mueller & L.", nameTeam1.getCombinationAuthorTeam().getNomenclaturalTitle());
193 assertTrue(nameTeam1.getCombinationAuthorTeam() instanceof Team);
194 Team team = (Team)nameTeam1.getCombinationAuthorTeam();
195 assertEquals("Mueller", team.getTeamMembers().get(0).getNomenclaturalTitle());
196 assertEquals("L.", team.getTeamMembers().get(1).getNomenclaturalTitle());
197
198 //ZooName
199 ZoologicalName nameZoo1 = (ZoologicalName)parser.parseFullName(strNameZoo1);
200 assertEquals( "Abies", nameZoo1.getGenusOrUninomial());
201 assertEquals( "alba", nameZoo1.getSpecificEpithet());
202 assertEquals("Mueller & L.", nameZoo1.getCombinationAuthorTeam().getNomenclaturalTitle());
203 assertEquals(NomenclaturalCode.ICZN, nameZoo1.getNomenclaturalCode() );
204 assertEquals(Integer.valueOf(1822), nameZoo1.getPublicationYear());
205 assertTrue(nameZoo1.getCombinationAuthorTeam() instanceof Team);
206 Team teamZoo = (Team)nameZoo1.getCombinationAuthorTeam();
207 assertEquals("Mueller", teamZoo.getTeamMembers().get(0).getNomenclaturalTitle());
208 assertEquals("L.", teamZoo.getTeamMembers().get(1).getNomenclaturalTitle());
209
210 ZoologicalName nameZoo2 = (ZoologicalName)parser.parseFullName(strNameZoo2);
211 assertEquals(Integer.valueOf(2002), nameZoo2.getPublicationYear());
212 assertEquals(Integer.valueOf(1822), nameZoo2.getOriginalPublicationYear());
213 assertEquals("Mueller", nameZoo2.getBasionymAuthorTeam().getNomenclaturalTitle());
214 assertEquals("Ciardelli", nameZoo2.getCombinationAuthorTeam().getNomenclaturalTitle());
215
216
217
218 //empty
219 NonViralName nameEmpty = parser.parseFullName(strNameEmpty);
220 assertNotNull(nameEmpty);
221 assertEquals("", nameEmpty.getTitleCache());
222
223 //null
224 NonViralName nameNull = parser.parseFullName(strNameNull);
225 assertNull(nameNull);
226 }
227
228 private void testName_StringNomcodeRank(Method parseMethod)
229 throws InvocationTargetException, IllegalAccessException {
230 NonViralName name1 = (NonViralName)parseMethod.invoke(parser, strNameAbies1, null, Rank.SPECIES());
231 //parser.parseFullName(strNameAbies1, null, Rank.SPECIES());
232 assertEquals("Abies", name1.getGenusOrUninomial());
233 assertEquals("alba", name1.getSpecificEpithet());
234
235 NonViralName nameAuthor = (NonViralName)parseMethod.invoke(parser, strNameAbiesAuthor1, null, Rank.SPECIES());
236 assertEquals("Abies", nameAuthor.getGenusOrUninomial());
237 assertEquals("alba", nameAuthor.getSpecificEpithet());
238 assertEquals("Mueller", nameAuthor.getCombinationAuthorTeam().getNomenclaturalTitle());
239
240 NonViralName nameBasionymAuthor = (NonViralName)parseMethod.invoke(parser, strNameAbiesBasionymAuthor1, null, Rank.SPECIES());
241 assertEquals("Abies", nameBasionymAuthor.getGenusOrUninomial());
242 assertEquals("alba", nameBasionymAuthor.getSpecificEpithet());
243 assertEquals("D'Mueller", nameBasionymAuthor.getCombinationAuthorTeam().getNomenclaturalTitle());
244 assertEquals("Ciardelli", nameBasionymAuthor.getBasionymAuthorTeam().getNomenclaturalTitle());
245
246 NonViralName nameBasionymExAuthor = (NonViralName)parseMethod.invoke(parser, strNameAbiesBasionymExAuthor1, null, Rank.SPECIES());
247 assertEquals("Abies", nameBasionymExAuthor.getGenusOrUninomial());
248 assertEquals("alba", nameBasionymExAuthor.getSpecificEpithet());
249 assertEquals("D'Mueller", nameBasionymExAuthor.getCombinationAuthorTeam().getNomenclaturalTitle());
250 assertEquals("de Greuther", nameBasionymExAuthor.getExCombinationAuthorTeam().getNomenclaturalTitle());
251 assertEquals("Ciardelli", nameBasionymExAuthor.getBasionymAuthorTeam().getNomenclaturalTitle());
252 assertEquals("Doering", nameBasionymExAuthor.getExBasionymAuthorTeam().getNomenclaturalTitle());
253
254 NonViralName name2 = (NonViralName)parseMethod.invoke(parser, strNameAbiesSub1, null, Rank.SPECIES());
255 assertEquals("Abies", name2.getGenusOrUninomial());
256 assertEquals("alba", name2.getSpecificEpithet());
257 assertEquals("beta", name2.getInfraSpecificEpithet());
258 assertEquals(Rank.SUBSPECIES(), name2.getRank());
259
260
261 // unparseable *********
262 String problemString = "sdfjlös wer eer wer";
263 NonViralName<?> nameProblem = (NonViralName<?>)parseMethod.invoke(parser, problemString, null, Rank.SPECIES());
264 assertTrue(nameProblem.getHasProblem());
265 assertEquals(problemString, nameProblem.getTitleCache());
266 }
267
268 /**
269 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseReferencedName(NonViralName, java.lang.String, eu.etaxonomy.cdm.model.name.Rank, boolean)(, )}.
270 */
271 @Test
272 public final void testParseReferencedName() {
273 try {
274 Method parseMethod = parser.getClass().getDeclaredMethod("parseReferencedName", String.class, NomenclaturalCode.class, Rank.class);
275 testName_StringNomcodeRank(parseMethod);
276 } catch (Exception e) {
277 e.printStackTrace();
278 assertTrue(false);
279 }
280
281
282 //null
283 String strNull = null;
284 NonViralName<?> nameNull = parser.parseReferencedName(strNull, null, Rank.SPECIES());
285 assertNull(nameNull);
286
287 //Empty
288 String strEmpty = "";
289 NonViralName<?> nameEmpty = parser.parseReferencedName(strEmpty, null, Rank.SPECIES());
290 assertFalse(nameEmpty.hasProblem());
291 assertEquals(strEmpty, nameEmpty.getFullTitleCache());
292 assertNull(nameEmpty.getNomenclaturalMicroReference());
293
294
295 //Whitespaces
296 String strFullWhiteSpcaceAndDot = "Abies alba Mill., Sp. Pl. 4: 455 . 1987 .";
297 NonViralName<?> namefullWhiteSpcaceAndDot = parser.parseReferencedName(strFullWhiteSpcaceAndDot, null, Rank.SPECIES());
298 assertFullRefStandard(namefullWhiteSpcaceAndDot);
299 assertTrue(namefullWhiteSpcaceAndDot.getNomenclaturalReference() instanceof Book);
300 assertEquals( "Abies alba Mill., Sp. Pl. 4: 455. 1987", namefullWhiteSpcaceAndDot.getFullTitleCache());
301
302 //Book
303 String fullReference = "Abies alba Mill., Sp. Pl. 4: 455. 1987";
304 NonViralName<?> name1 = parser.parseReferencedName(fullReference, null, Rank.SPECIES());
305 assertFullRefStandard(name1);
306 assertTrue(name1.getNomenclaturalReference() instanceof Book);
307 assertEquals(fullReference, name1.getFullTitleCache());
308 assertTrue("Name author and reference author should be the same", name1.getCombinationAuthorTeam() == name1.getNomenclaturalReference().getAuthorTeam());
309
310 //Book Section
311 fullReference = "Abies alba Mill. in Otto, Sp. Pl. 4(6): 455. 1987";
312 NonViralName<?> name2 = parser.parseReferencedName(fullReference + ".", null, Rank.SPECIES());
313 assertFullRefNameStandard(name2);
314 assertEquals(fullReference, name2.getFullTitleCache());
315 assertFalse(name2.hasProblem());
316 INomenclaturalReference ref = (INomenclaturalReference)name2.getNomenclaturalReference();
317 assertEquals(BookSection.class, ref.getClass());
318 BookSection bookSection = (BookSection)ref;
319 Book inBook = bookSection.getInBook();
320 assertNotNull(inBook);
321 assertNotNull(inBook.getAuthorTeam());
322 assertEquals("Otto", inBook.getAuthorTeam().getTitleCache());
323 assertEquals("Otto, Sp. Pl. 4(6)", inBook.getTitleCache());
324 assertEquals("Sp. Pl.", inBook.getTitle());
325 assertEquals("4(6)", inBook.getVolume());
326 assertTrue("Name author and reference author should be the same", name2.getCombinationAuthorTeam() == name2.getNomenclaturalReference().getAuthorTeam());
327
328 //Article
329 fullReference = "Abies alba Mill. in Sp. Pl. 4(6): 455. 1987";
330 NonViralName<?> name3 = parser.parseReferencedName(fullReference, null, Rank.SPECIES());
331 assertFullRefNameStandard(name3);
332 assertEquals(fullReference, name3.getFullTitleCache());
333 assertFalse(name3.hasProblem());
334 ref = (INomenclaturalReference)name3.getNomenclaturalReference();
335 assertEquals(Article.class, ref.getClass());
336 Article article = (Article)ref;
337 Journal journal = article.getInJournal();
338 assertNotNull(journal);
339 //assertEquals("Sp. Pl. 4(6)", inBook.getTitleCache());
340 assertEquals("Sp. Pl.", journal.getTitleCache());
341 assertEquals("Sp. Pl.", journal.getTitle());
342 assertEquals("4(6)", article.getVolume());
343 assertTrue("Name author and reference author should be the same", name3.getCombinationAuthorTeam() == name3.getNomenclaturalReference().getAuthorTeam());
344
345 //SoftArticle - having "," on position > 4
346 String journalTitle = "Bull. Soc. Bot.France. Louis., Roi";
347 String yearPart = " 1987 - 1989";
348 String parsedYear = "1987-1989";
349 String fullReferenceWithoutYear = "Abies alba Mill. in " + journalTitle + " 4(6): 455.";
350 fullReference = fullReferenceWithoutYear + yearPart;
351 String fullReferenceWithEnd = fullReference + ".";
352 NonViralName<?> name4 = parser.parseReferencedName(fullReferenceWithEnd, null, Rank.SPECIES());
353 assertFalse(name4.hasProblem());
354 assertFullRefNameStandard(name4);
355 assertEquals(fullReferenceWithoutYear + " " + parsedYear, name4.getFullTitleCache());
356 ref = (INomenclaturalReference)name4.getNomenclaturalReference();
357 assertEquals(Article.class, ref.getClass());
358 article = (Article)ref;
359 assertEquals(parsedYear, ref.getYear());
360 journal = article.getInJournal();
361 assertNotNull(journal);
362 assertEquals(journalTitle, journal.getTitleCache());
363 assertEquals(journalTitle, journal.getTitle());
364 assertEquals("4(6)", article.getVolume());
365
366 //Zoo name
367 String strNotParsableZoo = "Abies alba M., 1923, Sp. P. xxwer4352, nom. inval.";
368 ZoologicalName nameZooRefNotParsabel = (ZoologicalName)parser.parseReferencedName(strNotParsableZoo, null, null);
369 assertTrue(nameZooRefNotParsabel.hasProblem());
370 assertEquals(21, nameZooRefNotParsabel.getProblemStarts());
371 assertEquals(37, nameZooRefNotParsabel.getProblemEnds());
372 assertTrue(nameZooRefNotParsabel.getNomenclaturalReference().hasProblem());
373 assertEquals(NomenclaturalCode.ICZN, nameZooRefNotParsabel.getNomenclaturalCode());
374 assertEquals(Integer.valueOf(1923), nameZooRefNotParsabel.getPublicationYear());
375 assertEquals(1, nameZooRefNotParsabel.getStatus().size());
376
377 //Special MicroRefs
378 String strSpecDetail1 = "Abies alba Mill. in Sp. Pl. 4(6): [455]. 1987";
379 NonViralName<?> nameSpecDet1 = parser.parseReferencedName(strSpecDetail1 + ".", null, Rank.SPECIES());
380 assertFalse(nameSpecDet1.hasProblem());
381 assertEquals(strSpecDetail1, nameSpecDet1.getFullTitleCache());
382 assertEquals("[455]", nameSpecDet1.getNomenclaturalMicroReference());
383
384 //Special MicroRefs
385 String strSpecDetail2 = "Abies alba Mill. in Sp. Pl. 4(6): couv. 2. 1987";
386 NonViralName<?> nameSpecDet2 = parser.parseReferencedName(strSpecDetail2 + ".", null, Rank.SPECIES());
387 assertFalse(nameSpecDet2.hasProblem());
388 assertEquals(strSpecDetail2, nameSpecDet2.getFullTitleCache());
389 assertEquals("couv. 2", nameSpecDet2.getNomenclaturalMicroReference());
390
391 //Special MicroRefs
392 String strSpecDetail3 = "Abies alba Mill. in Sp. Pl. 4(6): fig. 455. 1987";
393 NonViralName<?> nameSpecDet3 = parser.parseReferencedName(strSpecDetail3 + ".", null, Rank.SPECIES());
394 assertFalse(nameSpecDet3.hasProblem());
395 assertEquals(strSpecDetail3, nameSpecDet3.getFullTitleCache());
396 assertEquals("fig. 455", nameSpecDet3.getNomenclaturalMicroReference());
397
398 //Special MicroRefs
399 String strSpecDetail4 = "Abies alba Mill. in Sp. Pl. 4(6): fig. 455-567. 1987";
400 fullReference = strSpecDetail4 + ".";
401 NonViralName<?> nameSpecDet4 = parser.parseReferencedName(fullReference, null, Rank.SPECIES());
402 assertFalse(nameSpecDet4.hasProblem());
403 assertEquals(strSpecDetail4, nameSpecDet4.getFullTitleCache());
404 assertEquals("fig. 455-567", nameSpecDet4.getNomenclaturalMicroReference());
405
406
407 //Special MicroRefs
408 String strSpecDetail5 = "Abies alba Mill. in Sp. Pl. 4(6): Gard n� 4. 1987";
409 fullReference = strSpecDetail5 + ".";
410 NonViralName<?> nameSpecDet5 = parser.parseReferencedName(fullReference, null, Rank.SPECIES());
411 assertFalse(nameSpecDet5.hasProblem());
412 assertEquals(strSpecDetail5, nameSpecDet5.getFullTitleCache());
413 assertEquals("Gard n� 4", nameSpecDet5.getNomenclaturalMicroReference());
414
415 //Special MicroRefs
416 String strSpecDetail6 = "Abies alba Mill. in Sp. Pl. 4(6): 455a. 1987";
417 fullReference = strSpecDetail6 + ".";
418 NonViralName<?> nameSpecDet6 = parser.parseReferencedName(fullReference, null, Rank.SPECIES());
419 assertFalse(nameSpecDet6.hasProblem());
420 assertEquals(strSpecDetail6, nameSpecDet6.getFullTitleCache());
421 assertEquals("455a", nameSpecDet6.getNomenclaturalMicroReference());
422
423 //Special MicroRefs
424 String strSpecDetail7 = "Abies alba Mill. in Sp. Pl. 4(6): pp.455-457. 1987";
425 fullReference = strSpecDetail7 + ".";
426 NonViralName<?> nameSpecDet7 = parser.parseReferencedName(fullReference, null, Rank.SPECIES());
427 assertFalse(nameSpecDet7.hasProblem());
428 assertEquals(strSpecDetail7, nameSpecDet7.getFullTitleCache());
429 assertEquals("pp.455-457", nameSpecDet7.getNomenclaturalMicroReference());
430
431 //Special MicroRefs
432 String strSpecDetail8 = "Abies alba Mill. in Sp. Pl. 4(6): ppp.455-457. 1987";
433 NonViralName<?> nameSpecDet8 = parser.parseReferencedName(strSpecDetail8, null, Rank.SPECIES());
434 assertTrue(nameSpecDet8.hasProblem());
435 assertEquals(20, nameSpecDet8.getProblemStarts()); //TODO better start behind :
436 assertEquals(51, nameSpecDet8.getProblemEnds()); //TODO better stop after -457
437
438
439 //Special MicroRefs
440 String strSpecDetail9 = "Abies alba Mill. in Sp. Pl. 4(6): pp. 455 - 457. 1987";
441 NonViralName<?> nameSpecDet9 = parser.parseReferencedName(strSpecDetail9, null, Rank.SPECIES());
442 assertFalse(nameSpecDet9.hasProblem());
443 assertEquals(strSpecDetail9, nameSpecDet9.getFullTitleCache());
444 assertEquals("pp. 455 - 457", nameSpecDet9.getNomenclaturalMicroReference());
445
446 //Special MicroRefs
447 String strSpecDetail10 = "Abies alba Mill. in Sp. Pl. 4(6): p 455. 1987";
448 NonViralName<?> nameSpecDet10 = parser.parseReferencedName(strSpecDetail10, null, Rank.SPECIES());
449 assertFalse(nameSpecDet10.hasProblem());
450 assertEquals(strSpecDetail10, nameSpecDet10.getFullTitleCache());
451 assertEquals("p 455", nameSpecDet10.getNomenclaturalMicroReference());
452
453 //Special MicroRefs
454 String strSpecDetail11 = "Abies alba Mill. in Sp. Pl. 4(6): p. 455 - 457. 1987";
455 NonViralName<?> nameSpecDet11 = parser.parseReferencedName(strSpecDetail11, null, Rank.SPECIES());
456 assertTrue(nameSpecDet11.hasProblem());
457 assertEquals(20, nameSpecDet8.getProblemStarts()); //TODO better start behind :
458 assertEquals(51, nameSpecDet8.getProblemEnds()); //TODO better stop after - 457
459
460
461 //no volume, no edition
462 String strNoVolume = "Abies alba Mill., Sp. Pl.: 455. 1987";
463 NonViralName<?> nameNoVolume = parser.parseReferencedName(strNoVolume, null, Rank.SPECIES());
464 assertFalse(nameNoVolume.hasProblem());
465 assertEquals(strNoVolume, nameNoVolume.getFullTitleCache());
466 assertEquals(null, ((Book)nameNoVolume.getNomenclaturalReference()).getVolume());
467 assertEquals(null, ((Book)nameNoVolume.getNomenclaturalReference()).getEdition());
468
469 //volume, no edition
470 strNoVolume = "Abies alba Mill., Sp. Pl. 2: 455. 1987";
471 nameNoVolume = parser.parseReferencedName(strNoVolume, null, Rank.SPECIES());
472 assertFalse(nameNoVolume.hasProblem());
473 assertEquals(strNoVolume, nameNoVolume.getFullTitleCache());
474 assertEquals("2", ((Book)nameNoVolume.getNomenclaturalReference()).getVolume());
475 assertEquals(null, ((Book)nameNoVolume.getNomenclaturalReference()).getEdition());
476
477 //no volume, edition
478 strNoVolume = "Abies alba Mill., Sp. Pl. ed. 3: 455. 1987";
479 nameNoVolume = parser.parseReferencedName(strNoVolume, null, Rank.SPECIES());
480 assertFalse(nameNoVolume.hasProblem());
481 assertEquals(strNoVolume, nameNoVolume.getFullTitleCache());
482 assertEquals(null, ((Book)nameNoVolume.getNomenclaturalReference()).getVolume());
483 assertEquals("3", ((Book)nameNoVolume.getNomenclaturalReference()).getEdition());
484
485 //volume, edition
486 strNoVolume = "Abies alba Mill., Sp. Pl. ed. 3, 4(5): 455. 1987";
487 nameNoVolume = parser.parseReferencedName(strNoVolume, null, Rank.SPECIES());
488 assertFalse(nameNoVolume.hasProblem());
489 assertEquals(strNoVolume, nameNoVolume.getFullTitleCache());
490 assertEquals("4(5)", ((Book)nameNoVolume.getNomenclaturalReference()).getVolume());
491 assertEquals("3", ((Book)nameNoVolume.getNomenclaturalReference()).getEdition());
492
493 String strUnparsableInRef = "Abies alba Mill. in -er46: 455. 1987";
494 NonViralName<?> nameUnparsableInRef = parser.parseReferencedName(strUnparsableInRef, null, Rank.SPECIES());
495 assertTrue(nameUnparsableInRef.hasProblem());
496 assertEquals(strUnparsableInRef, nameUnparsableInRef.getFullTitleCache());
497 assertEquals(20, nameUnparsableInRef.getProblemStarts());
498 assertEquals(25, nameUnparsableInRef.getProblemEnds());
499
500
501 //volume, edition
502 String strNoSeparator = "Abies alba Mill. Sp. Pl. ed. 3, 4(5): 455. 1987";
503 NonViralName<?> nameNoSeparator = parser.parseReferencedName(strNoSeparator, NomenclaturalCode.ICBN, Rank.SPECIES());
504 assertTrue(nameNoSeparator.hasProblem());
505 assertEquals(strNoSeparator, nameNoSeparator.getFullTitleCache());
506 assertEquals(10, nameNoSeparator.getProblemStarts()); //TODO better start behind Mill. (?)
507 assertEquals(47, nameNoSeparator.getProblemEnds()); //TODO better stop before :
508
509 String strUnparsableInRef2 = "Hieracium pepsicum L., My Bookkkk 1. 1903";
510 NonViralName<?> nameUnparsableInRef2 = parser.parseReferencedName(strUnparsableInRef2, null, Rank.SPECIES());
511 assertTrue(nameUnparsableInRef2.hasProblem());
512 assertEquals(strUnparsableInRef2, nameUnparsableInRef2.getFullTitleCache());
513 assertEquals(23, nameUnparsableInRef2.getProblemStarts());
514 assertEquals(41, nameUnparsableInRef2.getProblemEnds());
515
516
517 String strUnparsableInRef3 = "Hieracium pespcim N., My Bookkkk 1. 1902";
518 NonViralName<?> nameUnparsableInRef3 = parser.parseReferencedName(strUnparsableInRef3, null, null);
519 assertTrue(nameUnparsableInRef3.hasProblem());
520 assertEquals(strUnparsableInRef3, nameUnparsableInRef3.getFullTitleCache());
521 assertEquals(22, nameUnparsableInRef3.getProblemStarts());
522 assertEquals(40, nameUnparsableInRef3.getProblemEnds());
523
524 String strUnparsableInRef4 = "Hieracium pepsicum (Hsllreterto) L., My Bookkkk 1. 1903";
525 NonViralName<?> nameUnparsableInRef4 = parser.parseReferencedName(strUnparsableInRef4, null, null);
526 assertTrue(nameUnparsableInRef4.hasProblem());
527 assertEquals(strUnparsableInRef4, nameUnparsableInRef4.getFullTitleCache());
528 assertEquals(37, nameUnparsableInRef4.getProblemStarts());
529 assertEquals(55, nameUnparsableInRef4.getProblemEnds());
530
531 String strSameName = "Hieracium pepcum (Hsllreterto) L., My Bokkk 1. 1903";
532 NonViralName<?> nameSameName = nameUnparsableInRef4;
533 parser.parseReferencedName(nameSameName, strSameName, null, true);
534 assertTrue(nameSameName.hasProblem());
535 assertEquals(strSameName, nameSameName.getFullTitleCache());
536 assertEquals(35, nameSameName.getProblemStarts());
537 assertEquals(51, nameSameName.getProblemEnds());
538
539 String strGenusUnparse = "Hieracium L., jlklk";
540 NonViralName<?> nameGenusUnparse =
541 parser.parseReferencedName(strGenusUnparse, null, null);
542 assertTrue(nameGenusUnparse.hasProblem());
543 assertEquals(strGenusUnparse, nameGenusUnparse.getFullTitleCache());
544 assertEquals(0, nameGenusUnparse.getProblemStarts());
545 assertEquals(19, nameGenusUnparse.getProblemEnds());
546
547 String strGenusUnparse2 = "Hieracium L., Per Luigi: 44. 1987";
548 NonViralName<?> nameGenusUnparse2 =
549 parser.parseReferencedName(strGenusUnparse2, null, Rank.FAMILY());
550 assertFalse(nameGenusUnparse2.hasProblem());
551 assertEquals(strGenusUnparse2, nameGenusUnparse2.getFullTitleCache());
552 assertEquals(-1, nameGenusUnparse2.getProblemStarts());
553 assertEquals(-1, nameGenusUnparse2.getProblemEnds());
554
555 String strBookSection2 = "Hieracium vulgatum subsp. acuminatum (Jord.) Zahn in Schinz & Keller, Fl. Schweiz, ed. 2, 2: 288. 1905-1907";
556 NonViralName<?> nameBookSection2 =
557 parser.parseReferencedName(strBookSection2, null, null);
558 assertFalse(nameBookSection2.hasProblem());
559 assertEquals(strBookSection2, nameBookSection2.getFullTitleCache());
560 assertEquals(-1, nameBookSection2.getProblemStarts());
561 assertEquals(-1, nameBookSection2.getProblemEnds());
562 assertNull(((BookSection)nameBookSection2.getNomenclaturalReference()).getDatePublished().getStart());
563 assertEquals("1905-1907", ((BookSection)nameBookSection2.getNomenclaturalReference()).getInBook().getDatePublished().getYear());
564
565
566 String strBookSection = "Hieracium vulgatum subsp. acuminatum (Jord.) Zahn in Schinz & Keller, Fl. Schweiz, ed. 2, 2: 288. 1905";
567 NonViralName<?> nameBookSection =
568 parser.parseReferencedName(strBookSection, null, null);
569 assertFalse(nameBookSection.hasProblem());
570 assertEquals(strBookSection, nameBookSection.getFullTitleCache());
571 assertEquals(-1, nameBookSection.getProblemStarts());
572 assertEquals(-1, nameBookSection.getProblemEnds());
573 assertNull(((BookSection)nameBookSection.getNomenclaturalReference()).getInBook().getDatePublished().getStart());
574 assertEquals("1905", ((BookSection)nameBookSection.getNomenclaturalReference()).getDatePublished().getYear());
575
576 String strXXXs = "Abies alba, Soer der 1987";
577 NonViralName<?> problemName = parser.parseReferencedName(strXXXs, null, null);
578 assertTrue(problemName.hasProblem());
579 parser.parseReferencedName(problemName, strBookSection, null, true);
580 assertFalse(problemName.hasProblem());
581
582
583
584 }
585
586 private void assertFullRefNameStandard(NonViralName<?> name){
587 assertEquals("Abies", name.getGenusOrUninomial());
588 assertEquals("alba", name.getSpecificEpithet());
589 assertEquals("Mill.", name.getAuthorshipCache());
590 assertEquals("455", name.getNomenclaturalMicroReference());
591 assertNotNull(name.getNomenclaturalReference());
592 }
593
594 private void assertFullRefStandard(NonViralName<?> name){
595 assertEquals("Abies", name.getGenusOrUninomial());
596 assertEquals("alba", name.getSpecificEpithet());
597 assertEquals("Mill.", name.getAuthorshipCache());
598 assertEquals("455", name.getNomenclaturalMicroReference());
599 assertNotNull(name.getNomenclaturalReference());
600 INomenclaturalReference ref = (INomenclaturalReference)name.getNomenclaturalReference();
601 assertEquals("1987", ref.getYear());
602 StrictReferenceBase refBase = (StrictReferenceBase)ref;
603 assertEquals("Sp. Pl.", refBase.getTitle());
604 }
605
606 /**
607 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#fullTeams(java.lang.String)}.
608 */
609 @Test
610 public final void testFullTeams() {
611 logger.warn("Not yet implemented"); // TODO
612 }
613
614 /**
615 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#authorTeamAndEx(java.lang.String)}.
616 */
617 @Test
618 public final void testAuthorTeamAndEx() {
619 logger.warn("Not yet implemented"); // TODO
620 }
621
622 /**
623 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#authorTeam(java.lang.String)}.
624 */
625 @Test
626 public final void testAuthorTeam() {
627 logger.warn("Not yet implemented"); // TODO
628 }
629
630 /**
631 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseCultivar(java.lang.String)}.
632 */
633 @Test
634 public final void testParseCultivar() {
635 logger.warn("Not yet implemented"); // TODO
636 }
637
638 }