package org.gedcomx.common; import org.gedcomx.Gedcomx; import org.gedcomx.agent.Agent; import org.gedcomx.conclusion.*; import org.gedcomx.types.FactType; import org.gedcomx.types.RelationshipType; import org.testng.annotations.Test; import java.util.ArrayList; import static org.gedcomx.rt.SerializationUtil.processThroughJson; import static org.gedcomx.rt.SerializationUtil.processThroughXml; import static org.testng.AssertJUnit.*; /** * @author Ryan Heaton */ @Test public class GedcomxTest { /** * tests id xml */ public void testResourceSetXml() throws Exception { Gedcomx meta = createData(); meta = processThroughXml(meta); assertData(meta); } /** * tests id json */ public void testResourceSetJson() throws Exception { Gedcomx meta = createData(); meta = processThroughJson(meta); assertData(meta); } private void assertData(Gedcomx meta) { assertEquals("id", meta.getId()); assertNotNull(meta.getAttribution()); assertEquals("en", meta.getLang()); assertEquals(1, meta.getAgents().size()); assertEquals(1, meta.getDocuments().size()); assertEquals(1, meta.getEvents().size()); assertEquals(1, meta.getPersons().size()); assertEquals(1, meta.getPersons().get(0).getDisplayExtension().getFamiliesAsParent().size()); assertEquals(1, meta.getRelationships().size()); assertEquals(1, meta.getExtensionElements().size()); } private Gedcomx createData() { Gedcomx meta = new Gedcomx(); meta.setId("id"); meta.setAttribution(new Attribution()); meta.setLang("en"); meta.setAgents(new ArrayList<Agent>()); meta.getAgents().add(new Agent()); meta.setDocuments(new ArrayList<Document>()); meta.getDocuments().add(new Document()); meta.setEvents(new ArrayList<Event>()); meta.getEvents().add(new Event()); meta.setPersons(new ArrayList<Person>()); meta.getPersons().add(makePerson()); meta.setRelationships(new ArrayList<Relationship>()); meta.getRelationships().add(new Relationship()); meta.setExtensionElements(new ArrayList<Object>()); meta.getExtensionElements().add(new Gedcomx()); return meta; } private Person makePerson() { Person person = new Person(); person.setDisplayExtension(new DisplayProperties()); person.getDisplayExtension().addFamilyAsParent(makeFam("dad", "mom", "kid1", "kid2")); return person; } public void testFamily() { Gedcomx g = makeDoc(); FamilyView family = g.getPersons().get(0).getDisplayExtension().getFamiliesAsParent().get(0); // dad-mom relationship Relationship couple = g.findCoupleRelationship(family); assertEquals(RelationshipType.Couple, couple.getKnownType()); assertEquals("#dad", couple.getPerson1().getResource().toString()); assertEquals("#mom", couple.getPerson2().getResource().toString()); assertEquals(couple, g.findCoupleRelationship(family.getParent1(), family.getParent2())); // dad-kid1 relationship Relationship pcRel = g.findParentChildRelationship(family.getParent1(), family.getChildren().get(0)); assertEquals(RelationshipType.ParentChild, pcRel.getKnownType()); assertEquals("#dad", pcRel.getPerson1().getResource().toString()); assertEquals("#kid1", pcRel.getPerson2().getResource().toString()); assertEquals(FactType.AdoptiveParent, pcRel.getFacts().get(0).getKnownType()); assertNull(pcRel.getFacts().get(0).getValue()); // mom-kid1 relationship pcRel = g.findParentChildRelationship(family.getParent2(), family.getChildren().get(0)); assertEquals(RelationshipType.ParentChild, pcRel.getKnownType()); assertEquals("#mom", pcRel.getPerson1().getResource().toString()); assertEquals("#kid1", pcRel.getPerson2().getResource().toString()); assertEquals(FactType.BiologicalParent, pcRel.getFacts().get(0).getKnownType()); // mom-kid2 relationship pcRel = g.findParentChildRelationship(family.getParent2(), family.getChildren().get(1)); assertEquals(RelationshipType.ParentChild, pcRel.getKnownType()); assertEquals("#mom", pcRel.getPerson1().getResource().toString()); assertEquals("#kid2", pcRel.getPerson2().getResource().toString()); assertNull(pcRel.getFacts()); } private Gedcomx makeDoc() { Gedcomx g = new Gedcomx(); g.addPerson(makePerson()); g.addRelationship(makeRel("dad", "mom", RelationshipType.Couple)); g.addRelationship(kidRel("dad", "kid1", FactType.AdoptiveParent)); g.addRelationship(kidRel("mom", "kid1", FactType.BiologicalParent)); g.addRelationship(kidRel("dad", "kid2", null)); g.addRelationship(kidRel("mom", "kid2", null)); return g; } private static FamilyView makeFam(String fatherId, String motherId, String... kidIds) { FamilyView family = new FamilyView(); family.setParent1(makeRef(fatherId)); family.setParent2(makeRef(motherId)); if (kidIds != null) { for (String kidId : kidIds) { family.addChild(makeRef(kidId)); } } return family; } protected static Relationship kidRel(String parentId, String kidId, FactType lineageType) { Relationship relationship = makeRel(parentId, kidId, RelationshipType.ParentChild); if (lineageType != null) { relationship.addFact(new Fact(lineageType, null)); } return relationship; } protected static Relationship makeRel(String id1, String id2, RelationshipType relationshipType) { Relationship relationship = new Relationship(); relationship.setKnownType(relationshipType); relationship.setPerson1(makeRef(id1)); relationship.setPerson2(makeRef(id2)); return relationship; } protected static ResourceReference makeRef(String id) { return id == null ? null : new ResourceReference(new URI("#" + id)); } }