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
.parser
;
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
;
18 import java
.lang
.reflect
.InvocationTargetException
;
19 import java
.lang
.reflect
.Method
;
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
;
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
;
46 public class NonViralNameParserImplTest
{
47 private static final Logger logger
= Logger
.getLogger(NonViralNameParserImplTest
.class);
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";
64 final private String strNameEmpty
= "";
65 final private String strNameNull
= null;
67 private NonViralNameParserImpl parser
;
68 private NomenclaturalCode botanicCode
;
71 * @throws java.lang.Exception
74 public static void setUpBeforeClass() throws Exception
{
78 * @throws java.lang.Exception
81 public static void tearDownAfterClass() throws Exception
{
85 * @throws java.lang.Exception
88 public void setUp() throws Exception
{
89 parser
= NonViralNameParserImpl
.NewInstance();
90 botanicCode
= NomenclaturalCode
.ICBN
;
94 * @throws java.lang.Exception
97 public void tearDown() throws Exception
{
100 /*************** TEST *********************************************/
103 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#NEW_INSTANCE()}.
106 public final void testNEW_INSTANCE() {
107 logger
.warn("Not yet implemented"); // TODO
111 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#TaxonNameParserBotanicalNameImpl()}.
114 public final void testTaxonNameParserBotanicalNameImpl() {
115 logger
.warn("Not yet implemented"); // TODO
119 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseSimpleName(java.lang.String, eu.etaxonomy.cdm.model.name.Rank)}.
122 public final void testParseSimpleName() {
123 logger
.warn("Not yet implemented"); // TODO
127 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseSubGenericFullName(java.lang.String)}.
130 public final void testParseSubGenericFullName() {
131 logger
.warn("Not yet implemented"); // TODO
135 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseSubGenericSimpleName(java.lang.String)}.
138 public final void testParseSubGenericSimpleName() {
139 logger
.warn("Not yet implemented"); // TODO
143 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseFullName(java.lang.String, eu.etaxonomy.cdm.model.name.Rank)}.
146 @Ignore //TODO Character encoding in svn
147 public final void testParseFullNameUnicode() {
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());
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());
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());
173 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseFullName(java.lang.String, eu.etaxonomy.cdm.model.name.Rank)}.
176 public final void testParseFullName() {
178 Method parseMethod
= parser
.getClass().getDeclaredMethod("parseFullName", String
.class, NomenclaturalCode
.class, Rank
.class);
179 testName_StringNomcodeRank(parseMethod
);
180 } catch (Exception e
) {
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());
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());
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());
216 NonViralName nameEmpty
= parser
.parseFullName(strNameEmpty
);
217 assertNotNull(nameEmpty
);
218 assertEquals("", nameEmpty
.getTitleCache());
221 NonViralName nameNull
= parser
.parseFullName(strNameNull
);
222 assertNull(nameNull
);
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());
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());
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());
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());
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());
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());
266 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseReferencedName(NonViralName, java.lang.String, eu.etaxonomy.cdm.model.name.Rank, boolean)(, )}.
269 public final void testParseReferencedName() {
271 Method parseMethod
= parser
.getClass().getDeclaredMethod("parseReferencedName", String
.class, NomenclaturalCode
.class, Rank
.class);
272 testName_StringNomcodeRank(parseMethod
);
273 } catch (Exception e
) {
280 String strNull
= null;
281 NonViralName
<?
> nameNull
= parser
.parseReferencedName(strNull
, null, Rank
.SPECIES());
282 assertNull(nameNull
);
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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
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());
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());
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
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());
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());
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());
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());
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());
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 :
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
593 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#fullTeams(java.lang.String)}.
596 public final void testFullTeams() {
597 logger
.warn("Not yet implemented"); // TODO
601 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#authorTeamAndEx(java.lang.String)}.
604 public final void testAuthorTeamAndEx() {
605 logger
.warn("Not yet implemented"); // TODO
609 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#authorTeam(java.lang.String)}.
612 public final void testAuthorTeam() {
613 logger
.warn("Not yet implemented"); // TODO
617 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseCultivar(java.lang.String)}.
620 public final void testParseCultivar() {
621 logger
.warn("Not yet implemented"); // TODO