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}