setGallery( $marker, $gallery ); $this->assertEquals( $expected, NodeMedia::getGalleryData( $marker ) ); } public function galleryDataProvider() { $markers = [ "'\"`UNIQabcd-gAlLeRy-1-QINU`\"'", "'\"`UNIQabcd-gAlLeRy-2-QINU`\"'", "'\"`UNIQabcd-gAlLeRy-3-QINU`\"'" ]; $galleries = [ new GalleryMock( [ [ 'image0_name.jpg', 'image0_caption' ], [ 'image01_name.jpg', 'image01_caption' ], ] ), new GalleryMock( [ [ 'image1_name.jpg', 'image1_caption' ] ] ), new GalleryMock() ]; return [ [ 'marker' => $markers[0], 'gallery' => $galleries[0], 'expected' => [ [ 'label' => 'image0_caption', 'title' => 'image0_name.jpg', ], [ 'label' => 'image01_caption', 'title' => 'image01_name.jpg', ], ] ], [ 'marker' => $markers[1], 'gallery' => $galleries[1], 'expected' => [ [ 'label' => 'image1_caption', 'title' => 'image1_name.jpg', ] ] ], [ 'marker' => $markers[2], 'gallery' => $galleries[2], 'expected' => [] ], ]; } /** * @covers PortableInfobox\Parser\Nodes\NodeMedia::getTabberData * @covers PortableInfobox\Helpers\HtmlHelper */ public function testTabberData() { $input = '

'; $expected = [ [ 'label' => '_title_', 'title' => '_src_', ] ]; $this->assertEquals( $expected, NodeMedia::getTabberData( $input ) ); } /** * @covers PortableInfobox\Parser\Nodes\NodeMedia::getMarkers * @dataProvider markersProvider * @param $ext * @param $value * @param $expected */ public function testMarkers( $ext, $value, $expected ) { $this->assertEquals( $expected, PortableInfobox\Parser\Nodes\NodeMedia::getMarkers( $value, $ext ) ); } public function markersProvider() { return [ [ 'TABBER', "
\x7f'\"`UNIQ--tAbBeR-12345678-QINU`\"'\x7f
", [ "\x7f'\"`UNIQ--tAbBeR-12345678-QINU`\"'\x7f" ] ], [ 'GALLERY', "\x7f'\"`UNIQ--tAbBeR-12345678-QINU`\"'\x7f
\x7f'\"`UNIQ--gAlLeRy-12345678-QINU`\"'\x7f
\x7f'\"`UNIQ--gAlLeRy-87654321-QINU`\"'\x7f", [ "\x7f'\"`UNIQ--gAlLeRy-12345678-QINU`\"'\x7f", "\x7f'\"`UNIQ--gAlLeRy-87654321-QINU`\"'\x7f" ] ], [ 'GALLERY', "\x7f'\"`UNIQ--somethingelse-12345678-QINU`\"'\x7f", [] ] ]; } /** * @covers PortableInfobox\Parser\Nodes\NodeMedia::getData * @dataProvider dataProvider * * @param $markup * @param $params * @param $mediaType * @param $expected */ public function testData( $markup, $params, $mediaType, $expected ) { $fileMock = is_null( $mediaType ) ? null : new FileMock( $mediaType ); $node = NodeFactory::newFromXML( $markup, $params ); $helper = $this->getMock( PortableInfoboxImagesHelper::class, [ 'getFile', 'extendImageData' ] ); $helper->expects( $this->any() ) ->method( 'getFile' ) ->willReturn( $fileMock ); $helper->expects( $this->any() ) ->method( 'extendImageData' ) ->willReturn( [] ); $reflection = new ReflectionClass( $node ); $reflectionProperty = $reflection->getProperty( 'helper' ); $reflectionProperty->setAccessible( true ); $reflectionProperty->setValue( $node, $helper ); $this->assertEquals( $expected, $node->getData() ); } public function dataProvider() { // markup, params, expected return [ [ '', [], null, [ [] ] ], [ '', [ 'img' => 'test.jpg' ], MEDIATYPE_BITMAP, [ [ 'url' => 'http://test.url', 'name' => 'Test.jpg', 'alt' => 'Test.jpg', 'caption' => null, 'isImage' => true, 'isVideo' => false, 'isAudio' => false ] ] ], [ 'test alt', [ 'img' => 'test.jpg' ], MEDIATYPE_BITMAP, [ [ 'url' => 'http://test.url', 'name' => 'Test.jpg', 'alt' => 'test alt', 'caption' => null, 'isImage' => true, 'isVideo' => false, 'isAudio' => false ] ] ], [ 'test alt', [ 'img' => 'test.jpg', 'alt source' => 2 ], MEDIATYPE_BITMAP, [ [ 'url' => 'http://test.url', 'name' => 'Test.jpg', 'alt' => 2, 'caption' => null, 'isImage' => true, 'isVideo' => false, 'isAudio' => false ] ] ], [ 'test alt', [ 'img' => 'test.jpg' ], MEDIATYPE_BITMAP, [ [ 'url' => 'http://test.url', 'name' => 'Test.jpg', 'alt' => 'test alt', 'caption' => 'test.jpg', 'isImage' => true, 'isVideo' => false, 'isAudio' => false ] ] ], [ '', [ 'media' => 'test.webm' ], MEDIATYPE_VIDEO, [ [ 'url' => 'http://test.url', 'name' => 'Test.webm', 'alt' => 'Test.webm', 'caption' => null, 'isImage' => false, 'isVideo' => true, 'isAudio' => false ] ] ], [ '', [ 'media' => 'test.webm' ], MEDIATYPE_VIDEO, [ [] ] ], [ '', [ 'media' => 'test.ogg' ], MEDIATYPE_AUDIO, [ [ 'url' => 'http://test.url', 'name' => 'Test.ogg', 'alt' => 'Test.ogg', 'caption' => null, 'isImage' => false, 'isVideo' => false, 'isAudio' => true ] ] ], [ '', [ 'media' => 'test.ogg' ], MEDIATYPE_AUDIO, [ [] ] ] ]; } /** * @covers PortableInfobox\Parser\Nodes\NodeMedia::isEmpty * @dataProvider isEmptyProvider * * @param $markup * @param $params * @param $expected */ public function testIsEmpty( $markup, $params, $expected ) { $node = NodeFactory::newFromXML( $markup, $params ); $this->assertEquals( $expected, $node->isEmpty() ); } public function isEmptyProvider() { return [ [ '', [], true ], ]; } /** * @covers PortableInfobox\Parser\Nodes\NodeMedia::getSources * @dataProvider sourcesProvider * * @param $markup * @param $expected */ public function testSources( $markup, $expected ) { $node = NodeFactory::newFromXML( $markup, [] ); $this->assertEquals( $expected, $node->getSources() ); } public function sourcesProvider() { return [ [ '', [ 'img' ] ], [ '{{{img}}}', [ 'img' ] ], [ '', [ 'img', 'alt', 'cap' ] ], [ '{{{def}}}', [ 'img', 'alt', 'def', 'cap' ] ], [ '', [] ], [ 'Test {{{cap}}} and {{{fcap}}}', [ 'img', 'cap', 'fcap' ] ] ]; } /** @dataProvider metadataProvider */ public function testMetadata( $markup, $expected ) { $node = NodeFactory::newFromXML( $markup, [] ); $this->assertEquals( $expected, $node->getMetadata() ); } public function metadataProvider() { return [ [ 'Test {{{cap}}} and {{{fcap}}}', [ 'type' => 'media', 'sources' => [ 'img' => [ 'label' => '', 'primary' => true ], 'cap' => [ 'label' => '' ], 'fcap' => [ 'label' => '' ] ] ] ] ]; } /** * @covers PortableInfobox\Parser\Nodes\NodeMedia::isTypeAllowed * @covers PortableInfobox\Parser\Nodes\NodeAudio * @covers PortableInfobox\Parser\Nodes\NodeImage * @covers PortableInfobox\Parser\Nodes\NodeVideo * @dataProvider isTypeAllowedProvider * @param $markup * @param $expected * @throws PortableInfobox\Parser\XmlMarkupParseErrorException */ public function testIsTypeAllowed( $markup, $expected ) { $types = [ MEDIATYPE_BITMAP, MEDIATYPE_DRAWING, MEDIATYPE_VIDEO, MEDIATYPE_AUDIO, 'unknown' ]; $node = PortableInfobox\Parser\Nodes\NodeFactory::newFromXML( $markup, [] ); $reflection = new ReflectionClass( $node ); $reflection_method = $reflection->getMethod( 'isTypeAllowed' ); $reflection_method->setAccessible( true ); foreach ( $types as $i => $type ) { $this->assertEquals( $expected[$i], $reflection_method->invoke( $node, $type ) ); } } public function isTypeAllowedProvider() { return [ [ '', [ true, true, true, true, false ] ], [ '', [ false, false, true, true, false ] ], [ '', [ true, true, false, true, false ] ], [ '', [ true, true, true, false, false ] ], [ '', [ false, false, false, false, false ] ], [ '', [ true, true, true, false, false ] ], [ '', [ true, true, false, false, false ] ], [ '