/*************************************************************************** * Copyright 2010 Global Biodiversity Information Facility Secretariat * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ***************************************************************************/ package org.gbif.dwca.record; import org.gbif.dwc.terms.DwcTerm; import org.gbif.dwc.terms.Term; import org.gbif.dwca.io.ArchiveField; import org.gbif.dwca.record.RecordImpl; import java.util.HashSet; import java.util.List; import java.util.Set; import com.google.common.collect.Lists; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; public class RecordImplTest { private String setRows(String val, RecordImpl ... recs) { for (RecordImpl r : recs) { r.setRow(new String[]{val}); } return val; } /** * Test record implementations value method and make sure literal nulls are replaced if requested. */ @Test public void testReplaceNull() { final Term t = DwcTerm.scientificName; ArchiveField af = new ArchiveField(); af.setTerm(t); af.setIndex(0); af.setType(ArchiveField.DataType.string); List<ArchiveField> fields = Lists.newArrayList(af); final RecordImpl r = new RecordImpl(null, fields, null, true, false); final RecordImpl r2 = new RecordImpl(null, fields, null, false, false); String val = setRows(null, r, r2); assertNull(r.value(t)); assertNull(r2.value(t)); val = setRows("", r, r2); assertNull(r.value(t)); assertNull(r2.value(t)); val = setRows(" ", r, r2); assertNull(r.value(t)); assertNull(r2.value(t)); val = setRows(" ", r, r2); assertNull(r.value(t)); assertNull(r2.value(t)); val = setRows("null", r, r2); assertNull(r.value(t)); assertEquals(val, r2.value(t)); val = setRows("NULL", r, r2); assertNull(r.value(t)); assertEquals(val, r2.value(t)); val = setRows("\\N", r, r2); assertNull(r.value(t)); assertEquals(val, r2.value(t)); val = setRows(" Null ", r, r2); assertNull(r.value(t)); assertEquals(val, r2.value(t)); val = setRows("n", r, r2); assertEquals(val, r.value(t)); assertEquals(val, r2.value(t)); val = setRows("n ", r, r2); assertEquals(val, r.value(t)); assertEquals(val, r2.value(t)); val = setRows(" - ", r, r2); assertEquals(val, r.value(t)); assertEquals(val, r2.value(t)); val = setRows("nulle", r, r2); assertEquals(val, r.value(t)); assertEquals(val, r2.value(t)); val = setRows("n ull", r, r2); assertEquals(val, r.value(t)); assertEquals(val, r2.value(t)); } @Test public void testGetFullScientificName() { ArchiveField id = new ArchiveField(0, DwcTerm.taxonID, null, null); Set<ArchiveField> fields = new HashSet<ArchiveField>(); fields.add(new ArchiveField(1, DwcTerm.scientificName, null, null)); fields.add(new ArchiveField(2, DwcTerm.scientificNameAuthorship, null, null)); fields.add(new ArchiveField(null, DwcTerm.kingdom, "Plantae", null)); fields.add(new ArchiveField(4, DwcTerm.phylum, null, null)); fields.add(new ArchiveField(6, DwcTerm.class_, null, null)); fields.add(new ArchiveField(7, DwcTerm.acceptedNameUsage, null, null)); RecordImpl rec = new RecordImpl(id, fields, DwcTerm.Taxon, true, true); String[] row = {"5432", "Abies alba Mill.", "Mill.", "Harry", "Monocotyledonae", "Bertram", "Pincodiae", "Picea picaea L."}; rec.setRow(row); assertEquals(row[1], rec.value(DwcTerm.scientificName)); assertEquals(row[2], rec.value(DwcTerm.scientificNameAuthorship)); assertEquals("Plantae", rec.value(DwcTerm.kingdom)); assertEquals(row[4], rec.value(DwcTerm.phylum)); assertEquals(row[6], rec.value(DwcTerm.class_)); assertEquals(row[6], rec.value(DwcTerm.class_)); assertNull(rec.value(DwcTerm.order)); assertEquals(row[7], rec.value(DwcTerm.acceptedNameUsage)); assertEquals(row[0], rec.id()); assertEquals(DwcTerm.Taxon, rec.rowType()); } @Test public void testDefaultValue() { final String DATASET = "ITIS"; ArchiveField id = new ArchiveField(0, DwcTerm.taxonID, null, null); Set<ArchiveField> fields = new HashSet<ArchiveField>(); fields.add(new ArchiveField(1, DwcTerm.datasetName, DATASET, null)); RecordImpl rec = new RecordImpl(id, fields, DwcTerm.Taxon, true, true); String[] row = {"5432", "IPNI"}; rec.setRow(row); assertEquals(row[1], rec.value(DwcTerm.datasetName)); row = new String[] {"5432", null}; rec.setRow(row); assertEquals(DATASET, rec.value(DwcTerm.datasetName)); row = new String[] {"5432", ""}; rec.setRow(row); assertEquals(DATASET, rec.value(DwcTerm.datasetName)); } }