package org.gedcomx.source;
import org.gedcomx.common.Attribution;
import org.gedcomx.common.CustomEntity;
import org.gedcomx.common.ResourceReference;
import org.gedcomx.common.URI;
import org.gedcomx.rt.SerializationUtil;
import org.testng.AssertJUnit;
import org.testng.annotations.Test;
import java.util.ArrayList;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNull;
/**
* @author Ryan Heaton
*/
@Test
public class SourceReferenceTest {
/**
* tests source reference xml
*/
public void testSourceReferenceXml() throws Exception {
SourceReference reference = new SourceReference();
reference.setAttribution(new Attribution());
reference.getAttribution().setContributor(new ResourceReference(URI.create("urn:contributorid")));
reference.setDescriptionRef(URI.create("urn:srcDescInstance"));
reference.addExtensionElement(new CustomEntity("alt1"));
reference.addExtensionElement(new CustomEntity("alt2"));
CustomEntity custom = new CustomEntity();
custom.setSource(reference);
custom = SerializationUtil.processThroughXml(custom);
assertEquals("urn:contributorid", custom.getSource().getAttribution().toString());
assertEquals("urn:srcDescInstance", custom.getSource().getDescriptionRef().toString());
AssertJUnit.assertEquals("alt1", ((CustomEntity) custom.getSource().getExtensionElements().get(0)).getId());
AssertJUnit.assertEquals("alt2", ((CustomEntity) custom.getSource().getExtensionElements().get(1)).getId());
assertNull(custom.getSource().findExtensionOfType(String.class));
assertEquals("alt1", custom.getSource().findExtensionOfType(CustomEntity.class).getId());
assertEquals(0, custom.getSource().findExtensionsOfType(String.class).size());
assertEquals(2, custom.getSource().findExtensionsOfType(CustomEntity.class).size());
assertEquals("alt2", custom.getSource().findExtensionsOfType(CustomEntity.class).get(1).getId());
reference.setDescriptionRef((URI) null);
reference.setAttribution(null);
reference.setExtensionElements(null);
assertNull(reference.getDescriptionRef());
assertNull(reference.getAttribution());
assertNull(reference.findExtensionOfType(CustomEntity.class));
assertEquals(0, reference.findExtensionsOfType(CustomEntity.class).size());
}
/**
* tests source reference json
*/
public void testSourceReferenceJson() throws Exception {
SourceReference reference = new SourceReference();
reference.setDescriptionRef(URI.create("urn:srcDescInstance"));
reference.setExtensionElements(new ArrayList<Object>());
reference.getExtensionElements().add(new CustomEntity("alt"));
CustomEntity custom = new CustomEntity();
custom.setSource(reference);
custom = SerializationUtil.processThroughJson(custom);
assertEquals("urn:srcDescInstance", custom.getSource().getDescriptionRef().toString());
AssertJUnit.assertEquals("alt", ((CustomEntity) custom.getSource().getExtensionElements().get(0)).getId());
}
}