package org.gbif.checklistbank.kryo;
import org.gbif.api.model.checklistbank.DatasetMetrics;
import org.gbif.api.model.checklistbank.Description;
import org.gbif.api.model.checklistbank.Distribution;
import org.gbif.api.model.checklistbank.NameUsage;
import org.gbif.api.model.checklistbank.NameUsageMediaObject;
import org.gbif.api.model.checklistbank.NameUsageMetrics;
import org.gbif.api.model.checklistbank.ParsedName;
import org.gbif.api.model.checklistbank.Reference;
import org.gbif.api.model.checklistbank.SpeciesProfile;
import org.gbif.api.model.checklistbank.TypeSpecimen;
import org.gbif.api.model.checklistbank.VerbatimNameUsage;
import org.gbif.api.model.checklistbank.VernacularName;
import org.gbif.api.model.common.Identifier;
import org.gbif.api.vocabulary.NomenclaturalStatus;
import org.gbif.checklistbank.model.UsageExtensions;
import org.gbif.checklistbank.nub.model.NubUsage;
import org.gbif.checklistbank.nub.model.SrcUsage;
import org.gbif.dwc.terms.DcTerm;
import org.gbif.dwc.terms.DwcTerm;
import org.gbif.dwc.terms.EolReferenceTerm;
import org.gbif.dwc.terms.GbifTerm;
import org.gbif.dwc.terms.IucnTerm;
import org.gbif.dwc.terms.Term;
import org.gbif.dwc.terms.UnknownTerm;
import java.io.ByteArrayOutputStream;
import java.net.URI;
import java.util.List;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import com.google.common.collect.Lists;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CliKryoFactoryTest {
Kryo kryo = new CliKryoFactory().create();
@Test
public void testNubUsage() throws Exception {
NubUsage u = new NubUsage();
u.addNomStatus(NomenclaturalStatus.values());
assertSerde(u);
}
@Test
public void testSrcUsage() throws Exception {
SrcUsage u = new SrcUsage();
assertSerde(u);
}
@Test
public void testTerms() throws Exception {
List<Term> terms = Lists.newArrayList(
DwcTerm.scientificName, DwcTerm.associatedOrganisms, DwcTerm.taxonID,
DcTerm.title,
GbifTerm.canonicalName,
IucnTerm.threatStatus, EolReferenceTerm.primaryTitle, new UnknownTerm(URI.create("http://gbif.org/abcdefg"))
);
assertSerde(terms);
}
@Test
public void testEmptyModels() throws Exception {
assertSerde(new NameUsage());
assertSerde(new VerbatimNameUsage());
assertSerde(new NameUsageMetrics());
assertSerde(new UsageExtensions());
assertSerde(new ParsedName());
assertSerde(new Description());
assertSerde(new Distribution());
assertSerde(new Identifier());
assertSerde(new NameUsageMediaObject());
assertSerde(new Reference());
assertSerde(new SpeciesProfile());
assertSerde(new NameUsage());
assertSerde(new TypeSpecimen());
assertSerde(new VernacularName());
assertSerde(new DatasetMetrics());
}
private void assertSerde(Object obj) {
ByteArrayOutputStream buffer = new ByteArrayOutputStream(128);
Output output = new Output(buffer);
kryo.writeObject(output, obj);
output.close();
byte[] bytes = buffer.toByteArray();
final Input input = new Input(bytes);
Object obj2 = kryo.readObject(input, obj.getClass());
assertEquals(obj, obj2);
}
}