package org.gedcomx.conclusion; import org.gedcomx.common.*; import org.gedcomx.source.SourceReference; import org.gedcomx.types.*; import org.testng.annotations.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static org.gedcomx.rt.SerializationUtil.processThroughJson; import static org.gedcomx.rt.SerializationUtil.processThroughXml; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertNull; import static org.testng.AssertJUnit.assertTrue; /** * @author Ryan Heaton */ @Test public class PersonTest { /** * tests processing a WWW person through xml... */ public void testPersonXml() throws Exception { Person person = create(); person = processThroughXml(person); assertPersonEquals(person); } /** * tests processing a WWW person through json... */ public void testPersonJson() throws Exception { Person person = create(); person = processThroughJson(person); assertPersonEquals(person); } public void testDisplayProperties() throws Exception { Person person = new Person(); DisplayProperties display = new DisplayProperties(); display.setAscendancyNumber("1"); display.setBirthDate("2"); display.setBirthPlace("3"); display.setDeathDate("4"); display.setDeathPlace("5"); display.setDescendancyNumber("6"); display.setGender("7"); display.setLifespan("8"); display.setName("9"); person.setDisplayExtension(display); person = processThroughXml(person); assertEquals("1", person.getDisplayExtension().getAscendancyNumber()); assertEquals("2", person.getDisplayExtension().getBirthDate()); assertEquals("3", person.getDisplayExtension().getBirthPlace()); assertEquals("4", person.getDisplayExtension().getDeathDate()); assertEquals("5", person.getDisplayExtension().getDeathPlace()); assertEquals("6", person.getDisplayExtension().getDescendancyNumber()); assertEquals("7", person.getDisplayExtension().getGender()); assertEquals("8", person.getDisplayExtension().getLifespan()); assertEquals("9", person.getDisplayExtension().getName()); } public void testPersonPersistentIdHelpers() throws Exception { Person person = create(); assertPersonEquals(person); assertEquals(2, person.getIdentifiers().size()); assertEquals("pal", person.getPersistentId().toURI().toString()); person.setPersistentId(URI.create("urn:pal")); assertEquals("urn:pal", person.getPersistentId().toURI().toString()); person.getIdentifiers().clear(); assertNull(person.getPersistentId()); person.setIdentifiers(null); assertNull(person.getPersistentId()); person.setPersistentId(URI.create("urn:pal")); assertEquals("urn:pal", person.getPersistentId().toURI().toString()); } public void testPersonGetFirstNameOfType() throws Exception { Person person = create(); assertPersonEquals(person); assertEquals("type=FormalName,nameForms[0]=primary form,pref=true", person.getFirstNameOfType(NameType.FormalName).toString()); assertNull(person.getFirstNameOfType(NameType.BirthName)); person.setNames(null); assertNull(person.getFirstNameOfType(NameType.FormalName)); } public void testPersonGetPreferredName() throws Exception { Person person = create(); assertPersonEquals(person); assertEquals("type=FormalName,nameForms[0]=primary form,pref=true", person.getPreferredName().toString()); person.setNames(null); assertNull(person.getPreferredName()); } public void testFactHelpers() throws Exception { Fact fact = new Fact(); Person person = create(); assertPersonEquals(person); person.addFact(fact); assertEquals(3, person.getFacts().size()); assertEquals(1, person.getFacts(FactType.Adoption).size()); assertEquals("type=Adoption,value=null,date=Date{original='original date', formal=normalized date},place=PlaceReference{original='original place', descriptionRef='urn:place'}", person.getFacts(FactType.Adoption).get(0).toString()); assertEquals("type=Adoption,value=null,date=Date{original='original date', formal=normalized date},place=PlaceReference{original='original place', descriptionRef='urn:place'}", person.getFirstFactOfType(FactType.Adoption).toString()); assertEquals(1, person.getFacts(FactType.Occupation).size()); assertEquals("type=Occupation,value=fact-value,date=Date{original='original date', formal=formal},place=PlaceReference{original='original place', descriptionRef='urn:place'}", person.getFacts(FactType.Occupation).get(0).toString()); assertEquals("type=Occupation,value=fact-value,date=Date{original='original date', formal=formal},place=PlaceReference{original='original place', descriptionRef='urn:place'}", person.getFirstFactOfType(FactType.Occupation).toString()); person.getFacts().clear(); assertNotNull(person.getFacts()); assertEquals(0, person.getFacts(FactType.Adoption).size()); assertEquals(0, person.getFacts(null).size()); assertNull(person.getFirstFactOfType(FactType.Adoption)); person.setFacts(null); assertNull(person.getFacts()); assertEquals(0, person.getFacts(FactType.Adoption).size()); assertNull(person.getFirstFactOfType(FactType.Adoption)); person.addFact(null); assertNull(person.getFacts()); } static Person create() { Person person = new Person(); person.setGender(new Gender(GenderType.Male)); ArrayList<Identifier> identifiers = new ArrayList<Identifier>(); Identifier identifier = new Identifier(); identifier.setKnownType(IdentifierType.Deprecated); identifier.setValue(URI.create("forward-value")); identifiers.add(identifier); identifier = new Identifier(); identifier.setKnownType(IdentifierType.Persistent); identifier.setValue(URI.create("pal")); identifiers.add(identifier); person.setIdentifiers(identifiers); Fact fact = new Fact(); fact.setKnownConfidenceLevel(ConfidenceLevel.High); fact.setDate(new Date()); fact.getDate().setOriginal("original date"); fact.getDate().setFormal("formal"); fact.getDate().setNormalizedExtensions(Arrays.asList(new TextValue("normalized date"))); fact.setId("fact-id"); fact.setKnownType(FactType.Occupation); fact.setPlace(new PlaceReference()); fact.getPlace().setOriginal("original place"); fact.getPlace().setDescriptionRef(URI.create("urn:place")); fact.setValue("fact-value"); person.addFact(fact); Fact event = new Fact(); event.setDate(new Date()); event.getDate().setOriginal("original date"); event.getDate().setFormal("normalized date"); event.setId("event-id"); event.setKnownType(FactType.Adoption); event.setPlace(new PlaceReference()); event.getPlace().setOriginal("original place"); event.getPlace().setDescriptionRef(URI.create("urn:place")); event.setSources(new ArrayList<SourceReference>()); SourceReference eventSource = new SourceReference(); eventSource.setDescriptionRef(URI.create("urn:event-source")); eventSource.setAttribution(new Attribution()); event.getSources().add(eventSource); List<Fact> facts = person.getFacts(); facts.add(event); person.setFacts(facts); Name name = new Name(); name.setId("name-id"); name.setPreferred(true); name.setKnownType(NameType.FormalName); name.setNameForms(new ArrayList<NameForm>()); name.getNameForms().add(new NameForm()); name.getNameForms().get(0).setFullText("primary form"); name.getNameForms().get(0).setParts(new ArrayList<NamePart>()); name.getNameForms().get(0).getParts().add(new NamePart()); name.getNameForms().get(0).getParts().get(0).setKnownType(NamePartType.Surname); name.getNameForms().get(0).getParts().get(0).setValue("primary surname"); name.getNameForms().add(new NameForm()); name.getNameForms().get(1).setFullText("alternate name form"); name.getNameForms().get(1).setParts(new ArrayList<NamePart>()); name.getNameForms().get(1).getParts().add(new NamePart()); name.getNameForms().get(1).getParts().get(0).setKnownType(NamePartType.Given); name.getNameForms().get(1).getParts().get(0).setValue("alternate name part"); List<Name> names = new ArrayList<Name>(); names.add(name); person.setNames(names); ArrayList<SourceReference> sources = new ArrayList<SourceReference>(); SourceReference attributedSourceReference = new SourceReference(); Attribution attribution = new Attribution(); attribution.setContributor(new ResourceReference()); attribution.getContributor().setResource(URI.create("urn:source-reference-attribution")); attributedSourceReference.setAttribution(attribution); attributedSourceReference.setDescriptionRef(URI.create("urn:source-description")); sources.add(attributedSourceReference); person.setSources(sources); person.setId("pid"); person.setAttribution(new Attribution()); person.getAttribution().setChangeMessage("this person existed."); person.setLiving(true); return person; } static void assertPersonEquals(Person person) { Fact fact; Fact event; Name name; SourceReference sr; assertEquals(GenderType.Male, person.getGender().getKnownType()); assertEquals(2, person.getIdentifiers().size()); Identifier identifier1 = person.getIdentifiers().get(0); Identifier identifier2 = person.getIdentifiers().get(1); Identifier deprecatedIdentifier = identifier1.getKnownType() == IdentifierType.Deprecated ? identifier1 : identifier2; Identifier persistentIdentifier = identifier1.getKnownType() == IdentifierType.Persistent ? identifier1 : identifier2; assertEquals(IdentifierType.Deprecated, deprecatedIdentifier.getKnownType()); assertEquals("forward-value", deprecatedIdentifier.getValue().toString()); assertEquals(IdentifierType.Persistent, persistentIdentifier.getKnownType()); assertEquals("pal", persistentIdentifier.getValue().toString()); assertEquals(2, person.getFacts().size()); fact = person.getFirstFactOfType(FactType.Occupation); assertEquals(ConfidenceLevel.High, fact.getKnownConfidenceLevel()); assertEquals("original date", fact.getDate().getOriginal()); assertEquals("formal", fact.getDate().getFormal()); assertEquals("normalized date", fact.getDate().getNormalizedExtensions().get(0).getValue()); assertEquals("fact-id", fact.getId()); assertEquals(FactType.Occupation, fact.getKnownType()); assertEquals("original place", fact.getPlace().getOriginal()); assertEquals("urn:place", fact.getPlace().getDescriptionRef().toURI().toString()); assertEquals("fact-value", fact.getValue()); event = person.getFirstFactOfType(FactType.Adoption); assertEquals("original date", event.getDate().getOriginal()); assertEquals("normalized date", event.getDate().getFormal()); assertEquals("event-id", event.getId()); assertEquals(FactType.Adoption, event.getKnownType()); assertEquals("original place", event.getPlace().getOriginal()); assertEquals("urn:place", event.getPlace().getDescriptionRef().toURI().toString()); assertEquals(1, person.getNames().size()); name = person.getNames().iterator().next(); assertTrue(name.getPreferred()); assertEquals(2, name.getNameForms().size()); assertEquals("alternate name form", name.getNameForms().get(1).getFullText()); assertEquals(1, name.getNameForms().get(1).getParts().size()); assertEquals("alternate name part", name.getNameForms().get(1).getParts().get(0).getValue()); assertEquals(NamePartType.Given, name.getNameForms().get(1).getParts().get(0).getKnownType()); assertEquals("name-id", name.getId()); assertEquals(NameType.FormalName, name.getKnownType()); assertEquals("primary form", name.getNameForms().get(0).getFullText()); assertEquals(1, name.getNameForms().get(0).getParts().size()); assertEquals("primary surname", name.getNameForms().get(0).getParts().get(0).getValue()); assertEquals(NamePartType.Surname, name.getNameForms().get(0).getParts().get(0).getKnownType()); assertEquals("pal", person.getPersistentId().toString()); assertEquals(1, person.getSources().size()); sr = person.getSources().iterator().next(); assertEquals("urn:source-reference-attribution", sr.getAttribution().getContributor().getResource().toString()); assertEquals("urn:source-description", sr.getDescriptionRef().toString()); assertEquals("pid", person.getId()); assertEquals("this person existed.", person.getAttribution().getChangeMessage()); assertTrue(person.getLiving()); } }