Skip to content

Commit

Permalink
Use the event type as key of the event to not lose it and being able …
Browse files Browse the repository at this point in the history
…to reconstruct it again
  • Loading branch information
albarin committed Aug 21, 2024
1 parent 6cf70c5 commit 9685b29
Show file tree
Hide file tree
Showing 9 changed files with 131 additions and 10 deletions.
2 changes: 1 addition & 1 deletion src/Parser/Fam.php
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public static function parse(\Gedcom\Parser $parser)
$class = '\\Gedcom\\Parser\\Fam\\'.$className;

$even = $class::parse($parser);
$fam->addEven($even);
$fam->addEven($recordType, $even);
break;
case 'HUSB':
$fam->setHusb($parser->normalizeIdentifier($record[2]));
Expand Down
4 changes: 2 additions & 2 deletions src/Record/Fam.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ class Fam extends \Gedcom\Record implements Noteable, Sourceable, Objectable

protected $_obje = [];

public function addEven($even)
public function addEven($recordType, $even)
{
$this->_even[$even->getType()] = $even;
$this->_even[$recordType] = $even;
}

/**
Expand Down
4 changes: 2 additions & 2 deletions src/Writer/Fam.php
Original file line number Diff line number Diff line change
Expand Up @@ -139,9 +139,9 @@ public static function convert(\Gedcom\Record\Fam &$fam, $level = 0)
// EVEN
$even = $fam->getAllEven();
if (!empty($even) && $even !== []) {
foreach ($even as $item) {
foreach ($even as $eventType => $item) {
if ($item) {
$_convert = \Gedcom\Writer\Fam\Even::convert($item, $level);
$_convert = \Gedcom\Writer\Fam\Even::convert($item, $eventType, $level);
$output .= $_convert;
}
}
Expand Down
9 changes: 4 additions & 5 deletions src/Writer/Fam/Even.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,21 @@ class Even
*
* @return string
*/
public static function convert(\Gedcom\Record\Fam\Even &$even, $level)
public static function convert(\Gedcom\Record\Fam\Even &$even, $eventType, $level)
{
$output = '';

// $type;
$type = $even->getType();
if (!empty($type)) {
$output .= $level.' '.$type."\n";
if (!empty($eventType)) {
$output .= $level.' '.$eventType."\n";
} else {
return $output;
}
$level++;

// $type;
$type = $even->getType();
if (!empty($type)) {
if (!empty($type) && $type != $eventType) {
$output .= $level.' TYPE '.$type."\n";
}

Expand Down
1 change: 1 addition & 0 deletions tests/.phpunit.result.cache
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"version":1,"defects":{"GedcomTest\\ParserTest::testHead":7,"GedcomTest\\FamParserTest::testFam":7,"GedcomTest\\FamParserTest::testSingleFamilyEvent":7,"GedcomTest\\FamParserTest::testFamilyEventType":7,"GedcomTest\\FamParserTest::testFamilyEventWithNoTypeIsParsed":8,"GedcomTest\\FamParserTest::testFamilyEventWithTypeIsParsed":7,"GedcomTest\\FamParserTest::test":5,"GedcomTest\\FamWriterTest::test":7,"GedcomTest\\FamWriterTest::testFamilyEventWithNoTypeIsConverted":7,"GedcomTest\\FamWriterTest::testWriteFamilyEventWithoutType":7,"GedcomTest\\FamWriterTest::testFamilyEventIsConvertedToTheOriginal":8},"times":{"GedcomTest\\ParserTest::testNoErrors":0,"GedcomTest\\ParserTest::testRecordCounts":0,"GedcomTest\\ParserTest::testHead":0.002,"GedcomTest\\ParserTest::testSubn":0,"GedcomTest\\ParserTest::testSubm":0,"GedcomTest\\ParserTest::testSour":0,"GedcomTest\\ParserTest::testNote":0,"GedcomTest\\ParserTest::testNormalizeIdentifier":0,"GedcomTest\\FamParserTest::testFam":0.001,"GedcomTest\\FamParserTest::testSingleFamilyEvent":0.004,"GedcomTest\\FamParserTest::testFamilyEventType":0.001,"GedcomTest\\FamParserTest::testFamilyEventWithNoTypeIsParsed":0.001,"GedcomTest\\FamParserTest::testFamilyEventWithTypeIsParsed":0,"GedcomTest\\FamParserTest::test":0.002,"GedcomTest\\FamWriterTest::testFamilyEventWithNoTypeIsConverted":0.001,"GedcomTest\\FamWriterTest::test":0.001,"GedcomTest\\FamWriterTest::test1":0.001,"GedcomTest\\FamWriterTest::testWriteFamilyEventWithType":0.001,"GedcomTest\\FamWriterTest::testWriteFamilyEventWithoutType":0,"GedcomTest\\FamWriterTest::testFamilyEventIsConvertedToTheOriginal":0.002,"GedcomTest\\FamWriterTest::testFamilyEventIsConvertedToTheOriginal#0":0.004,"GedcomTest\\FamWriterTest::testFamilyEventIsConvertedToTheOriginal#1":0}}
66 changes: 66 additions & 0 deletions tests/library/Gedcom/FamParserTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?php

namespace GedcomTest;

use Gedcom\Parser;

/**
* Class FamParserTest.
*/
class FamParserTest extends \PHPUnit\Framework\TestCase
{
/**
* @var \Gedcom\Parser
*/
protected $parser = null;

/**
* @var \Gedcom\Gedcom
*/
protected $gedcom = null;

public function setUp(): void
{
$this->parser = new Parser();
}

/**
* Test a family event type with no type is parsed.
*/
public function testFamilyEventWithNoTypeIsParsed()
{
$this->gedcom = $this->parser->parse(\TEST_DIR . '/stresstestfiles/family/family_event_no_type.ged');

$fam = $this->gedcom->getFam('F1');

$events = $fam['F1']->getAllEven();
$this->assertCount(1, $events);

$eventType = array_keys($events)[0];
$event = $events[$eventType];

$this->assertEquals('MARR', $eventType);
$this->assertEquals('MARR', $event->getType());
$this->assertEquals('2007-02-11', $event->getDate());
}

/**
* Test a family event type with a type is parsed.
*/
public function testFamilyEventWithTypeIsParsed()
{
$this->gedcom = $this->parser->parse(\TEST_DIR . '/stresstestfiles/family/family_event_with_type.ged');

$fam = $this->gedcom->getFam('F1');

$events = $fam['F1']->getAllEven();
$this->assertCount(1, $events);

$eventType = array_keys($events)[0];
$event = $events[$eventType];

$this->assertEquals('MARR', $eventType);
$this->assertEquals('Civil marriage', $event->getType());
$this->assertEquals('2007-02-11', $event->getDate());
}
}
48 changes: 48 additions & 0 deletions tests/library/Gedcom/FamWriterTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

namespace GedcomTest;

use Gedcom\Parser;
use Gedcom\Writer;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;

/**
* Class FamWriterTest.
*/
class FamWriterTest extends TestCase
{
/**
* @var \Gedcom\Parser
*/
protected $parser = null;

/**
* @var \Gedcom\Gedcom
*/
protected $gedcom = null;

public function setUp(): void
{
$this->parser = new Parser();
}

#[DataProvider('families')]
public function testFamilyEventIsConvertedToTheOriginal($gedcomFile)
{
$this->gedcom = $this->parser->parse($gedcomFile);

$originalGedcom = file_get_contents($gedcomFile);
$convertedGedcom = Writer::convert($this->gedcom);

$this->assertEquals($originalGedcom, $convertedGedcom);
}

public static function families()
{
return [
[\TEST_DIR . '/stresstestfiles/family/family_event_no_type.ged'],
[\TEST_DIR . '/stresstestfiles/family/family_event_with_type.ged'],
];
}
}
3 changes: 3 additions & 0 deletions tests/stresstestfiles/family/family_event_no_type.ged
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
0 @F1@ FAM
1 MARR
0 TRLR
4 changes: 4 additions & 0 deletions tests/stresstestfiles/family/family_event_with_type.ged
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
0 @F1@ FAM
1 MARR
2 TYPE Civil marriage
0 TRLR

0 comments on commit 9685b29

Please sign in to comment.