nomCode valid representation -> "valid"
[cdmlib.git] / cdmlib-model / src / test / java / eu / etaxonomy / cdm / strategy / parser / NonViralNameParserImplTest.java
index c50a1f78c688abc6d2873690aeb8ac98dfa5747f..dac4bb93d7833f69e4df93efa9d197b6c11c7b01 100644 (file)
@@ -9,7 +9,11 @@
  \r
 package eu.etaxonomy.cdm.strategy.parser;\r
 \r
-import static org.junit.Assert.*;\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertFalse;\r
+import static org.junit.Assert.assertNotNull;\r
+import static org.junit.Assert.assertNull;\r
+import static org.junit.Assert.assertTrue;\r
 \r
 import java.lang.reflect.InvocationTargetException;\r
 import java.lang.reflect.Method;\r
@@ -33,10 +37,7 @@ import eu.etaxonomy.cdm.model.reference.Book;
 import eu.etaxonomy.cdm.model.reference.BookSection;\r
 import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;\r
 import eu.etaxonomy.cdm.model.reference.Journal;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;\r
-import eu.etaxonomy.cdm.strategy.parser.INonViralNameParser;\r
-import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;\r
 \r
 /**\r
  * @author a.mueller\r
@@ -262,29 +263,40 @@ public class NonViralNameParserImplTest {
        }\r
        \r
        /**\r
-        * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseFullReference(NonViralName, java.lang.String, eu.etaxonomy.cdm.model.name.Rank, boolean)(, )}.\r
+        * Test method for {@link eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl#parseReferencedName(NonViralName, java.lang.String, eu.etaxonomy.cdm.model.name.Rank, boolean)(, )}.\r
         */\r
        @Test\r
-       public final void testParseFullReference() {\r
+       public final void testParseReferencedName() {\r
                try {\r
-                       Method parseMethod = parser.getClass().getDeclaredMethod("parseFullReference", String.class, NomenclaturalCode.class, Rank.class);\r
+                       Method parseMethod = parser.getClass().getDeclaredMethod("parseReferencedName", String.class, NomenclaturalCode.class, Rank.class);\r
                        testName_StringNomcodeRank(parseMethod);\r
                } catch (Exception e) {\r
                        e.printStackTrace();\r
                        assertTrue(false);\r
                }\r
                \r
-\r
+               //null\r
+               String strNull = null;\r
+               NonViralName<?> nameNull = parser.parseReferencedName(strNull, null, Rank.SPECIES());\r
+               assertNull(nameNull);\r
+               \r
+               //Empty\r
+               String strEmpty = "";\r
+               NonViralName<?> nameEmpty = parser.parseReferencedName(strEmpty, null, Rank.SPECIES());\r
+               assertFalse(nameEmpty.hasProblem());\r
+               assertEquals(strEmpty, nameEmpty.getFullTitleCache());\r
+               assertNull(nameEmpty.getNomenclaturalMicroReference());\r
+               \r
                \r
                //Book\r
                String fullReference = "Abies alba Mill., Sp.   Pl. 4: 455. 1987.";\r
-               NonViralName<?> name1 = parser.parseFullReference(fullReference, null, Rank.SPECIES());\r
+               NonViralName<?> name1 = parser.parseReferencedName(fullReference, null, Rank.SPECIES());\r
                assertFullRefStandard(name1);\r
                assertTrue(name1.getNomenclaturalReference() instanceof Book);\r
                \r
                //Book Section\r
                fullReference = "Abies alba Mill. in Otto, Sp. Pl. 4(6): 455. 1987";\r
-               NonViralName<?> name2 = parser.parseFullReference(fullReference + ".", null, Rank.SPECIES());\r
+               NonViralName<?> name2 = parser.parseReferencedName(fullReference + ".", null, Rank.SPECIES());\r
                assertFullRefNameStandard(name2);\r
                //assertEquals(fullReference, name2.getFullTitleCache());\r
                assertFalse(name2.hasProblem());\r
@@ -301,7 +313,7 @@ public class NonViralNameParserImplTest {
                \r
                //Article\r
                fullReference = "Abies alba Mill. in Sp. Pl. 4(6): 455. 1987";\r
-               NonViralName<?> name3 = parser.parseFullReference(fullReference, null, Rank.SPECIES());\r
+               NonViralName<?> name3 = parser.parseReferencedName(fullReference, null, Rank.SPECIES());\r
                assertFullRefNameStandard(name3);\r
                assertEquals(fullReference, name3.getFullTitleCache());\r
                assertFalse(name3.hasProblem());\r
@@ -322,7 +334,7 @@ public class NonViralNameParserImplTest {
                String fullReferenceWithoutYear = "Abies alba Mill. in " + journalTitle + " 4(6): 455.";\r
                fullReference = fullReferenceWithoutYear + yearPart;\r
                String fullReferenceWithEnd = fullReference + ".";\r
-               NonViralName<?> name4 = parser.parseFullReference(fullReferenceWithEnd, null, Rank.SPECIES());\r
+               NonViralName<?> name4 = parser.parseReferencedName(fullReferenceWithEnd, null, Rank.SPECIES());\r
                assertFalse(name4.hasProblem());\r
                assertFullRefNameStandard(name4);\r
                assertEquals(fullReferenceWithoutYear + " " + parsedYear, name4.getFullTitleCache());\r
@@ -338,8 +350,10 @@ public class NonViralNameParserImplTest {
                \r
                //Zoo name\r
                String strNotParsableZoo = "Abies alba M., 1923, Sp. P. xxwer4352, nom. inval.";\r
-               ZoologicalName nameZooRefNotParsabel = (ZoologicalName)parser.parseFullReference(strNotParsableZoo, null, null);\r
+               ZoologicalName nameZooRefNotParsabel = (ZoologicalName)parser.parseReferencedName(strNotParsableZoo, null, null);\r
                assertTrue(nameZooRefNotParsabel.hasProblem());\r
+               assertEquals(21, nameZooRefNotParsabel.getProblemStarts());\r
+               assertEquals(37, nameZooRefNotParsabel.getProblemEnds());\r
                assertTrue(nameZooRefNotParsabel.getNomenclaturalReference().hasProblem());\r
                assertEquals(NomenclaturalCode.ICZN(), nameZooRefNotParsabel.getNomenclaturalCode());\r
                assertEquals(Integer.valueOf(1923), nameZooRefNotParsabel.getPublicationYear());\r
@@ -347,21 +361,21 @@ public class NonViralNameParserImplTest {
 \r
                //Special MicroRefs\r
                String strSpecDetail1 = "Abies alba Mill. in Sp. Pl. 4(6): [455]. 1987";\r
-               NonViralName<?> nameSpecDet1 = parser.parseFullReference(strSpecDetail1 + ".", null, Rank.SPECIES());\r
+               NonViralName<?> nameSpecDet1 = parser.parseReferencedName(strSpecDetail1 + ".", null, Rank.SPECIES());\r
                assertFalse(nameSpecDet1.hasProblem());\r
                assertEquals(strSpecDetail1, nameSpecDet1.getFullTitleCache());\r
                assertEquals("[455]", nameSpecDet1.getNomenclaturalMicroReference());\r
                \r
                //Special MicroRefs\r
                String strSpecDetail2 = "Abies alba Mill. in Sp. Pl. 4(6): couv. 2. 1987";\r
-               NonViralName<?> nameSpecDet2 = parser.parseFullReference(strSpecDetail2 + ".", null, Rank.SPECIES());\r
+               NonViralName<?> nameSpecDet2 = parser.parseReferencedName(strSpecDetail2 + ".", null, Rank.SPECIES());\r
                assertFalse(nameSpecDet2.hasProblem());\r
                assertEquals(strSpecDetail2, nameSpecDet2.getFullTitleCache());\r
                assertEquals("couv. 2", nameSpecDet2.getNomenclaturalMicroReference());\r
                \r
                //Special MicroRefs\r
                String strSpecDetail3 = "Abies alba Mill. in Sp. Pl. 4(6): fig. 455. 1987";\r
-               NonViralName<?> nameSpecDet3 = parser.parseFullReference(strSpecDetail3 + ".", null, Rank.SPECIES());\r
+               NonViralName<?> nameSpecDet3 = parser.parseReferencedName(strSpecDetail3 + ".", null, Rank.SPECIES());\r
                assertFalse(nameSpecDet3.hasProblem());\r
                assertEquals(strSpecDetail3, nameSpecDet3.getFullTitleCache());\r
                assertEquals("fig. 455", nameSpecDet3.getNomenclaturalMicroReference());\r
@@ -369,7 +383,7 @@ public class NonViralNameParserImplTest {
                //Special MicroRefs\r
                String strSpecDetail4 = "Abies alba Mill. in Sp. Pl. 4(6): fig. 455-567. 1987";\r
                fullReference = strSpecDetail4 + ".";\r
-               NonViralName<?> nameSpecDet4 = parser.parseFullReference(fullReference, null, Rank.SPECIES());\r
+               NonViralName<?> nameSpecDet4 = parser.parseReferencedName(fullReference, null, Rank.SPECIES());\r
                assertFalse(nameSpecDet4.hasProblem());\r
                assertEquals(strSpecDetail4, nameSpecDet4.getFullTitleCache());\r
                assertEquals("fig. 455-567", nameSpecDet4.getNomenclaturalMicroReference());\r
@@ -378,7 +392,7 @@ public class NonViralNameParserImplTest {
                //Special MicroRefs\r
                String strSpecDetail5 = "Abies alba Mill. in Sp. Pl. 4(6): Gard n° 4. 1987";\r
                fullReference = strSpecDetail5 + ".";\r
-               NonViralName<?> nameSpecDet5 = parser.parseFullReference(fullReference, null, Rank.SPECIES());\r
+               NonViralName<?> nameSpecDet5 = parser.parseReferencedName(fullReference, null, Rank.SPECIES());\r
                assertFalse(nameSpecDet5.hasProblem());\r
                assertEquals(strSpecDetail5, nameSpecDet5.getFullTitleCache());\r
                assertEquals("Gard n° 4", nameSpecDet5.getNomenclaturalMicroReference());\r
@@ -386,7 +400,7 @@ public class NonViralNameParserImplTest {
                //Special MicroRefs\r
                String strSpecDetail6 = "Abies alba Mill. in Sp. Pl. 4(6): 455a. 1987";\r
                fullReference = strSpecDetail6 + ".";\r
-               NonViralName<?> nameSpecDet6 = parser.parseFullReference(fullReference, null, Rank.SPECIES());\r
+               NonViralName<?> nameSpecDet6 = parser.parseReferencedName(fullReference, null, Rank.SPECIES());\r
                assertFalse(nameSpecDet6.hasProblem());\r
                assertEquals(strSpecDetail6, nameSpecDet6.getFullTitleCache());\r
                assertEquals("455a", nameSpecDet6.getNomenclaturalMicroReference());\r
@@ -394,38 +408,44 @@ public class NonViralNameParserImplTest {
                //Special MicroRefs\r
                String strSpecDetail7 = "Abies alba Mill. in Sp. Pl. 4(6): pp.455-457. 1987";\r
                fullReference = strSpecDetail7 + ".";\r
-               NonViralName<?> nameSpecDet7 = parser.parseFullReference(fullReference, null, Rank.SPECIES());\r
+               NonViralName<?> nameSpecDet7 = parser.parseReferencedName(fullReference, null, Rank.SPECIES());\r
                assertFalse(nameSpecDet7.hasProblem());\r
                assertEquals(strSpecDetail7, nameSpecDet7.getFullTitleCache());\r
                assertEquals("pp.455-457", nameSpecDet7.getNomenclaturalMicroReference());\r
                \r
                //Special MicroRefs\r
                String strSpecDetail8 = "Abies alba Mill. in Sp. Pl. 4(6): ppp.455-457. 1987";\r
-               NonViralName<?> nameSpecDet8 = parser.parseFullReference(strSpecDetail8, null, Rank.SPECIES());\r
+               NonViralName<?> nameSpecDet8 = parser.parseReferencedName(strSpecDetail8, null, Rank.SPECIES());\r
                assertTrue(nameSpecDet8.hasProblem());\r
+               assertEquals(20, nameSpecDet8.getProblemStarts()); //TODO better start behind :\r
+               assertEquals(51, nameSpecDet8.getProblemEnds());   //TODO better stop after -457\r
+               \r
 \r
                //Special MicroRefs\r
                String strSpecDetail9 = "Abies alba Mill. in Sp. Pl. 4(6): pp. 455 - 457. 1987";\r
-               NonViralName<?> nameSpecDet9 = parser.parseFullReference(strSpecDetail9, null, Rank.SPECIES());\r
+               NonViralName<?> nameSpecDet9 = parser.parseReferencedName(strSpecDetail9, null, Rank.SPECIES());\r
                assertFalse(nameSpecDet9.hasProblem());\r
                assertEquals(strSpecDetail9, nameSpecDet9.getFullTitleCache());\r
                assertEquals("pp. 455 - 457", nameSpecDet9.getNomenclaturalMicroReference());\r
 \r
                //Special MicroRefs\r
                String strSpecDetail10 = "Abies alba Mill. in Sp. Pl. 4(6): p 455. 1987";\r
-               NonViralName<?> nameSpecDet10 = parser.parseFullReference(strSpecDetail10, null, Rank.SPECIES());\r
+               NonViralName<?> nameSpecDet10 = parser.parseReferencedName(strSpecDetail10, null, Rank.SPECIES());\r
                assertFalse(nameSpecDet10.hasProblem());\r
                assertEquals(strSpecDetail10, nameSpecDet10.getFullTitleCache());\r
                assertEquals("p 455", nameSpecDet10.getNomenclaturalMicroReference());\r
                \r
                //Special MicroRefs\r
                String strSpecDetail11 = "Abies alba Mill. in Sp. Pl. 4(6): p. 455 - 457. 1987";\r
-               NonViralName<?> nameSpecDet11 = parser.parseFullReference(strSpecDetail11, null, Rank.SPECIES());\r
+               NonViralName<?> nameSpecDet11 = parser.parseReferencedName(strSpecDetail11, null, Rank.SPECIES());\r
                assertTrue(nameSpecDet11.hasProblem());\r
+               assertEquals(20, nameSpecDet8.getProblemStarts()); //TODO better start behind :\r
+               assertEquals(51, nameSpecDet8.getProblemEnds());   //TODO better stop after - 457\r
+               \r
                \r
                //no volume, no edition\r
                String strNoVolume = "Abies alba Mill., Sp. Pl.: 455. 1987";\r
-               NonViralName<?> nameNoVolume = parser.parseFullReference(strNoVolume, null, Rank.SPECIES());\r
+               NonViralName<?> nameNoVolume = parser.parseReferencedName(strNoVolume, null, Rank.SPECIES());\r
                assertFalse(nameNoVolume.hasProblem());\r
                assertEquals(strNoVolume, nameNoVolume.getFullTitleCache());\r
                assertEquals(null, ((Book)nameNoVolume.getNomenclaturalReference()).getVolume());\r
@@ -433,7 +453,7 @@ public class NonViralNameParserImplTest {
 \r
                //volume, no edition\r
                strNoVolume = "Abies alba Mill., Sp. Pl. 2: 455. 1987";\r
-               nameNoVolume = parser.parseFullReference(strNoVolume, null, Rank.SPECIES());\r
+               nameNoVolume = parser.parseReferencedName(strNoVolume, null, Rank.SPECIES());\r
                assertFalse(nameNoVolume.hasProblem());\r
                assertEquals(strNoVolume, nameNoVolume.getFullTitleCache());\r
                assertEquals("2", ((Book)nameNoVolume.getNomenclaturalReference()).getVolume());\r
@@ -441,7 +461,7 @@ public class NonViralNameParserImplTest {
 \r
                //no volume, edition\r
                strNoVolume = "Abies alba Mill., Sp. Pl. ed. 3: 455. 1987";\r
-               nameNoVolume = parser.parseFullReference(strNoVolume, null, Rank.SPECIES());\r
+               nameNoVolume = parser.parseReferencedName(strNoVolume, null, Rank.SPECIES());\r
                assertFalse(nameNoVolume.hasProblem());\r
                assertEquals(strNoVolume, nameNoVolume.getFullTitleCache());\r
                assertEquals(null, ((Book)nameNoVolume.getNomenclaturalReference()).getVolume());\r
@@ -449,12 +469,60 @@ public class NonViralNameParserImplTest {
                \r
                //volume, edition\r
                strNoVolume = "Abies alba Mill., Sp. Pl. ed. 3, 4(5): 455. 1987";\r
-               nameNoVolume = parser.parseFullReference(strNoVolume, null, Rank.SPECIES());\r
+               nameNoVolume = parser.parseReferencedName(strNoVolume, null, Rank.SPECIES());\r
                assertFalse(nameNoVolume.hasProblem());\r
                assertEquals(strNoVolume, nameNoVolume.getFullTitleCache());\r
                assertEquals("4(5)", ((Book)nameNoVolume.getNomenclaturalReference()).getVolume());\r
                assertEquals("3", ((Book)nameNoVolume.getNomenclaturalReference()).getEdition());\r
                \r
+               String strUnparsableInRef = "Abies alba Mill. in -er46: 455. 1987";\r
+               NonViralName<?> nameUnparsableInRef = parser.parseReferencedName(strUnparsableInRef, null, Rank.SPECIES());\r
+               assertTrue(nameUnparsableInRef.hasProblem());\r
+               assertEquals(strUnparsableInRef, nameUnparsableInRef.getFullTitleCache());\r
+               assertEquals(20, nameUnparsableInRef.getProblemStarts()); \r
+               assertEquals(25, nameUnparsableInRef.getProblemEnds());   \r
+               \r
+               \r
+               //volume, edition\r
+               String strNoSeparator = "Abies alba Mill. Sp. Pl. ed. 3, 4(5): 455. 1987";\r
+               NonViralName<?> nameNoSeparator = parser.parseReferencedName(strNoSeparator, NomenclaturalCode.ICBN(), Rank.SPECIES());\r
+               assertTrue(nameNoSeparator.hasProblem());\r
+               assertEquals(strNoSeparator, nameNoSeparator.getFullTitleCache());\r
+               assertEquals(10, nameNoSeparator.getProblemStarts()); //TODO better start behind Mill. (?)\r
+               assertEquals(47, nameNoSeparator.getProblemEnds());   //TODO better stop before :\r
+               \r
+               String strUnparsableInRef2 = "Hieracium pepsicum L., My Bookkkk 1. 1903";\r
+               NonViralName<?> nameUnparsableInRef2 = parser.parseReferencedName(strUnparsableInRef2, null, Rank.SPECIES());\r
+               assertTrue(nameUnparsableInRef2.hasProblem());\r
+               assertEquals(strUnparsableInRef2, nameUnparsableInRef2.getFullTitleCache());\r
+               assertEquals(23, nameUnparsableInRef2.getProblemStarts()); \r
+               assertEquals(41, nameUnparsableInRef2.getProblemEnds());   \r
+       \r
+               \r
+               String strUnparsableInRef3 = "Hieracium pespcim N., My Bookkkk 1. 1902";\r
+               NonViralName<?> nameUnparsableInRef3 = parser.parseReferencedName(strUnparsableInRef3, null, null);\r
+               assertTrue(nameUnparsableInRef3.hasProblem());\r
+               assertEquals(strUnparsableInRef3, nameUnparsableInRef3.getFullTitleCache());\r
+               assertEquals(22, nameUnparsableInRef3.getProblemStarts()); \r
+               assertEquals(40, nameUnparsableInRef3.getProblemEnds());   \r
+       \r
+               String strUnparsableInRef4 = "Hieracium pepsicum (Hsllreterto) L., My Bookkkk 1. 1903";\r
+               NonViralName<?> nameUnparsableInRef4 = parser.parseReferencedName(strUnparsableInRef4, null, null);\r
+               assertTrue(nameUnparsableInRef4.hasProblem());\r
+               assertEquals(strUnparsableInRef4, nameUnparsableInRef4.getFullTitleCache());\r
+               assertEquals(37, nameUnparsableInRef4.getProblemStarts()); \r
+               assertEquals(55, nameUnparsableInRef4.getProblemEnds());   \r
+               \r
+               String strSameName = "Hieracium pepcum (Hsllreterto) L., My Bokkk 1. 1903";\r
+               NonViralName<?> nameSameName = nameUnparsableInRef4;\r
+               parser.parseReferencedName(nameSameName, strSameName, null, true);\r
+               assertTrue(nameSameName.hasProblem());\r
+               assertEquals(strSameName, nameSameName.getFullTitleCache());\r
+               assertEquals(35, nameSameName.getProblemStarts()); \r
+               assertEquals(51, nameSameName.getProblemEnds());   \r
+       \r
+               \r
+               \r
        }\r
 \r
        private void assertFullRefNameStandard(NonViralName<?> name){\r