@Test
public void assertScientificName() throws Exception {

  ParsedName pn = parser.parseQuietly("Abies sp.");
  assertEquals("Abies sp.", pn.getScientificName());
  assertEquals("Abies spec.", pn.canonicalName());
  assertEquals("Abies", pn.getGenusOrAbove());
  assertEquals(Rank.SPECIES, pn.getRank());
  assertNull(pn.getSpecificEpithet());
  pn = parser.parseQuietly("×Abies Mill.");
  assertEquals("×Abies Mill.", pn.getScientificName());
  assertEquals("Abies", pn.canonicalName());
  assertEquals("Abies", pn.getGenusOrAbove());
  assertNull(pn.getRank());
  assertNull(pn.getSpecificEpithet());
  assertEquals(NamePart.GENERIC, pn.getNotho());
  pn = parser.parseQuietly("? hostilis Gravenhorst, 1829");
  assertEquals("? hostilis Gravenhorst, 1829", pn.getScientificName());
  assertEquals("? hostilis", pn.canonicalName());
  assertEquals("?", pn.getGenusOrAbove());
  assertEquals(Rank.SPECIES, pn.getRank());
  assertEquals("hostilis", pn.getSpecificEpithet());
  pn = parser.parseQuietly("unassigned Asteraceae");
  assertEquals("unassigned Asteraceae", pn.getScientificName());
  assertNull(pn.canonicalName());
  assertNull(pn.getGenusOrAbove());
  assertNull(pn.getRank());
  assertNull(pn.getSpecificEpithet());
  
  // https://github.com/gbif/name-parser/issues/45
  pn = parser.parseQuietly("OdontellidaeGEN");
  assertEquals(NameType.PLACEHOLDER, pn.getType());
  assertEquals("OdontellidaeGEN", pn.getScientificName());
  assertEquals("Odontellidae", pn.canonicalName());
  assertEquals("Odontellidae", pn.getGenusOrAbove());
  assertEquals("GEN", pn.getStrain());
  assertNull(pn.getRank());
  assertNull(pn.getSpecificEpithet());
  assertNull(pn.getAuthorship());
}