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