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
.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
;
47 public class NonViralNameParserImplTest
{
48 private static final Logger logger
= Logger
.getLogger(NonViralNameParserImplTest
.class);
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";
65 final private String strNameEmpty
= "";
66 final private String strNameNull
= null;
68 private NonViralNameParserImpl parser
;
69 private NomenclaturalCode botanicCode
;
72 * @throws java.lang.Exception
75 public static void setUpBeforeClass() throws Exception
{
76 DefaultTermInitializer termInitializer
= new DefaultTermInitializer();
77 termInitializer
.initialize();
81 * @throws java.lang.Exception
84 public static void tearDownAfterClass() throws Exception
{
88 * @throws java.lang.Exception
91 public void setUp() throws Exception
{
92 parser
= NonViralNameParserImpl
.NewInstance();
93 botanicCode
= NomenclaturalCode
.ICBN
;
97 * @throws java.lang.Exception
100 public void tearDown() throws Exception
{
103 /*************** TEST *********************************************/
106 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#NEW_INSTANCE()}.
109 public final void testNEW_INSTANCE() {
110 logger
.warn("Not yet implemented"); // TODO
114 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#TaxonNameParserBotanicalNameImpl()}.
117 public final void testTaxonNameParserBotanicalNameImpl() {
118 logger
.warn("Not yet implemented"); // TODO
122 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseSimpleName(java.lang.String, eu.etaxonomy.cdm.model.name.Rank)}.
125 public final void testParseSimpleName() {
126 logger
.warn("Not yet implemented"); // TODO
130 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseSubGenericFullName(java.lang.String)}.
133 public final void testParseSubGenericFullName() {
134 logger
.warn("Not yet implemented"); // TODO
138 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseSubGenericSimpleName(java.lang.String)}.
141 public final void testParseSubGenericSimpleName() {
142 logger
.warn("Not yet implemented"); // TODO
146 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseFullName(java.lang.String, eu.etaxonomy.cdm.model.name.Rank)}.
149 @Ignore //TODO Character encoding in svn
150 public final void testParseFullNameUnicode() {
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());
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());
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());
176 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseFullName(java.lang.String, eu.etaxonomy.cdm.model.name.Rank)}.
179 public final void testParseFullName() {
181 Method parseMethod
= parser
.getClass().getDeclaredMethod("parseFullName", String
.class, NomenclaturalCode
.class, Rank
.class);
182 testName_StringNomcodeRank(parseMethod
);
183 } catch (Exception e
) {
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());
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());
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());
219 NonViralName nameEmpty
= parser
.parseFullName(strNameEmpty
);
220 assertNotNull(nameEmpty
);
221 assertEquals("", nameEmpty
.getTitleCache());
224 NonViralName nameNull
= parser
.parseFullName(strNameNull
);
225 assertNull(nameNull
);
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());
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());
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());
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());
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());
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());
269 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseReferencedName(NonViralName, java.lang.String, eu.etaxonomy.cdm.model.name.Rank, boolean)(, )}.
272 public final void testParseReferencedName() {
274 Method parseMethod
= parser
.getClass().getDeclaredMethod("parseReferencedName", String
.class, NomenclaturalCode
.class, Rank
.class);
275 testName_StringNomcodeRank(parseMethod
);
276 } catch (Exception e
) {
283 String strNull
= null;
284 NonViralName
<?
> nameNull
= parser
.parseReferencedName(strNull
, null, Rank
.SPECIES());
285 assertNull(nameNull
);
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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
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());
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());
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
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());
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());
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());
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());
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());
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 :
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
607 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#fullTeams(java.lang.String)}.
610 public final void testFullTeams() {
611 logger
.warn("Not yet implemented"); // TODO
615 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#authorTeamAndEx(java.lang.String)}.
618 public final void testAuthorTeamAndEx() {
619 logger
.warn("Not yet implemented"); // TODO
623 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#authorTeam(java.lang.String)}.
626 public final void testAuthorTeam() {
627 logger
.warn("Not yet implemented"); // TODO
631 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseCultivar(java.lang.String)}.
634 public final void testParseCultivar() {
635 logger
.warn("Not yet implemented"); // TODO