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
;
20 import java
.util
.List
;
21 import java
.util
.regex
.Matcher
;
22 import java
.util
.regex
.Pattern
;
24 import junit
.framework
.Assert
;
26 import org
.apache
.log4j
.Logger
;
27 import org
.junit
.After
;
28 import org
.junit
.AfterClass
;
29 import org
.junit
.Before
;
30 import org
.junit
.BeforeClass
;
31 import org
.junit
.Test
;
33 import eu
.etaxonomy
.cdm
.model
.agent
.INomenclaturalAuthor
;
34 import eu
.etaxonomy
.cdm
.model
.agent
.Team
;
35 import eu
.etaxonomy
.cdm
.model
.common
.DefaultTermInitializer
;
36 import eu
.etaxonomy
.cdm
.model
.name
.BotanicalName
;
37 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalCode
;
38 import eu
.etaxonomy
.cdm
.model
.name
.NonViralName
;
39 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
40 import eu
.etaxonomy
.cdm
.model
.name
.ZoologicalName
;
41 //import eu.etaxonomy.cdm.model.reference.Article;
42 //import eu.etaxonomy.cdm.model.reference.Book;
43 //import eu.etaxonomy.cdm.model.reference.BookSection;
44 import eu
.etaxonomy
.cdm
.model
.reference
.IArticle
;
45 import eu
.etaxonomy
.cdm
.model
.reference
.IBook
;
46 import eu
.etaxonomy
.cdm
.model
.reference
.IBookSection
;
47 import eu
.etaxonomy
.cdm
.model
.reference
.IJournal
;
48 import eu
.etaxonomy
.cdm
.model
.reference
.INomenclaturalReference
;
49 import eu
.etaxonomy
.cdm
.model
.reference
.IVolumeReference
;
50 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceType
;
51 //import eu.etaxonomy.cdm.model.reference.Journal;
52 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
57 public class NonViralNameParserImplTest
{
58 private static final Logger logger
= Logger
.getLogger(NonViralNameParserImplTest
.class);
60 final private String strNameFamily
= "Asteraceae";
61 final private String strNameGenus
= "Abies Mueller";
62 final private String strNameGenusUnicode
= "Abies M\u00FCller";
63 final private String strNameAbies1
= "Abies alba";
64 final private String strNameAbiesSub1
= "Abies alba subsp. beta";
65 final private String strNameAbiesAuthor1
= "Abies alba Mueller";
66 final private String strNameAbiesAuthor1Unicode
= "Abies alba M\u00FCller";
67 final private String strNameAbiesBasionymAuthor1
= "Abies alba (Ciardelli) D'Mueller";
68 final private String strNameAbiesBasionymAuthor1Unicode
= "Abies alba (Ciardelli) D'M\u00FCller";
69 final private String strNameAbiesBasionymExAuthor1
="Abies alba (Ciardelli ex Doering) D'Mueller ex. de Greuther";
70 final private String strNameAbiesBasionymExAuthor1Unicode
="Abies alba (Ciardelli ex D\u00F6ring) D'M\u00FCller ex. de Greuther";
71 final private String strNameTeam1
= "Abies alba Mueller & L.";
72 final private String strNameZoo1
= "Abies alba Mueller & L., 1822";
73 final private String strNameZoo2
= "Abies alba (Mueller, 1822) Ciardelli, 2002";
75 final private String strNameEmpty
= "";
76 final private String strNameNull
= null;
78 private NonViralNameParserImpl parser
;
79 private NomenclaturalCode botanicCode
;
82 * @throws java.lang.Exception
85 public static void setUpBeforeClass() throws Exception
{
86 DefaultTermInitializer termInitializer
= new DefaultTermInitializer();
87 termInitializer
.initialize();
92 * @throws java.lang.Exception
95 public void setUp() throws Exception
{
96 parser
= NonViralNameParserImpl
.NewInstance();
97 botanicCode
= NomenclaturalCode
.ICBN
;
101 /*************** TEST *********************************************/
104 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#NEW_INSTANCE()}.
107 public final void testNewInstance() {
108 assertNotNull(parser
);
112 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#TaxonNameParserBotanicalNameImpl()}.
115 public final void testTaxonNameParserBotanicalNameImpl() {
116 logger
.warn("Not yet implemented"); // TODO
120 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseSimpleName(java.lang.String, eu.etaxonomy.cdm.model.name.Rank)}.
123 public final void testParseSimpleName() {
126 ZoologicalName milichiidae
= (ZoologicalName
)parser
.parseSimpleName("Milichiidae", NomenclaturalCode
.ICZN
, null);
127 assertEquals("Family rank expected", Rank
.FAMILY(), milichiidae
.getRank());
128 BotanicalName crepidinae
= (BotanicalName
)parser
.parseSimpleName("Crepidinae", NomenclaturalCode
.ICBN
, null);
129 assertEquals("Family rank expected", Rank
.SUBTRIBE(), crepidinae
.getRank());
130 BotanicalName abies
= (BotanicalName
)parser
.parseSimpleName("Abies", NomenclaturalCode
.ICBN
, null);
131 assertEquals("Family rank expected", Rank
.GENUS(), abies
.getRank());
133 abies
.addParsingProblem(ParserProblem
.CheckRank
);
134 parser
.parseSimpleName(abies
, "Abies", abies
.getRank(), true);
135 assertTrue(abies
.getParsingProblems().contains(ParserProblem
.CheckRank
));
137 BotanicalName rosa
= (BotanicalName
)parser
.parseSimpleName("Rosaceae", NomenclaturalCode
.ICBN
, null);
138 assertTrue("Rosaceae have rank family", rosa
.getRank().equals(Rank
.FAMILY()));
139 assertTrue("Rosaceae must have a rank warning", rosa
.hasProblem(ParserProblem
.CheckRank
));
140 parser
.parseSimpleName(rosa
, "Rosaceaex", abies
.getRank(), true);
141 assertEquals("Rosaceaex have rank genus", Rank
.GENUS(), rosa
.getRank());
142 assertTrue("Rosaceaex must have a rank warning", rosa
.hasProblem(ParserProblem
.CheckRank
));
144 //repeat but remove warning after first parse
145 rosa
= (BotanicalName
)parser
.parseSimpleName("Rosaceae", NomenclaturalCode
.ICBN
, null);
146 assertTrue("Rosaceae have rank family", rosa
.getRank().equals(Rank
.FAMILY()));
147 assertTrue("Rosaceae must have a rank warning", rosa
.hasProblem(ParserProblem
.CheckRank
));
148 rosa
.removeParsingProblem(ParserProblem
.CheckRank
);
149 parser
.parseSimpleName(rosa
, "Rosaceaex", rosa
.getRank(), true);
150 assertEquals("Rosaceaex have rank family", Rank
.FAMILY(), rosa
.getRank());
151 assertFalse("Rosaceaex must have no rank warning", rosa
.hasProblem(ParserProblem
.CheckRank
));
157 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseSubGenericFullName(java.lang.String)}.
160 public final void testParseSubGenericFullName() {
161 logger
.warn("Not yet implemented"); // TODO
165 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseSubGenericSimpleName(java.lang.String)}.
168 public final void testParseSubGenericSimpleName() {
169 logger
.warn("Not yet implemented"); // TODO
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 testParseFullNameUnicode() {
178 NonViralName nameAuthor
= parser
.parseFullName(strNameAbiesAuthor1Unicode
, null, Rank
.SPECIES());
179 assertEquals("Abies", nameAuthor
.getGenusOrUninomial());
180 assertEquals("alba", nameAuthor
.getSpecificEpithet());
181 assertEquals("M\u00FCller", nameAuthor
.getCombinationAuthorTeam().getNomenclaturalTitle());
183 NonViralName nameBasionymAuthor
= parser
.parseFullName(strNameAbiesBasionymAuthor1Unicode
, null, Rank
.SPECIES());
184 assertEquals("Abies", nameBasionymAuthor
.getGenusOrUninomial());
185 assertEquals("alba", nameBasionymAuthor
.getSpecificEpithet());
186 assertEquals("D'M\u00FCller", nameBasionymAuthor
.getCombinationAuthorTeam().getNomenclaturalTitle());
187 INomenclaturalAuthor basionymTeam
= nameBasionymAuthor
.getBasionymAuthorTeam();
188 assertEquals("Ciardelli", basionymTeam
.getNomenclaturalTitle());
190 NonViralName nameBasionymExAuthor
= parser
.parseFullName(strNameAbiesBasionymExAuthor1Unicode
, null, Rank
.SPECIES());
191 assertEquals("Abies", nameBasionymExAuthor
.getGenusOrUninomial());
192 assertEquals("alba", nameBasionymExAuthor
.getSpecificEpithet());
193 assertEquals("D'M\u00FCller", nameBasionymExAuthor
.getExCombinationAuthorTeam().getNomenclaturalTitle());
194 assertEquals("de Greuther", nameBasionymExAuthor
.getCombinationAuthorTeam().getNomenclaturalTitle());
195 INomenclaturalAuthor basionymTeam2
= nameBasionymExAuthor
.getExBasionymAuthorTeam();
196 assertEquals("Ciardelli", basionymTeam2
.getNomenclaturalTitle());
197 INomenclaturalAuthor exBasionymTeam2
= nameBasionymExAuthor
.getBasionymAuthorTeam();
198 assertEquals("D\u00F6ring", exBasionymTeam2
.getNomenclaturalTitle());
200 BotanicalName nameBasionymExAuthor2
= (BotanicalName
)parser
.parseFullName("Washingtonia filifera (Linden ex Andre) H.Wendl. ex de Bary", null, Rank
.SPECIES());
201 assertEquals("Washingtonia", nameBasionymExAuthor2
.getGenusOrUninomial());
202 assertEquals("filifera", nameBasionymExAuthor2
.getSpecificEpithet());
203 assertEquals("H.Wendl.", nameBasionymExAuthor2
.getExCombinationAuthorTeam().getNomenclaturalTitle());
204 assertEquals("de Bary", nameBasionymExAuthor2
.getCombinationAuthorTeam().getNomenclaturalTitle());
205 INomenclaturalAuthor basionymTeam3
= nameBasionymExAuthor2
.getBasionymAuthorTeam();
206 assertEquals("Andre", basionymTeam3
.getNomenclaturalTitle());
207 INomenclaturalAuthor exBasionymTeam3
= nameBasionymExAuthor2
.getExBasionymAuthorTeam();
208 assertEquals("Linden", exBasionymTeam3
.getNomenclaturalTitle());
209 String title
= nameBasionymExAuthor2
.generateTitle();
210 assertEquals("Washingtonia filifera (Linden ex Andre) H.Wendl. ex de Bary", title
);
216 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseFullName(java.lang.String, eu.etaxonomy.cdm.model.name.Rank)}.
219 public final void testParseFullName() {
221 Method parseMethod
= parser
.getClass().getDeclaredMethod("parseFullName", String
.class, NomenclaturalCode
.class, Rank
.class);
222 testName_StringNomcodeRank(parseMethod
);
223 } catch (Exception e
) {
229 NonViralName nameTeam1
= parser
.parseFullName(strNameTeam1
);
230 assertEquals( "Abies", nameTeam1
.getGenusOrUninomial());
231 assertEquals( "alba", nameTeam1
.getSpecificEpithet());
232 assertEquals("Mueller & L.", nameTeam1
.getCombinationAuthorTeam().getNomenclaturalTitle());
233 assertTrue(nameTeam1
.getCombinationAuthorTeam() instanceof Team
);
234 Team team
= (Team
)nameTeam1
.getCombinationAuthorTeam();
235 assertEquals("Mueller", team
.getTeamMembers().get(0).getNomenclaturalTitle());
236 assertEquals("L.", team
.getTeamMembers().get(1).getNomenclaturalTitle());
239 ZoologicalName nameZoo1
= (ZoologicalName
)parser
.parseFullName(strNameZoo1
);
240 assertEquals( "Abies", nameZoo1
.getGenusOrUninomial());
241 assertEquals( "alba", nameZoo1
.getSpecificEpithet());
242 assertEquals("Mueller & L.", nameZoo1
.getCombinationAuthorTeam().getNomenclaturalTitle());
243 assertEquals(NomenclaturalCode
.ICZN
, nameZoo1
.getNomenclaturalCode() );
244 assertEquals(Integer
.valueOf(1822), nameZoo1
.getPublicationYear());
245 assertTrue(nameZoo1
.getCombinationAuthorTeam() instanceof Team
);
246 Team teamZoo
= (Team
)nameZoo1
.getCombinationAuthorTeam();
247 assertEquals("Mueller", teamZoo
.getTeamMembers().get(0).getNomenclaturalTitle());
248 assertEquals("L.", teamZoo
.getTeamMembers().get(1).getNomenclaturalTitle());
250 ZoologicalName nameZoo2
= (ZoologicalName
)parser
.parseFullName(strNameZoo2
);
251 assertEquals(Integer
.valueOf(2002), nameZoo2
.getPublicationYear());
252 assertEquals(Integer
.valueOf(1822), nameZoo2
.getOriginalPublicationYear());
253 assertEquals("Mueller", nameZoo2
.getBasionymAuthorTeam().getNomenclaturalTitle());
254 assertEquals("Ciardelli", nameZoo2
.getCombinationAuthorTeam().getNomenclaturalTitle());
257 BotanicalName autonymName
= (BotanicalName
)parser
.parseFullName("Abies alba Mill. var. alba", NomenclaturalCode
.ICBN
, null);
258 assertFalse("Autonym should be parsable", autonymName
.hasProblem());
262 NonViralName nameEmpty
= parser
.parseFullName(strNameEmpty
);
263 assertNotNull(nameEmpty
);
264 assertEquals("", nameEmpty
.getTitleCache());
267 NonViralName nameNull
= parser
.parseFullName(strNameNull
);
268 assertNull(nameNull
);
271 String fullNameString
= "Abies alba (Greuther & L'Hiver & al. ex M\u00FCller & Schmidt)Clark ex Ciardelli";
272 BotanicalName authorname
= (BotanicalName
)parser
.parseFullName(fullNameString
);
273 assertFalse(authorname
.hasProblem());
274 assertEquals("Basionym author should have 3 authors", 3, ((Team
)authorname
.getExBasionymAuthorTeam()).getTeamMembers().size());
278 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseFullName(java.lang.String, eu.etaxonomy.cdm.model.name.Rank)}.
281 public final void testHybrids() {
283 Method parseMethod
= parser
.getClass().getDeclaredMethod("parseFullName", String
.class, NomenclaturalCode
.class, Rank
.class);
284 testName_StringNomcodeRank(parseMethod
);
285 } catch (Exception e
) {
291 // NonViralName nameTeam1 = parser.parseFullName("Aegilops \u00D7insulae-cypri H. Scholz");
292 NonViralName name1
= parser
.parseFullName("Aegilops \u00D7insulae Scholz", botanicCode
, null);
293 assertTrue("Name must have binom hybrid bit set", name1
.isBinomHybrid());
294 assertFalse("Name must not have monom hybrid bit set", name1
.isMonomHybrid());
295 assertFalse("Name must not have trinom hybrid bit set", name1
.isTrinomHybrid());
296 assertEquals("Species epithet must be 'insulae'", "insulae", name1
.getSpecificEpithet());
299 name1
= parser
.parseFullName("x Aegilops Scholz", botanicCode
, null);
300 assertTrue("Name must have monom hybrid bit set", name1
.isMonomHybrid());
301 assertFalse("Name must not have binom hybrid bit set", name1
.isBinomHybrid());
302 assertFalse("Name must not have trinom hybrid bit set", name1
.isTrinomHybrid());
303 assertEquals("Uninomial must be 'Aegilops'", "Aegilops", name1
.getGenusOrUninomial());
306 name1
= parser
.parseFullName("Aegilops insulae subsp. X abies Scholz", botanicCode
, null);
307 assertFalse("Name must not have monom hybrid bit set", name1
.isMonomHybrid());
308 assertFalse("Name must not have binom hybrid bit set", name1
.isBinomHybrid());
309 assertTrue("Name must have trinom hybrid bit set", name1
.isTrinomHybrid());
310 assertEquals("Infraspecific epithet must be 'abies'", "abies", name1
.getInfraSpecificEpithet());
314 private void testName_StringNomcodeRank(Method parseMethod
)
315 throws InvocationTargetException
, IllegalAccessException
{
316 NonViralName name1
= (NonViralName
)parseMethod
.invoke(parser
, strNameAbies1
, null, Rank
.SPECIES());
317 //parser.parseFullName(strNameAbies1, null, Rank.SPECIES());
318 assertEquals("Abies", name1
.getGenusOrUninomial());
319 assertEquals("alba", name1
.getSpecificEpithet());
321 NonViralName nameAuthor
= (NonViralName
)parseMethod
.invoke(parser
, strNameAbiesAuthor1
, null, Rank
.SPECIES());
322 assertEquals("Abies", nameAuthor
.getGenusOrUninomial());
323 assertEquals("alba", nameAuthor
.getSpecificEpithet());
324 assertEquals("Mueller", nameAuthor
.getCombinationAuthorTeam().getNomenclaturalTitle());
326 NonViralName nameBasionymAuthor
= (NonViralName
)parseMethod
.invoke(parser
, strNameAbiesBasionymAuthor1
, null, Rank
.SPECIES());
327 assertEquals("Abies", nameBasionymAuthor
.getGenusOrUninomial());
328 assertEquals("alba", nameBasionymAuthor
.getSpecificEpithet());
329 assertEquals("D'Mueller", nameBasionymAuthor
.getCombinationAuthorTeam().getNomenclaturalTitle());
330 assertEquals("Ciardelli", nameBasionymAuthor
.getBasionymAuthorTeam().getNomenclaturalTitle());
332 NonViralName nameBasionymExAuthor
= (NonViralName
)parseMethod
.invoke(parser
, strNameAbiesBasionymExAuthor1
, null, Rank
.SPECIES());
333 assertEquals("Abies", nameBasionymExAuthor
.getGenusOrUninomial());
334 assertEquals("alba", nameBasionymExAuthor
.getSpecificEpithet());
335 assertEquals("D'Mueller", nameBasionymExAuthor
.getExCombinationAuthorTeam().getNomenclaturalTitle());
336 assertEquals("de Greuther", nameBasionymExAuthor
.getCombinationAuthorTeam().getNomenclaturalTitle());
337 assertEquals("Ciardelli", nameBasionymExAuthor
.getExBasionymAuthorTeam().getNomenclaturalTitle());
338 assertEquals("Doering", nameBasionymExAuthor
.getBasionymAuthorTeam().getNomenclaturalTitle());
340 NonViralName name2
= (NonViralName
)parseMethod
.invoke(parser
, strNameAbiesSub1
, null, Rank
.SPECIES());
341 assertEquals("Abies", name2
.getGenusOrUninomial());
342 assertEquals("alba", name2
.getSpecificEpithet());
343 assertEquals("beta", name2
.getInfraSpecificEpithet());
344 assertEquals(Rank
.SUBSPECIES(), name2
.getRank());
347 // unparseable *********
348 String problemString
= "sdfjlös wer eer wer";
349 NonViralName
<?
> nameProblem
= (NonViralName
<?
>)parseMethod
.invoke(parser
, problemString
, null, Rank
.SPECIES());
350 List
<ParserProblem
> list
= nameProblem
.getParsingProblems();
351 assertTrue(nameProblem
.getParsingProblem()!=0);
352 assertEquals(problemString
, nameProblem
.getTitleCache());
356 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseReferencedName(NonViralName, java.lang.String, eu.etaxonomy.cdm.model.name.Rank, boolean)(, )}.
359 public final void testParseReferencedName() {
361 Method parseMethod
= parser
.getClass().getDeclaredMethod("parseReferencedName", String
.class, NomenclaturalCode
.class, Rank
.class);
362 testName_StringNomcodeRank(parseMethod
);
363 } catch (Exception e
) {
370 String strNull
= null;
371 NonViralName
<?
> nameNull
= parser
.parseReferencedName(strNull
, null, Rank
.SPECIES());
372 assertNull(nameNull
);
375 String strEmpty
= "";
376 NonViralName
<?
> nameEmpty
= parser
.parseReferencedName(strEmpty
, null, Rank
.SPECIES());
377 assertFalse(nameEmpty
.hasProblem());
378 assertEquals(strEmpty
, nameEmpty
.getFullTitleCache());
379 assertNull(nameEmpty
.getNomenclaturalMicroReference());
383 String strFullWhiteSpcaceAndDot
= "Abies alba Mill., Sp. Pl. 4: 455 . 1987 .";
384 NonViralName
<?
> namefullWhiteSpcaceAndDot
= parser
.parseReferencedName(strFullWhiteSpcaceAndDot
, null, Rank
.SPECIES());
385 assertFullRefStandard(namefullWhiteSpcaceAndDot
);
386 assertTrue(((Reference
)namefullWhiteSpcaceAndDot
.getNomenclaturalReference()).getType().equals(eu
.etaxonomy
.cdm
.model
.reference
.ReferenceType
.Book
));
387 assertEquals( "Abies alba Mill., Sp. Pl. 4: 455. 1987", namefullWhiteSpcaceAndDot
.getFullTitleCache());
390 String fullReference
= "Abies alba Mill., Sp. Pl. 4: 455. 1987";
391 NonViralName
<?
> name1
= parser
.parseReferencedName(fullReference
, null, Rank
.SPECIES());
392 assertFullRefStandard(name1
);
393 assertTrue(((Reference
)name1
.getNomenclaturalReference()).getType().equals(eu
.etaxonomy
.cdm
.model
.reference
.ReferenceType
.Book
));
394 assertEquals(fullReference
, name1
.getFullTitleCache());
395 assertTrue("Name author and reference author should be the same", name1
.getCombinationAuthorTeam() == ((Reference
)name1
.getNomenclaturalReference()).getAuthorTeam());
398 fullReference
= "Abies alba Mill. in Otto, Sp. Pl. 4(6): 455. 1987";
399 NonViralName
<?
> name2
= parser
.parseReferencedName(fullReference
+ ".", null, Rank
.SPECIES());
400 assertFullRefNameStandard(name2
);
401 assertEquals(fullReference
, name2
.getFullTitleCache());
402 assertFalse(name2
.hasProblem());
403 INomenclaturalReference ref
= name2
.getNomenclaturalReference();
404 assertEquals(eu
.etaxonomy
.cdm
.model
.reference
.ReferenceType
.BookSection
, ((Reference
)ref
).getType());
405 IBookSection bookSection
= (IBookSection
) ref
;
406 IBook inBook
= bookSection
.getInBook();
407 assertNotNull(inBook
);
408 assertNotNull(inBook
.getAuthorTeam());
409 assertEquals("Otto", inBook
.getAuthorTeam().getTitleCache());
410 assertEquals("Otto, Sp. Pl. 4(6)", inBook
.getTitleCache());
411 assertEquals("Sp. Pl.", inBook
.getTitle());
412 assertEquals("4(6)", inBook
.getVolume());
413 assertTrue("Name author and reference author should be the same", name2
.getCombinationAuthorTeam() == ((Reference
)name2
.getNomenclaturalReference()).getAuthorTeam());
416 fullReference
= "Abies alba Mill. in Sp. Pl. 4(6): 455. 1987";
417 NonViralName
<?
> name3
= parser
.parseReferencedName(fullReference
, null, Rank
.SPECIES());
418 assertFullRefNameStandard(name3
);
419 assertEquals(fullReference
, name3
.getFullTitleCache());
420 assertFalse(name3
.hasProblem());
421 ref
= name3
.getNomenclaturalReference();
422 assertEquals(eu
.etaxonomy
.cdm
.model
.reference
.ReferenceType
.Article
, ref
.getType());
423 //Article article = (Article)ref;
424 IJournal journal
= ((IArticle
)ref
).getInJournal();
425 assertNotNull(journal
);
426 //assertEquals("Sp. Pl. 4(6)", inBook.getTitleCache());
427 assertEquals("Sp. Pl.",((Reference
) journal
).getTitleCache());
428 assertEquals("Sp. Pl.", journal
.getTitle());
429 assertEquals("4(6)",((IArticle
)ref
).getVolume());
430 assertTrue("Name author and reference author should be the same", name3
.getCombinationAuthorTeam() == name3
.getNomenclaturalReference().getAuthorTeam());
432 //SoftArticle - having "," on position > 4
433 String journalTitle
= "Bull. Soc. Bot.France. Louis., Roi";
434 String yearPart
= " 1987 - 1989";
435 String parsedYear
= "1987-1989";
436 String fullReferenceWithoutYear
= "Abies alba Mill. in " + journalTitle
+ " 4(6): 455.";
437 fullReference
= fullReferenceWithoutYear
+ yearPart
;
438 String fullReferenceWithEnd
= fullReference
+ ".";
439 NonViralName
<?
> name4
= parser
.parseReferencedName(fullReferenceWithEnd
, null, Rank
.SPECIES());
440 assertFalse(name4
.hasProblem());
441 assertFullRefNameStandard(name4
);
442 assertEquals(fullReferenceWithoutYear
+ " " + parsedYear
, name4
.getFullTitleCache());
443 ref
= name4
.getNomenclaturalReference();
444 assertEquals(ReferenceType
.Article
, ref
.getType());
445 //article = (Article)ref;
446 assertEquals(parsedYear
, ref
.getYear());
447 journal
= ((IArticle
)ref
).getInJournal();
448 assertNotNull(journal
);
449 assertEquals(journalTitle
, ((Reference
) journal
).getTitleCache());
450 assertEquals(journalTitle
, journal
.getTitle());
451 assertEquals("4(6)", ((IArticle
)ref
).getVolume());
454 String strNotParsableZoo
= "Abies alba M., 1923, Sp. P. xxwer4352, nom. inval.";
455 ZoologicalName nameZooRefNotParsabel
= (ZoologicalName
)parser
.parseReferencedName(strNotParsableZoo
, null, null);
456 assertTrue(nameZooRefNotParsabel
.hasProblem());
457 List
<ParserProblem
> list
= nameZooRefNotParsabel
.getParsingProblems();
458 assertTrue("List must contain detail and year warning ", list
.contains(ParserProblem
.CheckDetailOrYear
));
459 assertEquals(21, nameZooRefNotParsabel
.getProblemStarts());
460 assertEquals(37, nameZooRefNotParsabel
.getProblemEnds());
461 assertTrue(nameZooRefNotParsabel
.getNomenclaturalReference().hasProblem());
462 list
= nameZooRefNotParsabel
.getNomenclaturalReference().getParsingProblems();
463 assertTrue("List must contain detail and year warning ", list
.contains(ParserProblem
.CheckDetailOrYear
));
465 assertEquals(NomenclaturalCode
.ICZN
, nameZooRefNotParsabel
.getNomenclaturalCode());
466 assertEquals(Integer
.valueOf(1923), nameZooRefNotParsabel
.getPublicationYear());
467 assertEquals(1, nameZooRefNotParsabel
.getStatus().size());
469 String strZooNameSineYear
= "Homo sapiens L., 1758, Sp. An. 3: 345";
470 ZoologicalName nameZooNameSineYear
= (ZoologicalName
)parser
.parseReferencedName(strZooNameSineYear
);
471 assertFalse(nameZooNameSineYear
.hasProblem());
472 assertEquals("Name without reference year must have year", (Integer
)1758, nameZooNameSineYear
.getPublicationYear());
473 assertEquals("Name without reference year must have year", "1758", nameZooNameSineYear
.getNomenclaturalReference().getYear());
475 String strZooNameNewCombination
= "Homo sapiens (L., 1758) Mill., 1830, Sp. An. 3: 345";
476 ZoologicalName nameZooNameNewCombination
= (ZoologicalName
)parser
.parseReferencedName(strZooNameNewCombination
);
477 assertTrue(nameZooNameNewCombination
.hasProblem());
478 list
= nameZooNameNewCombination
.getParsingProblems();
479 assertTrue("List must contain new combination has publication warning ", list
.contains(ParserProblem
.NewCombinationHasPublication
));
480 assertEquals(35, nameZooNameNewCombination
.getProblemStarts());
481 assertEquals(51, nameZooNameNewCombination
.getProblemEnds());
485 String strSpecDetail1
= "Abies alba Mill. in Sp. Pl. 4(6): [455]. 1987";
486 NonViralName
<?
> nameSpecDet1
= parser
.parseReferencedName(strSpecDetail1
+ ".", null, Rank
.SPECIES());
487 assertFalse(nameSpecDet1
.hasProblem());
488 assertEquals(strSpecDetail1
, nameSpecDet1
.getFullTitleCache());
489 assertEquals("[455]", nameSpecDet1
.getNomenclaturalMicroReference());
492 String strSpecDetail2
= "Abies alba Mill. in Sp. Pl. 4(6): couv. 2. 1987";
493 NonViralName
<?
> nameSpecDet2
= parser
.parseReferencedName(strSpecDetail2
+ ".", null, Rank
.SPECIES());
494 assertFalse(nameSpecDet2
.hasProblem());
495 assertEquals(strSpecDetail2
, nameSpecDet2
.getFullTitleCache());
496 assertEquals("couv. 2", nameSpecDet2
.getNomenclaturalMicroReference());
499 String strSpecDetail3
= "Abies alba Mill. in Sp. Pl. 4(6): fig. 455. 1987";
500 NonViralName
<?
> nameSpecDet3
= parser
.parseReferencedName(strSpecDetail3
+ ".", null, Rank
.SPECIES());
501 assertFalse(nameSpecDet3
.hasProblem());
502 assertEquals(strSpecDetail3
, nameSpecDet3
.getFullTitleCache());
503 assertEquals("fig. 455", nameSpecDet3
.getNomenclaturalMicroReference());
506 String strSpecDetail4
= "Abies alba Mill. in Sp. Pl. 4(6): fig. 455-567. 1987";
507 fullReference
= strSpecDetail4
+ ".";
508 NonViralName
<?
> nameSpecDet4
= parser
.parseReferencedName(fullReference
, null, Rank
.SPECIES());
509 assertFalse(nameSpecDet4
.hasProblem());
510 assertEquals(strSpecDetail4
, nameSpecDet4
.getFullTitleCache());
511 assertEquals("fig. 455-567", nameSpecDet4
.getNomenclaturalMicroReference());
515 String strSpecDetail5
= "Abies alba Mill. in Sp. Pl. 4(6): Gard n\u00B0 4. 1987";
516 fullReference
= strSpecDetail5
+ ".";
517 NonViralName
<?
> nameSpecDet5
= parser
.parseReferencedName(fullReference
, null, Rank
.SPECIES());
518 assertFalse(nameSpecDet5
.hasProblem());
519 assertEquals(strSpecDetail5
, nameSpecDet5
.getFullTitleCache());
520 assertEquals("Gard n\u00B0 4", nameSpecDet5
.getNomenclaturalMicroReference());
523 String strSpecDetail6
= "Abies alba Mill. in Sp. Pl. 4(6): 455a. 1987";
524 fullReference
= strSpecDetail6
+ ".";
525 NonViralName
<?
> nameSpecDet6
= parser
.parseReferencedName(fullReference
, null, Rank
.SPECIES());
526 assertFalse(nameSpecDet6
.hasProblem());
527 assertEquals(strSpecDetail6
, nameSpecDet6
.getFullTitleCache());
528 assertEquals("455a", nameSpecDet6
.getNomenclaturalMicroReference());
531 String strSpecDetail7
= "Abies alba Mill. in Sp. Pl. 4(6): pp.455-457. 1987";
532 fullReference
= strSpecDetail7
+ ".";
533 NonViralName
<?
> nameSpecDet7
= parser
.parseReferencedName(fullReference
, null, Rank
.SPECIES());
534 assertFalse(nameSpecDet7
.hasProblem());
535 assertEquals(strSpecDetail7
, nameSpecDet7
.getFullTitleCache());
536 assertEquals("pp.455-457", nameSpecDet7
.getNomenclaturalMicroReference());
539 String strSpecDetail8
= "Abies alba Mill. in Sp. Pl. 4(6): ppp.455-457. 1987";
540 NonViralName
<?
> nameSpecDet8
= parser
.parseReferencedName(strSpecDetail8
, null, Rank
.SPECIES());
541 assertTrue(nameSpecDet8
.hasProblem());
542 assertEquals(20, nameSpecDet8
.getProblemStarts()); //TODO better start behind :
543 assertEquals(51, nameSpecDet8
.getProblemEnds()); //TODO better stop after -457
547 String strSpecDetail9
= "Abies alba Mill. in Sp. Pl. 4(6): pp. 455 - 457. 1987";
548 NonViralName
<?
> nameSpecDet9
= parser
.parseReferencedName(strSpecDetail9
, null, Rank
.SPECIES());
549 assertFalse(nameSpecDet9
.hasProblem());
550 assertEquals(strSpecDetail9
, nameSpecDet9
.getFullTitleCache());
551 assertEquals("pp. 455 - 457", nameSpecDet9
.getNomenclaturalMicroReference());
554 String strSpecDetail10
= "Abies alba Mill. in Sp. Pl. 4(6): p 455. 1987";
555 NonViralName
<?
> nameSpecDet10
= parser
.parseReferencedName(strSpecDetail10
, null, Rank
.SPECIES());
556 assertFalse(nameSpecDet10
.hasProblem());
557 assertEquals(strSpecDetail10
, nameSpecDet10
.getFullTitleCache());
558 assertEquals("p 455", nameSpecDet10
.getNomenclaturalMicroReference());
561 String strSpecDetail11
= "Abies alba Mill. in Sp. Pl. 4(6): p. 455 - 457. 1987";
562 NonViralName
<?
> nameSpecDet11
= parser
.parseReferencedName(strSpecDetail11
, null, Rank
.SPECIES());
563 assertTrue(nameSpecDet11
.hasProblem());
564 list
= nameSpecDet11
.getParsingProblems();
565 assertTrue("Problem is Detail. Must be pp.", list
.contains(ParserProblem
.CheckDetailOrYear
));
566 assertEquals(20, nameSpecDet8
.getProblemStarts()); //TODO better start behind :
567 assertEquals(51, nameSpecDet8
.getProblemEnds()); //TODO better stop after - 457
570 //no volume, no edition
571 String strNoVolume
= "Abies alba Mill., Sp. Pl.: 455. 1987";
572 NonViralName
<?
> nameNoVolume
= parser
.parseReferencedName(strNoVolume
, null, Rank
.SPECIES());
573 assertFalse(nameNoVolume
.hasProblem());
574 assertEquals(strNoVolume
, nameNoVolume
.getFullTitleCache());
575 assertEquals(null, ((IVolumeReference
)(nameNoVolume
.getNomenclaturalReference())).getVolume());
576 assertEquals(null, ((IBook
)nameNoVolume
.getNomenclaturalReference()).getEdition());
579 strNoVolume
= "Abies alba Mill., Sp. Pl. 2: 455. 1987";
580 nameNoVolume
= parser
.parseReferencedName(strNoVolume
, null, Rank
.SPECIES());
581 assertFalse(nameNoVolume
.hasProblem());
582 assertEquals(strNoVolume
, nameNoVolume
.getFullTitleCache());
583 assertEquals("2", ((IVolumeReference
)(nameNoVolume
.getNomenclaturalReference())).getVolume());
584 assertEquals(null, ((IBook
)(nameNoVolume
.getNomenclaturalReference())).getEdition());
587 strNoVolume
= "Abies alba Mill., Sp. Pl. ed. 3: 455. 1987";
588 nameNoVolume
= parser
.parseReferencedName(strNoVolume
, null, Rank
.SPECIES());
589 assertFalse(nameNoVolume
.hasProblem());
590 assertEquals(strNoVolume
, nameNoVolume
.getFullTitleCache());
591 assertEquals(null, ((IVolumeReference
)(nameNoVolume
.getNomenclaturalReference())).getVolume());
592 assertEquals("3", ((IBook
)(nameNoVolume
.getNomenclaturalReference())).getEdition());
595 strNoVolume
= "Abies alba Mill., Sp. Pl. ed. 3, 4(5): 455. 1987";
596 nameNoVolume
= parser
.parseReferencedName(strNoVolume
, null, Rank
.SPECIES());
597 assertFalse(nameNoVolume
.hasProblem());
598 assertEquals(strNoVolume
, nameNoVolume
.getFullTitleCache());
599 assertEquals("4(5)", ((IVolumeReference
)(nameNoVolume
.getNomenclaturalReference())).getVolume());
600 assertEquals("3", ((IBook
)(nameNoVolume
.getNomenclaturalReference())).getEdition());
602 String strUnparsableInRef
= "Abies alba Mill. in -er46: 455. 1987";
603 NonViralName
<?
> nameUnparsableInRef
= parser
.parseReferencedName(strUnparsableInRef
, null, Rank
.SPECIES());
604 assertTrue(nameUnparsableInRef
.hasProblem());
605 list
= nameUnparsableInRef
.getParsingProblems();
606 assertTrue("Unparsable title", list
.contains(ParserProblem
.UnparsableReferenceTitle
));
607 assertEquals(strUnparsableInRef
, nameUnparsableInRef
.getFullTitleCache());
608 assertEquals(20, nameUnparsableInRef
.getProblemStarts());
609 assertEquals(25, nameUnparsableInRef
.getProblemEnds());
613 String strNoSeparator
= "Abies alba Mill. Sp. Pl. ed. 3, 4(5): 455. 1987";
614 NonViralName
<?
> nameNoSeparator
= parser
.parseReferencedName(strNoSeparator
, NomenclaturalCode
.ICBN
, Rank
.SPECIES());
615 assertTrue(nameNoSeparator
.hasProblem());
616 list
= nameNoSeparator
.getParsingProblems();
617 assertTrue("Problem is missing name-reference separator", list
.contains(ParserProblem
.NameReferenceSeparation
));
618 assertEquals(strNoSeparator
, nameNoSeparator
.getFullTitleCache());
619 assertEquals(10, nameNoSeparator
.getProblemStarts()); //TODO better start behind Mill. (?)
620 assertEquals(47, nameNoSeparator
.getProblemEnds()); //TODO better stop before :
622 String strUnparsableInRef2
= "Hieracium pepsicum L., My Bookkkk 1. 1903";
623 NonViralName
<?
> nameUnparsableInRef2
= parser
.parseReferencedName(strUnparsableInRef2
, null, Rank
.SPECIES());
624 assertTrue(nameUnparsableInRef2
.hasProblem());
625 list
= nameUnparsableInRef2
.getParsingProblems();
626 assertTrue("Problem detail", list
.contains(ParserProblem
.CheckDetailOrYear
));
627 assertEquals(strUnparsableInRef2
, nameUnparsableInRef2
.getFullTitleCache());
628 assertEquals(23, nameUnparsableInRef2
.getProblemStarts());
629 assertEquals(41, nameUnparsableInRef2
.getProblemEnds());
632 String strUnparsableInRef3
= "Hieracium pespcim N., My Bookkkk 1. 1902";
633 NonViralName
<?
> nameUnparsableInRef3
= parser
.parseReferencedName(strUnparsableInRef3
, null, null);
634 assertTrue(nameUnparsableInRef3
.hasProblem());
635 list
= nameUnparsableInRef3
.getParsingProblems();
636 assertTrue("Problem detail", list
.contains(ParserProblem
.CheckDetailOrYear
));
637 assertEquals(strUnparsableInRef3
, nameUnparsableInRef3
.getFullTitleCache());
638 assertEquals(22, nameUnparsableInRef3
.getProblemStarts());
639 assertEquals(40, nameUnparsableInRef3
.getProblemEnds());
641 String strUnparsableInRef4
= "Hieracium pepsicum (Hsllreterto) L., My Bookkkk 1. 1903";
642 NonViralName
<?
> nameUnparsableInRef4
= parser
.parseReferencedName(strUnparsableInRef4
, null, null);
643 assertTrue(nameUnparsableInRef4
.hasProblem());
644 list
= nameUnparsableInRef4
.getParsingProblems();
645 assertTrue("Problem detail", list
.contains(ParserProblem
.CheckDetailOrYear
));
646 assertEquals(strUnparsableInRef4
, nameUnparsableInRef4
.getFullTitleCache());
647 assertEquals(37, nameUnparsableInRef4
.getProblemStarts());
648 assertEquals(55, nameUnparsableInRef4
.getProblemEnds());
650 String strSameName
= "Hieracium pepcum (Hsllreterto) L., My Bokkk 1. 1903";
651 NonViralName
<?
> nameSameName
= nameUnparsableInRef4
;
652 parser
.parseReferencedName(nameSameName
, strSameName
, null, true);
653 assertTrue(nameSameName
.hasProblem());
654 list
= nameSameName
.getParsingProblems();
655 assertTrue("Problem detail", list
.contains(ParserProblem
.CheckDetailOrYear
));
656 assertEquals(strSameName
, nameSameName
.getFullTitleCache());
657 assertEquals(35, nameSameName
.getProblemStarts());
658 assertEquals(51, nameSameName
.getProblemEnds());
660 String strGenusUnparse
= "Hieracium L., jlklk";
661 NonViralName
<?
> nameGenusUnparse
=
662 parser
.parseReferencedName(strGenusUnparse
, null, null);
663 assertTrue(nameGenusUnparse
.hasProblem());
664 list
= nameGenusUnparse
.getParsingProblems();
665 assertTrue("Problem detail", list
.contains(ParserProblem
.CheckDetailOrYear
));
666 assertTrue("Problem uninomial", list
.contains(ParserProblem
.CheckRank
));
667 assertEquals(strGenusUnparse
, nameGenusUnparse
.getFullTitleCache());
668 assertEquals(0, nameGenusUnparse
.getProblemStarts());
669 assertEquals(19, nameGenusUnparse
.getProblemEnds());
671 String strGenusUnparse2
= "Hieracium L., Per Luigi: 44. 1987";
672 NonViralName
<?
> nameGenusUnparse2
=
673 parser
.parseReferencedName(strGenusUnparse2
, null, Rank
.FAMILY());
674 assertFalse(nameGenusUnparse2
.hasProblem());
675 assertEquals(strGenusUnparse2
, nameGenusUnparse2
.getFullTitleCache());
676 assertEquals(-1, nameGenusUnparse2
.getProblemStarts());
677 assertEquals(-1, nameGenusUnparse2
.getProblemEnds());
679 String strBookSection2
= "Hieracium vulgatum subsp. acuminatum (Jord.) Zahn in Schinz & Keller, Fl. Schweiz, ed. 2, 2: 288. 1905-1907";
680 String strBookSection2NoComma
= "Hieracium vulgatum subsp. acuminatum (Jord.) Zahn in Schinz & Keller, Fl. Schweiz ed. 2, 2: 288. 1905-1907";
681 NonViralName
<?
> nameBookSection2
=
682 parser
.parseReferencedName(strBookSection2
, null, null);
683 assertFalse(nameBookSection2
.hasProblem());
684 assertEquals(strBookSection2NoComma
, nameBookSection2
.getFullTitleCache());
685 assertEquals(-1, nameBookSection2
.getProblemStarts());
686 assertEquals(-1, nameBookSection2
.getProblemEnds());
687 assertNull((nameBookSection2
.getNomenclaturalReference()).getDatePublished().getStart());
688 assertEquals("1905-1907", ((IBookSection
)nameBookSection2
.getNomenclaturalReference()).getInBook().getDatePublished().getYear());
691 String strBookSection
= "Hieracium vulgatum subsp. acuminatum (Jord.) Zahn in Schinz & Keller, Fl. Schweiz ed. 2, 2: 288. 1905";
692 NonViralName
<?
> nameBookSection
=
693 parser
.parseReferencedName(strBookSection
, null, null);
694 assertFalse(nameBookSection
.hasProblem());
695 assertEquals(strBookSection
, nameBookSection
.getFullTitleCache());
696 assertEquals(-1, nameBookSection
.getProblemStarts());
697 assertEquals(-1, nameBookSection
.getProblemEnds());
698 assertNull(((IBookSection
)nameBookSection
.getNomenclaturalReference()).getInBook().getDatePublished().getStart());
699 assertEquals("1905", ((IBookSection
)nameBookSection
.getNomenclaturalReference()).getDatePublished().getYear());
701 String strXXXs
= "Abies alba, Soer der 1987";
702 NonViralName
<?
> problemName
= parser
.parseReferencedName(strXXXs
, null, null);
703 assertTrue(problemName
.hasProblem());
704 list
= problemName
.getParsingProblems();
705 assertTrue("Problem must be name-reference separation", list
.contains(ParserProblem
.NameReferenceSeparation
));
706 parser
.parseReferencedName(problemName
, strBookSection
, null, true);
707 assertFalse(problemName
.hasProblem());
709 problemName
= parser
.parseFullName(strXXXs
, null, null);
710 assertTrue(problemName
.hasProblem());
711 list
= problemName
.getParsingProblems();
712 assertTrue("Name part must be unparsable", list
.contains(ParserProblem
.UnparsableNamePart
));
715 String testParsable
= "Pithecellobium macrostachyum Benth.";
716 assertTrue(isParsable(testParsable
, NomenclaturalCode
.ICBN
));
718 testParsable
= "Pithecellobium macrostachyum (Benth.)";
719 assertTrue(isParsable(testParsable
, NomenclaturalCode
.ICBN
));
721 testParsable
= "Pithecellobium macrostachyum (Benth., 1845)";
722 assertTrue(isParsable(testParsable
, NomenclaturalCode
.ICZN
));
724 testParsable
= "Pithecellobium macrostachyum L., Sp. Pl. 3: n\u00B0 123. 1753."; //00B0 is degree character
725 assertTrue(isParsable(testParsable
, NomenclaturalCode
.ICBN
));
727 testParsable
= "Hieracium lachenalii subsp. acuminatum (Jord.) Zahn in Hegi, Ill. Fl. Mitt.-Eur. 6: 1285. 1929";
728 assertTrue("Reference title should support special characters as separators like - and &", isParsable(testParsable
, NomenclaturalCode
.ICBN
));
730 testParsable
= "Hieracium lachenalii subsp. acuminatum (Jord.) Zahn in Hegi, Ill. Fl. Mitt.&Eur. 6: 1285. 1929";
731 assertTrue("Reference title should support special characters as separators like - and &", isParsable(testParsable
, NomenclaturalCode
.ICBN
));
733 testParsable
= "Hieracium lachenalii subsp. acuminatum (Jord.) Zahn in Hegi, Ill. Fl. Mitt.-Eur.& 6: 1285. 1929";
734 assertFalse("Reference title should not support special characters like - and & at the end of the title", isParsable(testParsable
, NomenclaturalCode
.ICBN
));
735 assertTrue("Problem must be reference title", getProblems(testParsable
, NomenclaturalCode
.ICBN
).
736 contains(ParserProblem
.UnparsableReferenceTitle
));
738 testParsable
= "Hieracium lachenalii subsp. acuminatum (Jord.) Zahn in Hegi, Ill. Fl. Mitt.:Eur. 6: 1285. 1929";
739 assertFalse("Reference title should not support detail separator", isParsable(testParsable
, NomenclaturalCode
.ICBN
));
740 assertTrue("Problem must be reference title", getProblems(testParsable
, NomenclaturalCode
.ICBN
).
741 contains(ParserProblem
.UnparsableReferenceTitle
));
743 testParsable
= "Hieracium lachenalii subsp. acuminatum (Jord.) Zahn in Hegi, Ill. Fl. (Mitt.) 6: 1285. 1929";
744 assertTrue("Reference title should support brackets", isParsable(testParsable
, NomenclaturalCode
.ICBN
));
746 testParsable
= "Hieracium lachenalii subsp. acuminatum (Jord.) Zahn in Hegi, Ill. Fl. (Mitt.) 6: 1285. 1929";
747 assertTrue("Reference title should support brackets", isParsable(testParsable
, NomenclaturalCode
.ICBN
));
749 testParsable
= "Hieracium lachenalii Zahn, nom. illeg.";
750 assertTrue("Reference should not be obligatory if a nom status exist", isParsable(testParsable
, NomenclaturalCode
.ICBN
));
752 testParsable
= "Hieracium lachenalii, nom. illeg.";
753 assertTrue("Authorship should not be obligatory if followed by nom status", isParsable(testParsable
, NomenclaturalCode
.ICBN
));
755 testParsable
= "Hieracium lachenalii, Ill. Fl. (Mitt.) 6: 1285. 1929";
756 assertFalse("Author is obligatory if followed by reference", isParsable(testParsable
, NomenclaturalCode
.ICBN
));
757 assertTrue("Problem must be name-reference separation", getProblems(testParsable
, NomenclaturalCode
.ICBN
).
758 contains(ParserProblem
.NameReferenceSeparation
));
760 testParsable
= "Hieracium lachenalii in Hegi, Ill. Fl. (Mitt.) 6: 1285. 1929";
761 assertFalse("Author is obligatory if followed by reference", isParsable(testParsable
, NomenclaturalCode
.ICBN
));
762 assertTrue("Problem must be name-reference separation", getProblems(testParsable
, NomenclaturalCode
.ICBN
).
763 contains(ParserProblem
.NameReferenceSeparation
));
765 testParsable
= "Abies alba Mill. var. alba";
766 assertTrue("Autonym problem", isParsable(testParsable
, NomenclaturalCode
.ICBN
));
769 testParsable
= "Hieracium antarcticum d'Urv. in M\u00E9m. Soc. Linn. Paris 4: 608. 1826";
770 // testParsable = "Hieracium antarcticum Urv. in M\u00E9m. Soc. Linn. Paris 4: 608. 1826";
771 assertTrue("Name with apostrophe is not parsable", isParsable(testParsable
, NomenclaturalCode
.ICBN
));
773 testParsable
= "Cichorium intybus subsp. glaucum (Hoffmanns. & Link) Tzvelev in Komarov, Fl. SSSR 29: 17. 1964";
774 assertTrue("Name is not parsable", isParsable(testParsable
, NomenclaturalCode
.ICBN
));
780 * @param testParsable
784 private List
<ParserProblem
> getProblems(String string
, NomenclaturalCode code
) {
785 List
<ParserProblem
> result
;
786 result
= parser
.parseReferencedName(string
, code
, null).getParsingProblems();
790 private boolean isParsable(String string
, NomenclaturalCode code
){
791 NonViralName
<?
> name
= parser
.parseReferencedName(string
, code
, null);
792 return ! name
.hasProblem();
795 private void assertFullRefNameStandard(NonViralName
<?
> name
){
796 assertEquals("Abies", name
.getGenusOrUninomial());
797 assertEquals("alba", name
.getSpecificEpithet());
798 assertEquals("Mill.", name
.getAuthorshipCache());
799 assertEquals("455", name
.getNomenclaturalMicroReference());
800 assertNotNull(name
.getNomenclaturalReference());
803 private void assertFullRefStandard(NonViralName
<?
> name
){
804 assertEquals("Abies", name
.getGenusOrUninomial());
805 assertEquals("alba", name
.getSpecificEpithet());
806 assertEquals("Mill.", name
.getAuthorshipCache());
807 assertEquals("455", name
.getNomenclaturalMicroReference());
808 assertNotNull(name
.getNomenclaturalReference());
809 INomenclaturalReference ref
= (INomenclaturalReference
)name
.getNomenclaturalReference();
810 assertEquals("1987", ref
.getYear());
811 Reference refBase
= (Reference
)ref
;
812 assertEquals("Sp. Pl.", refBase
.getTitle());
817 public void testNeverEndingParsing(){
818 //some full titles result in never ending parsing process https://dev.e-taxonomy.eu/trac/ticket/1556
820 String irinaExample
= "Milichiidae Sharp, 1899, Insects. Part II. Hymenopteracontinued (Tubulifera and Aculeata), Coleoptera, Strepsiptera, Lepidoptera, Diptera, Aphaniptera, Thysanoptera, Hemiptera, Anoplura 6: 504. 1899";
821 // irinaExample = "Milichiidae Sharp, 1899, Insects. Part II. Uiuis Iuiui Hymenopteracontinued (Tubulifera and Aculeata), Coleoptera, Strepsiptera, Lepidoptera, Diptera, Aphaniptera, Thysanoptera, Hemiptera, Anoplura 6: 504. 1899";
822 NonViralName nvn
= this.parser
.parseReferencedName(irinaExample
, NomenclaturalCode
.ICZN
, null);
823 int parsingProblem
= nvn
.getParsingProblem();
824 Assert
.assertEquals("Name should have only rank warning", 1, parsingProblem
);
825 Assert
.assertEquals("Titlecache", "Milichiidae Sharp, 1899", nvn
.getTitleCache());
826 Assert
.assertEquals("If this line reached everything should be ok", "Milichiidae", nvn
.getGenusOrUninomial());
828 String anotherExample
= "Scorzonera hispanica var. brevifolia Boiss. & Balansa in Boissier, Diagn. Pl. Orient., ser. 2 6: 119. 1859.";
829 nvn
= this.parser
.parseReferencedName(anotherExample
, NomenclaturalCode
.ICBN
, null);
830 parsingProblem
= nvn
.getParsingProblem();
831 Assert
.assertEquals("Problem should be 0", 0, parsingProblem
);
832 Assert
.assertEquals("Titlecache", "Scorzonera hispanica var. brevifolia Boiss. & Balansa", nvn
.getTitleCache());
833 Assert
.assertEquals("If this line reached everything should be ok", "Scorzonera", nvn
.getGenusOrUninomial());
835 String unparsable
= "Taraxacum nevskii L., Trudy Bot. Inst. Nauk S.S.S.R., Ser. 1, Fl. Sist. Vyssh. Rast. 4: 293. 1937.";
836 String unparsableA
= "Taraxacum nevskii L. in Trudy Bot. Inst. Nauk: 293. 1937.";
837 nvn
= this.parser
.parseReferencedName(unparsable
, NomenclaturalCode
.ICBN
, null);
838 Assert
.assertEquals("Titlecache", "Taraxacum nevskii L.", nvn
.getTitleCache());
839 Assert
.assertEquals("If this line reached everything should be ok", "Taraxacum", nvn
.getGenusOrUninomial());
840 parsingProblem
= nvn
.getParsingProblem();
841 Assert
.assertEquals("Name should no warnings or errors", 0, parsingProblem
);
843 String unparsable2
= "Hieracium pxxx Dahlst., Kongl. Svenska Vetensk. Acad. Handl. ser. 2, 26(3): 255. 1894";
844 String unparsable2A
= "Hieracium pxxx Dahlst., Kongl Svenska Vetensk Acad Handl, 26: 255. 1894.";
845 nvn
= this.parser
.parseReferencedName(unparsable2
, NomenclaturalCode
.ICBN
, null);
846 Assert
.assertEquals("Titlecache", "Hieracium pxxx Dahlst.", nvn
.getTitleCache());
847 Assert
.assertEquals("If this line reached everything should be ok", "Hieracium", nvn
.getGenusOrUninomial());
848 parsingProblem
= nvn
.getParsingProblem();
849 Assert
.assertEquals("Name should no warnings or errors", 0, parsingProblem
);
852 String again
= "Adiantum emarginatum Bory ex. Willd., Species Plantarum, ed. 4,5,1: 449,450. 1810";
853 nvn
= this.parser
.parseReferencedName(again
, NomenclaturalCode
.ICBN
, null);
854 Assert
.assertEquals("Titlecache", "Adiantum emarginatum Bory ex Willd.", nvn
.getTitleCache());
855 Assert
.assertEquals("If this line reached everything should be ok", "Adiantum", nvn
.getGenusOrUninomial());
860 public final void testSeriesPart(){
861 Pattern seriesPattern
= Pattern
.compile(NonViralNameParserImpl
.pSeriesPart
);
862 Matcher matcher
= seriesPattern
.matcher("ser. 2");
863 Assert
.assertTrue("", matcher
.matches());
867 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#fullTeams(java.lang.String)}.
870 public final void testFullTeams() {
871 logger
.warn("Not yet implemented"); // TODO
875 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#authorTeamAndEx(java.lang.String)}.
878 public final void testAuthorTeamAndEx() {
879 logger
.warn("Not yet implemented"); // TODO
883 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#authorTeam(java.lang.String)}.
886 public final void testAuthorTeam() {
887 logger
.warn("Not yet implemented"); // TODO
891 * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseCultivar(java.lang.String)}.
894 public final void testParseCultivar() {
895 logger
.warn("Not yet implemented"); // TODO