Procházet zdrojové kódy

Added final tests for Zend_Feed_Writer RSS image support

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@22102 44c647ce-9c0f-0410-b52a-842ac1e357ba
padraic před 15 roky
rodič
revize
1413e32354

+ 8 - 8
library/Zend/Feed/Writer/Renderer/Feed/Rss.php

@@ -339,11 +339,11 @@ class Zend_Feed_Writer_Renderer_Feed_Rss
                 return;
             }
         }
-        if (empty($data['link']) || !is_string($data['link'])
-        || !Zend_Uri::check($data['link'])) {
+        if (empty($image['link']) || !is_string($image['link'])
+        || !Zend_Uri::check($image['link'])) {
             require_once 'Zend/Feed/Exception.php';
             $message = 'Invalid parameter: parameter \'link\''
-            . 'must be a non-empty string and valid URI/IRI';
+            . ' must be a non-empty string and valid URI/IRI';
             $exception = new Zend_Feed_Exception($message);
             if (!$this->_ignoreExceptions) {
                 throw $exception;
@@ -353,7 +353,7 @@ class Zend_Feed_Writer_Renderer_Feed_Rss
             }
         }
         $img = $dom->createElement('image');
-        $root->appendChild($image);
+        $root->appendChild($img);
         $url = $dom->createElement('url');
         $text = $dom->createTextNode($image['uri']);
         $url->appendChild($text);
@@ -366,8 +366,8 @@ class Zend_Feed_Writer_Renderer_Feed_Rss
         $img->appendChild($url);
         $img->appendChild($title);
         $img->appendChild($link);
-        if (isset($image['height']) && is_numeric($image['height'])) {
-            if ($image['height'] > 400) {
+        if (isset($image['height'])) {
+            if (!ctype_digit((string) $image['height']) || $image['height'] > 400) {
                 require_once 'Zend/Feed/Exception.php';
                 $message = 'Invalid parameter: parameter \'height\''
                 . ' must be an integer not exceeding 400';
@@ -384,8 +384,8 @@ class Zend_Feed_Writer_Renderer_Feed_Rss
             $height->appendChild($text);
             $img->appendChild($height);
         }
-        if (isset($image['width']) && is_numeric($image['width'])) {
-            if ($image['width'] > 144) {
+        if (isset($image['width'])) {
+            if (!ctype_digit((string) $image['width']) || $image['width'] > 144) {
                 require_once 'Zend/Feed/Exception.php';
                 $message = 'Invalid parameter: parameter \'width\''
                 . ' must be an integer not exceeding 144';

+ 208 - 0
tests/Zend/Feed/Writer/Renderer/Feed/RssTest.php

@@ -352,4 +352,212 @@ class Zend_Feed_Writer_Renderer_Feed_RssTest extends PHPUnit_Framework_TestCase
         $this->assertEquals($expected, (array) $feed->getHubs());
     }
 
+    public function testImageCanBeSet()
+    {
+        $this->_validWriter->setImage(array(
+            'uri' => 'http://www.example.com/logo.gif',
+            'link' => 'http://www.example.com',
+            'title' => 'Image ALT',
+            'height' => '400',
+            'width' => '144',
+            'description' => 'Image TITLE'
+        ));
+        $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
+        $rssFeed->render();
+        $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
+        $expected = array(
+            'uri' => 'http://www.example.com/logo.gif',
+            'link' => 'http://www.example.com',
+            'title' => 'Image ALT',
+            'height' => '400',
+            'width' => '144',
+            'description' => 'Image TITLE'  
+        );
+        $this->assertEquals($expected, $feed->getImage()); 
+    }
+
+    public function testImageCanBeSetWithOnlyRequiredElements()
+    {
+        $this->_validWriter->setImage(array(
+            'uri' => 'http://www.example.com/logo.gif',
+            'link' => 'http://www.example.com',
+            'title' => 'Image ALT'
+        ));
+        $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
+        $rssFeed->render();
+        $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
+        $expected = array(
+            'uri' => 'http://www.example.com/logo.gif',
+            'link' => 'http://www.example.com',
+            'title' => 'Image ALT' 
+        );
+        $this->assertEquals($expected, $feed->getImage()); 
+    }
+
+    /**
+     * @expectedException Zend_Feed_Exception
+     */
+    public function testImageThrowsExceptionOnMissingLink()
+    {
+        $this->_validWriter->setImage(array(
+            'uri' => 'http://www.example.com/logo.gif',
+            'title' => 'Image ALT'
+        ));
+        $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
+        $rssFeed->render();
+    }
+
+    /**
+     * @expectedException Zend_Feed_Exception
+     */
+    public function testImageThrowsExceptionOnMissingTitle()
+    {
+        $this->_validWriter->setImage(array(
+            'uri' => 'http://www.example.com/logo.gif',
+            'link' => 'http://www.example.com'
+        ));
+        $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
+        $rssFeed->render();
+    }
+
+    /**
+     * @expectedException Zend_Feed_Exception
+     */
+    public function testImageThrowsExceptionOnMissingUri()
+    {
+        $this->_validWriter->setImage(array(
+            'link' => 'http://www.example.com',
+            'title' => 'Image ALT'
+        ));
+        $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
+        $rssFeed->render();
+    }
+
+    /**
+     * @expectedException Zend_Feed_Exception
+     */
+    public function testImageThrowsExceptionIfOptionalDescriptionInvalid()
+    {
+        $this->_validWriter->setImage(array(
+            'uri' => 'http://www.example.com/logo.gif',
+            'link' => 'http://www.example.com',
+            'title' => 'Image ALT',
+            'description' => 2
+        ));
+        $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
+        $rssFeed->render();
+    }
+
+    /**
+     * @expectedException Zend_Feed_Exception
+     */
+    public function testImageThrowsExceptionIfOptionalDescriptionEmpty()
+    {
+        $this->_validWriter->setImage(array(
+            'uri' => 'http://www.example.com/logo.gif',
+            'link' => 'http://www.example.com',
+            'title' => 'Image ALT',
+            'description' => ''
+        ));
+        $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
+        $rssFeed->render();
+    }
+
+    /**
+     * @expectedException Zend_Feed_Exception
+     */
+    public function testImageThrowsExceptionIfOptionalHeightNotAnInteger()
+    {
+        $this->_validWriter->setImage(array(
+            'uri' => 'http://www.example.com/logo.gif',
+            'link' => 'http://www.example.com',
+            'title' => 'Image ALT',
+            'height' => 'a',
+            'width' => 144
+        ));
+        $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
+        $rssFeed->render();
+    }
+
+    /**
+     * @expectedException Zend_Feed_Exception
+     */
+    public function testImageThrowsExceptionIfOptionalHeightEmpty()
+    {
+        $this->_validWriter->setImage(array(
+            'uri' => 'http://www.example.com/logo.gif',
+            'link' => 'http://www.example.com',
+            'title' => 'Image ALT',
+            'height' => '',
+            'width' => 144
+        ));
+        $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
+        $rssFeed->render();
+    }
+
+    /**
+     * @expectedException Zend_Feed_Exception
+     */
+    public function testImageThrowsExceptionIfOptionalHeightGreaterThan400()
+    {
+        $this->_validWriter->setImage(array(
+            'uri' => 'http://www.example.com/logo.gif',
+            'link' => 'http://www.example.com',
+            'title' => 'Image ALT',
+            'height' => '401',
+            'width' => 144
+        ));
+        $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
+        $rssFeed->render();
+    }
+
+    /**
+     * @expectedException Zend_Feed_Exception
+     */
+    public function testImageThrowsExceptionIfOptionalWidthNotAnInteger()
+    {
+        $this->_validWriter->setImage(array(
+            'uri' => 'http://www.example.com/logo.gif',
+            'link' => 'http://www.example.com',
+            'title' => 'Image ALT',
+            'height' => '400',
+            'width' => 'a'
+        ));
+        $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
+        $rssFeed->render();
+    }
+
+    /**
+     * @expectedException Zend_Feed_Exception
+     */
+    public function testImageThrowsExceptionIfOptionalWidthEmpty()
+    {
+        $this->_validWriter->setImage(array(
+            'uri' => 'http://www.example.com/logo.gif',
+            'link' => 'http://www.example.com',
+            'title' => 'Image ALT',
+            'height' => '400',
+            'width' => ''
+        ));
+        $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
+        $rssFeed->render();
+    }
+
+    /**
+     * @expectedException Zend_Feed_Exception
+     */
+    public function testImageThrowsExceptionIfOptionalWidthGreaterThan144()
+    {
+        $this->_validWriter->setImage(array(
+            'uri' => 'http://www.example.com/logo.gif',
+            'link' => 'http://www.example.com',
+            'title' => 'Image ALT',
+            'height' => '400',
+            'width' => '145'
+        ));
+        $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
+        $rssFeed->render();
+    }
+    
+
 }