Project

General

Profile

Download (24.7 KB) Statistics
| Branch: | Tag: | Revision:
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
}
    (1-1/1)