001/* 002 * Licensed under the Apache License, Version 2.0 (the "License"); 003 * you may not use this file except in compliance with the License. 004 * You may obtain a copy of the License at 005 * 006 * http://www.apache.org/licenses/LICENSE-2.0 007 * 008 * Unless required by applicable law or agreed to in writing, software 009 * distributed under the License is distributed on an "AS IS" BASIS, 010 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 011 * See the License for the specific language governing permissions and 012 * limitations under the License. 013 */ 014package org.gbif.dwc.record; 015 016import org.gbif.dwc.ArchiveField; 017import org.gbif.dwc.terms.DwcTerm; 018import org.gbif.dwc.terms.Term; 019 020import java.util.ArrayList; 021import java.util.HashSet; 022import java.util.List; 023import java.util.Set; 024 025import org.junit.jupiter.api.Test; 026 027import static org.junit.jupiter.api.Assertions.assertEquals; 028import static org.junit.jupiter.api.Assertions.assertNull; 029 030public class RecordImplTest { 031 032 private String setRows(String val, RecordImpl ... recs) { 033 for (RecordImpl r : recs) { 034 r.setRow(new String[]{val}); 035 } 036 return val; 037 } 038 039 /** 040 * Test record implementations value method and make sure literal nulls are replaced if requested. 041 */ 042 @Test 043 public void testReplaceNull() { 044 final Term t = DwcTerm.scientificName; 045 ArchiveField af = new ArchiveField(); 046 af.setTerm(t); 047 af.setIndex(0); 048 af.setType(ArchiveField.DataType.string); 049 List<ArchiveField> fields = new ArrayList<>(); 050 fields.add(af); 051 052 final RecordImpl r = new RecordImpl(null, fields, null, true, false); 053 final RecordImpl r2 = new RecordImpl(null, fields, null, false, false); 054 055 String val = setRows(null, r, r2); 056 assertNull(r.value(t)); 057 assertNull(r2.value(t)); 058 059 val = setRows("", r, r2); 060 assertNull(r.value(t)); 061 assertNull(r2.value(t)); 062 063 val = setRows(" ", r, r2); 064 assertNull(r.value(t)); 065 assertNull(r2.value(t)); 066 067 val = setRows(" ", r, r2); 068 assertNull(r.value(t)); 069 assertNull(r2.value(t)); 070 071 val = setRows("null", r, r2); 072 assertNull(r.value(t)); 073 assertEquals(val, r2.value(t)); 074 075 val = setRows("NULL", r, r2); 076 assertNull(r.value(t)); 077 assertEquals(val, r2.value(t)); 078 079 val = setRows("\\N", r, r2); 080 assertNull(r.value(t)); 081 assertEquals(val, r2.value(t)); 082 083 val = setRows(" Null ", r, r2); 084 assertNull(r.value(t)); 085 assertEquals(val, r2.value(t)); 086 087 val = setRows("n", r, r2); 088 assertEquals(val, r.value(t)); 089 assertEquals(val, r2.value(t)); 090 091 val = setRows("n ", r, r2); 092 assertEquals(val, r.value(t)); 093 assertEquals(val, r2.value(t)); 094 095 val = setRows(" - ", r, r2); 096 assertEquals(val, r.value(t)); 097 assertEquals(val, r2.value(t)); 098 099 val = setRows("nulle", r, r2); 100 assertEquals(val, r.value(t)); 101 assertEquals(val, r2.value(t)); 102 103 val = setRows("n ull", r, r2); 104 assertEquals(val, r.value(t)); 105 assertEquals(val, r2.value(t)); 106 } 107 108 @Test 109 public void testGetFullScientificName() { 110 ArchiveField id = new ArchiveField(0, DwcTerm.taxonID, null, null); 111 Set<ArchiveField> fields = new HashSet<ArchiveField>(); 112 fields.add(new ArchiveField(1, DwcTerm.scientificName, null, null)); 113 fields.add(new ArchiveField(2, DwcTerm.scientificNameAuthorship, null, null)); 114 fields.add(new ArchiveField(null, DwcTerm.kingdom, "Plantae", null)); 115 fields.add(new ArchiveField(4, DwcTerm.phylum, null, null)); 116 fields.add(new ArchiveField(6, DwcTerm.class_, null, null)); 117 fields.add(new ArchiveField(7, DwcTerm.acceptedNameUsage, null, null)); 118 RecordImpl rec = new RecordImpl(id, fields, DwcTerm.Taxon, true, true); 119 120 String[] row = 121 {"5432", "Abies alba Mill.", "Mill.", "Harry", "Monocotyledonae", "Bertram", "Pincodiae", "Picea picaea L."}; 122 rec.setRow(row); 123 124 assertEquals(row[1], rec.value(DwcTerm.scientificName)); 125 assertEquals(row[2], rec.value(DwcTerm.scientificNameAuthorship)); 126 assertEquals("Plantae", rec.value(DwcTerm.kingdom)); 127 assertEquals(row[4], rec.value(DwcTerm.phylum)); 128 assertEquals(row[6], rec.value(DwcTerm.class_)); 129 assertEquals(row[6], rec.value(DwcTerm.class_)); 130 assertNull(rec.value(DwcTerm.order)); 131 assertEquals(row[7], rec.value(DwcTerm.acceptedNameUsage)); 132 133 assertEquals(row[0], rec.id()); 134 assertEquals(DwcTerm.Taxon, rec.rowType()); 135 } 136 137 @Test 138 public void testDefaultValue() { 139 final String DATASET = "ITIS"; 140 ArchiveField id = new ArchiveField(0, DwcTerm.taxonID, null, null); 141 Set<ArchiveField> fields = new HashSet<ArchiveField>(); 142 fields.add(new ArchiveField(1, DwcTerm.datasetName, DATASET, null)); 143 RecordImpl rec = new RecordImpl(id, fields, DwcTerm.Taxon, true, true); 144 145 String[] row = {"5432", "IPNI"}; 146 rec.setRow(row); 147 assertEquals(row[1], rec.value(DwcTerm.datasetName)); 148 149 row = new String[] {"5432", null}; 150 rec.setRow(row); 151 assertEquals(DATASET, rec.value(DwcTerm.datasetName)); 152 153 row = new String[] {"5432", ""}; 154 rec.setRow(row); 155 assertEquals(DATASET, rec.value(DwcTerm.datasetName)); 156 } 157}