package org.gbif.dwca.record; import org.gbif.dwc.terms.DwcTerm; import org.gbif.dwc.terms.GbifTerm; import org.gbif.dwca.record.DarwinCoreTaxon; import java.util.Date; import java.util.Set; import com.google.common.collect.ImmutableSet; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; public class DarwinCoreTaxonTest { @Test public void testGetFullScientificName() { DarwinCoreTaxon dwc = new DarwinCoreTaxon("Festuca x brinkmannii A. Braun"); dwc.setScientificNameAuthorship("A. Braun"); assertEquals("Festuca x brinkmannii A. Braun", dwc.getFullScientificName()); assertEquals(dwc.getFullScientificName(), dwc.getLowestScientificName()); dwc = new DarwinCoreTaxon("Festuca x brinkmannii A. Braun"); dwc.setScientificNameAuthorship("A.Braun"); assertEquals("Festuca x brinkmannii A. Braun", dwc.getFullScientificName()); assertEquals(dwc.getFullScientificName(), dwc.getLowestScientificName()); dwc = new DarwinCoreTaxon("Festuca x brinkmannii"); dwc.setScientificNameAuthorship("A. Braun"); assertEquals("Festuca x brinkmannii A. Braun", dwc.getFullScientificName()); assertEquals(dwc.getFullScientificName(), dwc.getLowestScientificName()); dwc = new DarwinCoreTaxon("Festuca A. Braun brinkmannii subsp. brinkmannii"); dwc.setScientificNameAuthorship("A. Braun"); assertEquals("Festuca A. Braun brinkmannii subsp. brinkmannii", dwc.getFullScientificName()); assertEquals(dwc.getFullScientificName(), dwc.getLowestScientificName()); dwc = new DarwinCoreTaxon("Festuca brinkmannii"); dwc.setScientificNameAuthorship("A. Braun"); assertEquals("Festuca brinkmannii A. Braun", dwc.getFullScientificName()); assertEquals(dwc.getFullScientificName(), dwc.getLowestScientificName()); dwc = new DarwinCoreTaxon(" "); dwc.setScientificNameAuthorship("Rafinesque, 1795"); dwc.setKingdom("Plantae"); assertNull(dwc.getFullScientificName()); assertEquals("Plantae", dwc.getLowestScientificName()); dwc = new DarwinCoreTaxon(" "); dwc.setScientificNameAuthorship("L."); dwc.setKingdom("Plantae"); dwc.setFamily("Asteraceae"); assertNull(dwc.getFullScientificName()); assertEquals("Asteraceae", dwc.getLowestScientificName()); dwc = new DarwinCoreTaxon(); dwc.setScientificNameAuthorship("L."); dwc.setKingdom("Plantae"); dwc.setGenus("Poa"); assertEquals("Poa", dwc.getFullScientificName()); assertEquals(dwc.getFullScientificName(), dwc.getLowestScientificName()); dwc.setSpecificEpithet("annua"); assertEquals("Poa annua L.", dwc.getFullScientificName()); assertEquals(dwc.getFullScientificName(), dwc.getLowestScientificName()); dwc.setScientificNameAuthorship(""); assertEquals("Poa annua", dwc.getFullScientificName()); assertEquals(dwc.getFullScientificName(), dwc.getLowestScientificName()); dwc.setScientificNameAuthorship("L."); dwc.setInfraspecificEpithet("alpina"); assertEquals("Poa annua alpina L.", dwc.getFullScientificName()); assertEquals(dwc.getFullScientificName(), dwc.getLowestScientificName()); dwc.setVerbatimTaxonRank("var."); assertEquals("Poa annua alpina L.", dwc.getFullScientificName()); assertEquals(dwc.getFullScientificName(), dwc.getLowestScientificName()); // test not identical authorships dwc = new DarwinCoreTaxon(); dwc.setScientificName("Aagaardia protensa Saether, 2000"); dwc.setGenus("Aagaardia"); dwc.setSpecificEpithet("protensa"); dwc.setScientificNameAuthorship("Saether 2000"); assertEquals(dwc.getScientificName(), dwc.getFullScientificName()); // test genus dwc = new DarwinCoreTaxon(); dwc.setScientificName("Aagaardia protensa Saether, 2000"); dwc.setGenus("Aagaardia"); dwc.setSpecificEpithet("protensa"); dwc.setScientificNameAuthorship("Saether 2000"); assertEquals(dwc.getScientificName(), dwc.getFullScientificName()); // test authors with single letter that is part of the name dwc = new DarwinCoreTaxon(); dwc.setScientificName("Trifolium repens"); dwc.setGenus("Trifolium"); dwc.setSpecificEpithet("repens"); dwc.setScientificNameAuthorship("L."); assertEquals("Trifolium repens", dwc.getScientificName()); assertEquals("Trifolium repens L.", dwc.getFullScientificName()); dwc = new DarwinCoreTaxon(); dwc.setScientificName("Trifolium thalii"); dwc.setScientificNameAuthorship("Vill."); assertEquals("Trifolium thalii Vill.", dwc.getFullScientificName()); dwc = new DarwinCoreTaxon(); dwc.setScientificName("Trifolium alpestre"); dwc.setScientificNameAuthorship("L."); assertEquals("Trifolium alpestre L.", dwc.getFullScientificName()); // autonyms ??? dwc = new DarwinCoreTaxon(); dwc.setScientificName("Trifolium alpestre alpestre"); dwc.setScientificNameAuthorship("L."); // this would be really correct for autonyms... //assertEquals("Trifolium alpestre L. alpestre", dwc.getFullScientificName()); assertEquals("Trifolium alpestre alpestre L.", dwc.getFullScientificName()); } @Test public void testInterpretedRank() { DarwinCoreTaxon dwc = new DarwinCoreTaxon("Festuca brinkmannii A. Braun"); dwc.setKingdom("PLANTAE"); dwc.setPhylum("Magnoliophyta"); dwc.setFamily("Poaceae"); dwc.setGenus("Festuca"); dwc.setTaxonRank("species"); assertEquals("species", dwc.getTaxonRankInterpreted()); dwc.setSpecificEpithet("brinkmannii"); assertEquals("species", dwc.getTaxonRankInterpreted()); dwc.setInfraspecificEpithet("nonexistii"); assertEquals("species", dwc.getTaxonRankInterpreted()); dwc.setScientificName(null); assertEquals("species", dwc.getTaxonRankInterpreted()); dwc.setTaxonRank(null); assertEquals("infraspecies", dwc.getTaxonRankInterpreted()); dwc.setVerbatimTaxonRank("var."); assertEquals("var.", dwc.getTaxonRankInterpreted()); dwc.setSpecificEpithet(null); assertEquals("genus", dwc.getTaxonRankInterpreted()); dwc.setGenus(null); assertEquals("family", dwc.getTaxonRankInterpreted()); } @Test public void testHigherClassification() { DarwinCoreTaxon dwc = new DarwinCoreTaxon("Festuca brinkmannii A. Braun"); dwc.setKingdom("PLANTAE"); dwc.setPhylum("Magnoliophyta"); dwc.setFamily("Poaceae"); dwc.setGenus("Festuca"); assertEquals("Plantae | Magnoliophyta | Poaceae | Festuca", dwc.buildHigherClassification(null)); assertEquals("Plantae | Magnoliophyta | Poaceae", dwc.buildHigherClassification('f')); assertEquals("Plantae | Magnoliophyta", dwc.buildHigherClassification('o')); } @Test public void testProperties() { Set<String> groups = ImmutableSet.of(DwcTerm.GROUP_TAXON, DwcTerm.GROUP_RECORD); DarwinCoreTaxon dwc = new DarwinCoreTaxon(); for (DwcTerm t : DwcTerm.values()) { if (groups.contains(t.getGroup()) && !t.isClass()){ String val = new Date().toString(); dwc.setProperty(t, val); try { dwc.getProperty(t); assertEquals(val, dwc.getProperty(t)); } catch (Exception e) { System.err.println(e.getMessage()); } } } } @Test(expected = IllegalArgumentException.class) public void testInvalidProperties() { DarwinCoreTaxon dwc = new DarwinCoreTaxon(); dwc.getProperty(GbifTerm.canonicalName); } }