From 188772cb5f89a0932e8f2a4722a604a993656d70 Mon Sep 17 00:00:00 2001 From: mhor Date: Fri, 4 Dec 2015 23:45:19 +0100 Subject: [PATCH] dedup attribute with different case --- src/Builder/MediaInfoContainerBuilder.php | 32 +++++++++++++++++-- src/Parser/MediaInfoOutputParser.php | 2 -- .../Builder/MediaInfoContainerBuilderTest.php | 21 ++++++++++++ test/fixtures/mediainfo-output.xml | 1 + 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/src/Builder/MediaInfoContainerBuilder.php b/src/Builder/MediaInfoContainerBuilder.php index ad8adde..bf693cb 100644 --- a/src/Builder/MediaInfoContainerBuilder.php +++ b/src/Builder/MediaInfoContainerBuilder.php @@ -61,13 +61,11 @@ public function addTrackType($typeName, array $attributes) */ private function addAttributes(AbstractType $trackType, $attributes) { - $this->mediaInfoContainer; - foreach ($attributes as $attribute => $value) { + foreach ($this->sanitizeAttributes($attributes) as $attribute => $value) { if ($attribute[0] === '@') { continue; } - $attribute = $this->formatAttribute($attribute); $trackType->set( $attribute, AttributeFactory::create($attribute, $value) @@ -75,6 +73,34 @@ private function addAttributes(AbstractType $trackType, $attributes) } } + /** + * @param array $attributes + * + * @return array + */ + private function sanitizeAttributes(array $attributes) + { + $sanitizeAttributes = array(); + foreach ($attributes as $key => $value) { + $key = $this->formatAttribute($key); + if (isset($sanitizeAttributes[$key])) { + if (!is_array($sanitizeAttributes[$key])) { + $sanitizeAttributes[$key] = array($sanitizeAttributes[$key]); + } + + if (!is_array($value)) { + $value = array($value); + } + + $value = $sanitizeAttributes[$key] + $value; + } + + $sanitizeAttributes[$key] = $value; + } + + return $sanitizeAttributes; + } + /** * @param string $attribute * diff --git a/src/Parser/MediaInfoOutputParser.php b/src/Parser/MediaInfoOutputParser.php index 8fda244..4bc67ee 100644 --- a/src/Parser/MediaInfoOutputParser.php +++ b/src/Parser/MediaInfoOutputParser.php @@ -25,8 +25,6 @@ public function parse($output) * @param bool $ignoreUnknownTrackTypes Optional parameter used to skip unknown track types by passing true. The * default behavior (false) is throw an exception on unknown track types. * - * @throws Mhor\MediaInfo\Exception\UnknownTrackTypeException - * * @return MediaInfoContainer */ public function getMediaInfoContainer($ignoreUnknownTrackTypes = false) diff --git a/test/Builder/MediaInfoContainerBuilderTest.php b/test/Builder/MediaInfoContainerBuilderTest.php index 4ae2a55..3f35305 100644 --- a/test/Builder/MediaInfoContainerBuilderTest.php +++ b/test/Builder/MediaInfoContainerBuilderTest.php @@ -2,6 +2,7 @@ namespace Mhor\MediaInfo\Test\Builder; +use Mhor\MediaInfo\Attribute\Duration; use Mhor\MediaInfo\Builder\MediaInfoContainerBuilder; use Mhor\MediaInfo\Factory\TypeFactory; use Mhor\MediaInfo\Test\Stub\TrackTestType; @@ -73,4 +74,24 @@ public function testAddInvalidTypeOnMediaInfoContainer() $mediaInfoContainer = $mediaInfoContainerBuilder->build(); $mediaInfoContainer->add(new TrackTestType()); } + + public function testSanitizeAttributes() + { + $mediaInfoContainerBuilder = new MediaInfoContainerBuilder(); + $mediaInfoContainerBuilder->addTrackType(TypeFactory::AUDIO, array( + 'Duration' => '10', + 'DuRatioN' => '20', + 'DURATION' => '4000', + + )); + + $mediaContainer = $mediaInfoContainerBuilder->build(); + $audios = $mediaContainer->getAudios(); + + $this->assertEquals('Mhor\MediaInfo\Attribute\Duration', get_class($audios[0]->get('duration'))); + + /** @var Duration $duration */ + $duration = $audios[0]->get('duration'); + $this->assertEquals('10', $duration->getMilliseconds()); + } } diff --git a/test/fixtures/mediainfo-output.xml b/test/fixtures/mediainfo-output.xml index 3869530..4bec847 100644 --- a/test/fixtures/mediainfo-output.xml +++ b/test/fixtures/mediainfo-output.xml @@ -33,6 +33,7 @@ 7mn 55s 193ms 7mn 55s 00:07:55.193 + test_field CBR Constant 320000