def test_041_Pointer_sub(self): """Test Pointer class.""" class Parser(object): def __init__(self): self.xref0 = { b"@pointer0@": (0, "TAG0"), b"@pointer1@": (1, "TAG1") } def read_record(self, offset): return str(offset) dialect = model.DIALECT_MYHERITAGE parser = Parser() husb = model.make_record(1, None, "HUSB", b"@pointer0@", [], 0, dialect, parser).freeze() wife = model.make_record(1, None, "WIFE", b"@pointer1@", [], 0, dialect, parser).freeze() fam = model.make_record(0, None, "FAM", "", [husb, wife], 0, dialect, parser).freeze() rec = fam.sub_tag("HUSB", follow=True) self.assertEqual(rec, "0") rec = fam.sub_tag("HUSB", follow=False) self.assertTrue(rec is not None) self.assertIsInstance(rec, model.Pointer) recs = fam.sub_tags("HUSB", "WIFE", follow=True) self.assertEqual(recs, ["0", "1"]) recs = fam.sub_tags("HUSB", "WIFE", follow=False) self.assertEqual(len(recs), 2) self.assertIsInstance(recs[0], model.Pointer) self.assertIsInstance(recs[1], model.Pointer)
def test_022_name_myher(self): """Test Name class with MYHERITAGE dialect.""" dialect = model.DIALECT_MYHERITAGE married = model.make_record(2, None, "_MARNM", "Smith", [], 0, dialect).freeze() names = [ model.make_record(1, None, "NAME", "Jane /Sawyer/ A.", [married], 0, dialect).freeze() ] name = model.Name(names, dialect) self.assertTrue(name._primary is names[0]) self.assertEqual(name.surname, "Smith") self.assertEqual(name.given, "Jane A.") self.assertEqual(name.maiden, "Sawyer") self.assertEqual(name.order(model.ORDER_SURNAME_GIVEN), ("1Smith", "1Jane A.")) self.assertEqual(name.order(model.ORDER_GIVEN_SURNAME), ("1Jane A.", "1Smith")) self.assertEqual(name.order(model.ORDER_MAIDEN_GIVEN), ("1Sawyer", "1Jane A.")) self.assertEqual(name.order(model.ORDER_GIVEN_MAIDEN), ("1Jane A.", "1Sawyer")) self.assertEqual(name.format(), ("Jane Smith A."))
def test_021_name_altree(self): """Test Name class with ALTREE dialect.""" dialect = model.DIALECT_ALTREE surn = model.make_record(2, None, "SURN", "Sawyer", [], 0, dialect).freeze() names = [model.make_record(1, None, "NAME", "Jane /Smith (Sawyer)/ A.", [surn], 0, dialect).freeze()] name = model.Name(names, dialect) self.assertTrue(name._primary is names[0]) self.assertEqual(name.surname, "Smith") self.assertEqual(name.given, "Jane A.") self.assertEqual(name.maiden, "Sawyer") self.assertEqual(name.order(model.ORDER_SURNAME_GIVEN), ("1Smith", "1Jane A.")) self.assertEqual(name.order(model.ORDER_GIVEN_SURNAME), ("1Jane A.", "1Smith")) self.assertEqual(name.order(model.ORDER_MAIDEN_GIVEN), ("1Sawyer", "1Jane A.")) self.assertEqual(name.order(model.ORDER_GIVEN_MAIDEN), ("1Jane A.", "1Sawyer")) self.assertEqual(name.format(), ("Jane Smith A.")) names = [model.make_record(1, None, "NAME", "Jane /?/ A.", [], 0, dialect).freeze()] name = model.Name(names, dialect) self.assertTrue(name._primary is names[0]) self.assertEqual(name.surname, "") self.assertEqual(name.given, "Jane A.") self.assertTrue(name.maiden is None) self.assertEqual(name.order(model.ORDER_SURNAME_GIVEN), ("2", "1Jane A.")) self.assertEqual(name.order(model.ORDER_GIVEN_SURNAME), ("1Jane A.", "2")) self.assertEqual(name.order(model.ORDER_MAIDEN_GIVEN), ("2", "1Jane A.")) self.assertEqual(name.order(model.ORDER_GIVEN_MAIDEN), ("1Jane A.", "2")) self.assertEqual(name.format(), ("Jane A."))
def test_020_name_default(self): """Test Name class with DEFAULT dialect.""" dialect = model.DIALECT_DEFAULT names = [model.make_record(1, None, "NAME", "John /Smith/", [], 0, dialect).freeze()] name = model.Name(names, dialect) self.assertTrue(name._primary is names[0]) self.assertEqual(name.surname, "Smith") self.assertEqual(name.given, "John") self.assertTrue(name.maiden is None) self.assertEqual(name.order(model.ORDER_SURNAME_GIVEN), ("1Smith", "1John")) self.assertEqual(name.order(model.ORDER_GIVEN_SURNAME), ("1John", "1Smith")) self.assertEqual(name.order(model.ORDER_MAIDEN_GIVEN), ("1Smith", "1John")) self.assertEqual(name.order(model.ORDER_GIVEN_MAIDEN), ("1John", "1Smith")) self.assertEqual(name.format(), ("John Smith")) names = [model.make_record(1, None, "NAME", "John", [], 0, dialect).freeze()] name = model.Name(names, dialect) self.assertTrue(name._primary is names[0]) self.assertEqual(name.surname, "") self.assertEqual(name.given, "John") self.assertTrue(name.maiden is None) self.assertEqual(name.order(model.ORDER_SURNAME_GIVEN), ("2", "1John")) self.assertEqual(name.order(model.ORDER_GIVEN_SURNAME), ("1John", "2")) self.assertEqual(name.order(model.ORDER_MAIDEN_GIVEN), ("2", "1John")) self.assertEqual(name.order(model.ORDER_GIVEN_MAIDEN), ("1John", "2")) self.assertEqual(name.format(), ("John")) name_type = model.make_record(2, None, "TYPE", "maiden", [], 0, dialect).freeze() names = [model.make_record(1, None, "NAME", "/Sawyer/", [name_type], 0, dialect).freeze(), model.make_record(1, None, "NAME", "Jane /Smith/ A.", [], 0, dialect).freeze()] name = model.Name(names, dialect) self.assertTrue(name._primary is names[1]) self.assertEqual(name.surname, "Smith") self.assertEqual(name.given, "Jane A.") self.assertEqual(name.maiden, "Sawyer") self.assertEqual(name.order(model.ORDER_SURNAME_GIVEN), ("1Smith", "1Jane A.")) self.assertEqual(name.order(model.ORDER_GIVEN_SURNAME), ("1Jane A.", "1Smith")) self.assertEqual(name.order(model.ORDER_MAIDEN_GIVEN), ("1Sawyer", "1Jane A.")) self.assertEqual(name.order(model.ORDER_GIVEN_MAIDEN), ("1Jane A.", "1Sawyer")) self.assertEqual(name.format(), ("Jane Smith A."))
def test_040_Pointer(self): """Test Pointer class.""" class Parser(object): def __init__(self): self.xref0 = { b"@pointer0@": (0, "TAG0"), b"@pointer1@": (1, "TAG1") } def read_record(self, offset): return str(offset) pointer = model.Pointer(Parser()) pointer.value = b"@pointer0@" pointer.freeze() self.assertEqual(pointer.value, b"@pointer0@") self.assertEqual(pointer.ref, "0") dialect = model.DIALECT_MYHERITAGE pointer = model.make_record(1, None, "FAMC", b"@pointer1@", [], 0, dialect, Parser()).freeze() self.assertIsInstance(pointer, model.Pointer) self.assertEqual(pointer.value, b"@pointer1@") self.assertEqual(pointer.ref, "1")
def test_030_date(self): """Test Date class.""" dialect = model.DIALECT_MYHERITAGE date = model.make_record(1, None, "DATE", "1970", [], 0, dialect).freeze() self.assertIsInstance(date, model.Date) self.assertIsInstance(date.value, DateValue)
def test_003_family_events(): """Test family_events method.""" dialect = model.DIALECT_MYHERITAGE rtype = model.make_record(2, None, "TYPE", "SomeType", [], 0, dialect, None).freeze() rec1 = model.make_record(1, None, "MARR", "Y", [rtype], 0, dialect, None).freeze() plac = model.make_record(2, None, "PLAC", "Some Place", [], 0, dialect, None).freeze() rec2 = model.make_record(1, None, "DIV", "", [plac], 0, dialect, None).freeze() rec3 = model.make_record(1, None, "OCCU", "", [], 0, dialect, None).freeze() rec4 = model.make_record(1, None, "EDUC", "", [], 0, dialect, None).freeze() fam = model.make_record(0, None, "FAM", "", [rec1, rec2, rec3, rec4], 0, dialect, None).freeze() evts = events.family_events(fam) assert len(evts) == 2 assert evts[0].tag == 'MARR' assert evts[0].value == 'Y' assert evts[0].type == 'SomeType' assert evts[0].place is None assert evts[1].tag == 'DIV' assert evts[1].value == '' assert evts[1].type is None assert evts[1].place == 'Some Place' evts = events.family_events(fam, ['MARR']) assert len(evts) == 1 assert evts[0].tag == 'MARR'
def test_002_indi_attributes(): """Test indi_attributes method.""" dialect = model.DIALECT_MYHERITAGE rec1 = model.make_record(1, None, "BIRT", "", [], 0, dialect, None).freeze() rec2 = model.make_record(1, None, "DEAT", "Y", [], 0, dialect, None).freeze() rtype = model.make_record(2, None, "TYPE", "SomeType", [], 0, dialect, None).freeze() rec3 = model.make_record(1, None, "OCCU", "Occupational Occupation", [rtype], 0, dialect, None).freeze() plac = model.make_record(2, None, "PLAC", "Some Place", [], 0, dialect, None).freeze() rec4 = model.make_record(1, None, "EDUC", "Sunday Church", [plac], 0, dialect, None).freeze() person = model.make_record(0, None, "INDI", "", [rec1, rec2, rec3, rec4], 0, dialect, None).freeze() evts = events.indi_attributes(person) assert len(evts) == 2 assert evts[0].tag == 'OCCU' assert evts[0].value == 'Occupational Occupation' assert evts[0].type == 'SomeType' assert evts[0].place is None assert evts[1].tag == 'EDUC' assert evts[1].value == 'Sunday Church' assert evts[1].type is None assert evts[1].place == 'Some Place' evts = events.indi_attributes(person, ['OCCU']) assert len(evts) == 1 assert evts[0].tag == 'OCCU'
def test_030_date(self): """Test Date class.""" dialect = model.DIALECT_MYHERITAGE date = model.make_record(1, None, "DATE", "1970", [], 0, dialect).freeze() self.assertIsInstance(date, model.Date) self.assertIsInstance(date.value, DateValue) # empty date tag makes Date with empty DateValue dialect = model.DIALECT_DEFAULT date = model.make_record(1, None, "DATE", None, [], 0, dialect).freeze() self.assertIsInstance(date, model.Date) self.assertIsInstance(date.value, DateValue) self.assertEqual(date.value.template, "") date = model.make_record(1, None, "DATE", "", [], 0, dialect).freeze() self.assertIsInstance(date, model.Date) self.assertIsInstance(date.value, DateValue) self.assertEqual(date.value.template, "")
def test_900_make_record(self): """Test make_record method()""" rec = model.make_record(0, "@xref@", "TAG", "value", [], 1000, model.DIALECT_DEFAULT) rec.freeze() self.assertTrue(type(rec) is model.Record) self.assertEqual(rec.level, 0) self.assertEqual(rec.xref_id, "@xref@") self.assertEqual(rec.tag, "TAG") self.assertEqual(rec.value, "value") self.assertEqual(rec.sub_records, []) self.assertEqual(rec.offset, 1000) self.assertEqual(rec.dialect, model.DIALECT_DEFAULT) rec = model.make_record(1, None, "NAME", "Joe", [], 1000, model.DIALECT_ALTREE) rec.freeze() self.assertTrue(type(rec) is model.NameRec) self.assertEqual(rec.level, 1) self.assertTrue(rec.xref_id is None) self.assertEqual(rec.tag, "NAME") self.assertEqual(rec.value, ("Joe", "", "")) self.assertEqual(rec.sub_records, []) self.assertEqual(rec.offset, 1000) self.assertEqual(rec.dialect, model.DIALECT_ALTREE) rec = model.make_record(0, "@I1@", "INDI", None, [], 1000, model.DIALECT_MYHERITAGE) rec.freeze() self.assertTrue(type(rec) is model.Individual) self.assertEqual(rec.level, 0) self.assertEqual(rec.xref_id, "@I1@") self.assertEqual(rec.tag, "INDI") self.assertTrue(rec.value is None) self.assertEqual(rec.sub_records, []) self.assertEqual(rec.offset, 1000) self.assertEqual(rec.dialect, model.DIALECT_MYHERITAGE)
def test_001_indi_events(): """Test indi_events method.""" dialect = model.DIALECT_MYHERITAGE rtype = model.make_record(2, None, "TYPE", "SomeType", [], 0, dialect, None).freeze() rec1 = model.make_record(1, None, "BIRT", "", [rtype], 0, dialect, None).freeze() plac = model.make_record(2, None, "PLAC", "Some Place", [], 0, dialect, None).freeze() caus = model.make_record(2, None, "CAUS", "Some cause", [], 0, dialect, None).freeze() rec2 = model.make_record(1, None, "DEAT", "Y", [plac, caus], 0, dialect, None).freeze() rec3 = model.make_record(1, None, "OCCU", "", [], 0, dialect, None).freeze() rec4 = model.make_record(1, None, "EDUC", "", [], 0, dialect, None).freeze() person = model.make_record(0, None, "INDI", "", [rec1, rec2, rec3, rec4], 0, dialect, None).freeze() evts = events.indi_events(person) assert len(evts) == 2 assert evts[0].tag == 'BIRT' assert evts[0].value == '' assert evts[0].type == 'SomeType' assert evts[0].place is None assert evts[0].cause is None assert evts[1].tag == 'DEAT' assert evts[1].value == 'Y' assert evts[1].type is None assert evts[1].place == 'Some Place' assert evts[1].cause == 'Some cause' evts = events.indi_events(person, ['BIRT']) assert len(evts) == 1 assert evts[0].tag == 'BIRT'
def test_050_personImageFile(): """Test personImageFile method.""" # FORM is subordinate of OBJE dialect = model.DIALECT_MYHERITAGE form = model.make_record(2, None, "FORM", "JPG", [], 0, dialect, None).freeze() file = model.make_record(2, None, "FILE", "/path/to/file.jpeg", [], 0, dialect, None).freeze() obje = model.make_record(1, None, "OBJE", "", [file, form], 0, dialect, None).freeze() person = model.make_record(0, None, "INDI", "", [obje], 0, dialect, None).freeze() assert utils.personImageFile(person) == "/path/to/file.jpeg" # FORM is subordinate of FILE dialect = model.DIALECT_MYHERITAGE form = model.make_record(3, None, "FORM", "JPG", [], 0, dialect, None).freeze() file = model.make_record(2, None, "FILE", "/path/to/file.jpeg", [form], 0, dialect, None).freeze() obje = model.make_record(1, None, "OBJE", "", [file], 0, dialect, None).freeze() person = model.make_record(0, None, "INDI", "", [obje], 0, dialect, None).freeze() assert utils.personImageFile(person) == "/path/to/file.jpeg" # FORM is subordinate of OBJE dialect = model.DIALECT_MYHERITAGE form = model.make_record(2, None, "FORM", "WAV", [], 0, dialect, None).freeze() file = model.make_record(2, None, "FILE", "/path/to/file.wav", [], 0, dialect, None).freeze() obje = model.make_record(1, None, "OBJE", "", [file, form], 0, dialect, None).freeze() person = model.make_record(0, None, "INDI", "", [obje], 0, dialect, None).freeze() assert utils.personImageFile(person) == None # FORM is subordinate of FILE dialect = model.DIALECT_MYHERITAGE form = model.make_record(3, None, "FORM", "WAV", [], 0, dialect, None).freeze() file = model.make_record(2, None, "FILE", "/path/to/file.wav", [form], 0, dialect, None).freeze() obje = model.make_record(1, None, "OBJE", "", [file], 0, dialect, None).freeze() person = model.make_record(0, None, "INDI", "", [obje], 0, dialect, None).freeze() assert utils.personImageFile(person) == None # _PRIM flag is set on one of the two OBJE dialect = model.DIALECT_MYHERITAGE form = model.make_record(2, None, "FORM", "JPG", [], 0, dialect, None).freeze() file = model.make_record(2, None, "FILE", "/path/to/file.jpg", [], 0, dialect, None).freeze() obje1 = model.make_record(1, None, "OBJE", "", [file, form], 0, dialect, None).freeze() prim_y = model.make_record(2, None, "_PRIM", "Y", [], 0, dialect, None).freeze() form = model.make_record(2, None, "FORM", "JPG", [], 0, dialect, None).freeze() file = model.make_record(2, None, "FILE", "/path/to/file_primary.jpg", [], 0, dialect, None).freeze() obje2 = model.make_record(1, None, "OBJE", "", [file, form, prim_y], 0, dialect, None).freeze() person = model.make_record(0, None, "INDI", "", [obje1, obje2], 0, dialect, None).freeze() assert utils.personImageFile(person) == "/path/to/file_primary.jpg" person = model.make_record(0, None, "INDI", "", [obje2, obje1], 0, dialect, None).freeze() assert utils.personImageFile(person) == "/path/to/file_primary.jpg" # multiple FILEs per OBJE, choose JPG over WAV dialect = model.DIALECT_MYHERITAGE form = model.make_record(3, None, "FORM", "JPG", [], 0, dialect, None).freeze() file1 = model.make_record(2, None, "FILE", "/path/to/file.jpeg", [form], 0, dialect, None).freeze() form = model.make_record(3, None, "FORM", "WAV", [], 0, dialect, None).freeze() file2 = model.make_record(2, None, "FILE", "/path/to/file.wav", [form], 0, dialect, None).freeze() obje = model.make_record(1, None, "OBJE", "", [file1, file2], 0, dialect, None).freeze() person = model.make_record(0, None, "INDI", "", [obje], 0, dialect, None).freeze() assert utils.personImageFile(person) == "/path/to/file.jpeg" obje = model.make_record(1, None, "OBJE", "", [file2, file1], 0, dialect, None).freeze() person = model.make_record(0, None, "INDI", "", [obje], 0, dialect, None).freeze() assert utils.personImageFile(person) == "/path/to/file.jpeg"