From 655a04a501d8c3d11aaa45db105b219780fcb0be Mon Sep 17 00:00:00 2001 From: Richard Morgan Date: Fri, 4 May 2018 20:30:17 -0400 Subject: [PATCH] start on Tune::merge() --- src/Domain/Core/Tune.php | 24 +++++++++++++- tests/unit/AbcParser/Domain/Core/TuneTest.php | 32 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/Domain/Core/Tune.php b/src/Domain/Core/Tune.php index 5921698..cede3be 100644 --- a/src/Domain/Core/Tune.php +++ b/src/Domain/Core/Tune.php @@ -273,7 +273,22 @@ class Tune implements EntityInterface */ protected function set($attribute, $value) { - call_user_func([$this, 'set'.$attribute], [$value]); + switch ($attribute) { + case 'index': + call_user_func([$this, 'set'.$attribute], $value); + break; + + default: + $this->append($attribute, $value); + } + } + + protected function append($attribute, array $values) + { + $method = 'add' . substr($attribute, 0, -1); + foreach ($values as $value) { + call_user_func([$this, $method], $value); + } } /** @@ -320,4 +335,11 @@ class Tune implements EntityInterface return $this; } + + public function merge(Tune $source) + { + //TODO + $this->titles = array_merge($this->getTitles(), $source->getTitles()); + return $this; + } } diff --git a/tests/unit/AbcParser/Domain/Core/TuneTest.php b/tests/unit/AbcParser/Domain/Core/TuneTest.php index eb88ef6..3925f9c 100644 --- a/tests/unit/AbcParser/Domain/Core/TuneTest.php +++ b/tests/unit/AbcParser/Domain/Core/TuneTest.php @@ -28,6 +28,22 @@ class TuneTest extends \PHPUnit_Framework_TestCase $this->assertInstanceOf(Tune::class, $tune); } + public function testCanIntializeFromArray() + { + $titles = ['Title']; + $authors = ['Richard Morgan']; + + $config = [ + 'Titles' => $titles, + 'Authors' => $authors + ]; + + $tune = new Tune($config); + + $this->assertInstanceOf(Tune::class, $tune); + $this->assertEquals($tune->getTitles(), $titles); + } + public function testNewTuneHasIdentitySet() { $params = []; @@ -168,4 +184,20 @@ class TuneTest extends \PHPUnit_Framework_TestCase $this->assertNotEmpty($result); $this->assertEquals($setting, $result[0]); } + + public function testMergeAddsExtraDataToTune() + { + $targetTune = new Tune([ + 'titles' => ['target'] + ]); + $sourceTune = new Tune([ + 'titles' => ['source'] + ]); + + $result = $targetTune->merge($sourceTune); + + $this->assertEquals(new Tune([ + 'titles' => ['target', 'source'] + ]), $result); + } }