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