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;
015
016import org.gbif.dwc.record.Record;
017import org.gbif.dwc.record.StarRecord;
018import org.gbif.dwc.terms.DcTerm;
019import org.gbif.dwc.terms.DwcTerm;
020import org.gbif.utils.file.FileUtils;
021
022import java.io.IOException;
023
024import org.junit.jupiter.api.Test;
025
026import static org.junit.jupiter.api.Assertions.assertEquals;
027import static org.junit.jupiter.api.Assertions.assertNotNull;
028
029public class StarIteratorTest {
030
031  @Test
032  public void testIterator() throws IOException, UnsupportedArchiveException {
033    // test proper archive
034    Archive arch = DwcFiles.fromLocation(FileUtils.getClasspathFile("archive-dwc").toPath());
035    assertNotNull(arch.getCore());
036    assertEquals(2, arch.getExtensions().size());
037    int found = 0;
038    int extensionRecords = 0;
039    for (StarRecord rec : arch) {
040      //System.out.println(rec.core().id() + " --> " + rec.size());
041      // count all extension records
042      extensionRecords += rec.size();
043
044      if (rec.core().id().equals("544382")) {
045        found++;
046        assertEquals("Tursiops truncatus truncatus Montagu", rec.core().value(DwcTerm.scientificName));
047        // test extension iter
048        int i = 0;
049        for (Record er : rec) {
050          i++;
051        }
052        assertEquals(27, i);
053      } else if (rec.core().id().equals("105833")) {
054        found++;
055//        105833  Chinese river dolphin English
056//        105833  Chinese lake dolphin  English
057//        105833  Pei c’hi      Chinese
058//        105833  White flag dolphin  English
059        int i = 0;
060        for (Record er : rec) {
061          i++;
062          if ("Chinese river dolphin".equals(er.value(DwcTerm.vernacularName))) {
063            assertEquals("English", er.value(DcTerm.language));
064            assertEquals("English", er.value(DcTerm.language));
065          } else if ("Chinese lake dolphin".equals(er.value(DwcTerm.vernacularName))) {
066            assertEquals("English", er.value(DcTerm.language));
067          } else if ("Pei c’hi".equals(er.value(DwcTerm.vernacularName))) {
068            assertEquals("Chinese", er.value(DcTerm.language));
069          } else {
070            assertEquals("White flag dolphin", er.value(DwcTerm.vernacularName));
071            assertEquals("English", er.value(DcTerm.language));
072          }
073        }
074        System.out.println(rec);
075        assertEquals(4, i);
076      } else if (rec.core().id().equals("105838")) {
077        found++;
078//      105838  Delfin de La Plata  Spanish
079//      105838  Franciscana Spanish
080//      105838  Franciscano Portuguese
081//      105838  La Plata dolphin  English
082//      105838  Tonina  Spanish
083//      105838  Toninha Portuguese
084        int i = 0;
085        for (Record er : rec) {
086          i++;
087          if ("Delfin de La Plata".equals(er.value(DwcTerm.vernacularName))) {
088            assertEquals("Spanish", er.value(DcTerm.language));
089          } else if ("Franciscana".equals(er.value(DwcTerm.vernacularName))) {
090            assertEquals("Spanish", er.value(DcTerm.language));
091          } else if ("Franciscano".equals(er.value(DwcTerm.vernacularName))) {
092            assertEquals("Portuguese", er.value(DcTerm.language));
093          } else if ("La Plata dolphin".equals(er.value(DwcTerm.vernacularName))) {
094            assertEquals("English", er.value(DcTerm.language));
095          } else if ("Tonina".equals(er.value(DwcTerm.vernacularName))) {
096            assertEquals("Spanish", er.value(DcTerm.language));
097          } else {
098            assertEquals("Toninha", er.value(DwcTerm.vernacularName));
099            assertEquals("Portuguese", er.value(DcTerm.language));
100          }
101        }
102        assertEquals(6, i);
103      }
104
105    }
106    assertEquals(3, found);
107    assertEquals(1057, extensionRecords);
108  }
109}