package org.gbif.dwca.io;
import org.gbif.dwc.terms.DcTerm;
import org.gbif.dwc.terms.DwcTerm;
import org.gbif.dwca.io.Archive;
import org.gbif.dwca.io.ArchiveFactory;
import org.gbif.dwca.io.UnsupportedArchiveException;
import org.gbif.dwca.record.Record;
import org.gbif.dwca.record.StarRecord;
import org.gbif.utils.file.FileUtils;
import java.io.IOException;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class StarIteratorTest {
@Test
public void testIterator() throws IOException, UnsupportedArchiveException {
// test proper archive
Archive arch = ArchiveFactory.openArchive(FileUtils.getClasspathFile("archive-dwc"));
assertNotNull(arch.getCore());
assertEquals(2, arch.getExtensions().size());
int found = 0;
int extensionRecords = 0;
for (StarRecord rec : arch) {
//System.out.println(rec.core().id() + " --> " + rec.size());
// count all extension records
extensionRecords += rec.size();
if (rec.core().id().equals("544382")) {
found++;
assertEquals("Tursiops truncatus truncatus Montagu", rec.core().value(DwcTerm.scientificName));
// test extension iter
int i = 0;
for (Record er : rec) {
i++;
}
assertEquals(27, i);
} else if (rec.core().id().equals("105833")) {
found++;
// 105833 Chinese river dolphin English
// 105833 Chinese lake dolphin English
// 105833 Pei c’hi Chinese
// 105833 White flag dolphin English
int i = 0;
for (Record er : rec) {
i++;
if ("Chinese river dolphin".equals(er.value(DwcTerm.vernacularName))) {
assertEquals("English", er.value(DcTerm.language));
assertEquals("English", er.value(DcTerm.language));
} else if ("Chinese lake dolphin".equals(er.value(DwcTerm.vernacularName))) {
assertEquals("English", er.value(DcTerm.language));
} else if ("Pei c’hi".equals(er.value(DwcTerm.vernacularName))) {
assertEquals("Chinese", er.value(DcTerm.language));
} else {
assertEquals("White flag dolphin", er.value(DwcTerm.vernacularName));
assertEquals("English", er.value(DcTerm.language));
}
}
assertEquals(4, i);
} else if (rec.core().id().equals("105838")) {
found++;
// 105838 Delfin de La Plata Spanish
// 105838 Franciscana Spanish
// 105838 Franciscano Portuguese
// 105838 La Plata dolphin English
// 105838 Tonina Spanish
// 105838 Toninha Portuguese
int i = 0;
for (Record er : rec) {
i++;
if ("Delfin de La Plata".equals(er.value(DwcTerm.vernacularName))) {
assertEquals("Spanish", er.value(DcTerm.language));
} else if ("Franciscana".equals(er.value(DwcTerm.vernacularName))) {
assertEquals("Spanish", er.value(DcTerm.language));
} else if ("Franciscano".equals(er.value(DwcTerm.vernacularName))) {
assertEquals("Portuguese", er.value(DcTerm.language));
} else if ("La Plata dolphin".equals(er.value(DwcTerm.vernacularName))) {
assertEquals("English", er.value(DcTerm.language));
} else if ("Tonina".equals(er.value(DwcTerm.vernacularName))) {
assertEquals("Spanish", er.value(DcTerm.language));
} else {
assertEquals("Toninha", er.value(DwcTerm.vernacularName));
assertEquals("Portuguese", er.value(DcTerm.language));
}
}
assertEquals(6, i);
}
}
assertEquals(3, found);
assertEquals(1057, extensionRecords);
}
}