* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) * * Licensed under The Open Group Test Suite License * Redistributions of files must retain the above copyright notice. * * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests * @package cake * @subpackage cake.tests.cases.libs.view.helpers * @since CakePHP(tm) v 1.2.0.4206 * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License */ App::import('Helper', array('Rss', 'Time')); /** * RssHelperTest class * * @package cake * @subpackage cake.tests.cases.libs.view.helpers */ class RssHelperTest extends CakeTestCase { /** * setUp method * * @access public * @return void */ function setUp() { $this->Rss =& new RssHelper(); $this->Rss->Time =& new TimeHelper(); $this->Rss->beforeRender(); $manager =& XmlManager::getInstance(); $manager->namespaces = array(); } /** * tearDown method * * @access public * @return void */ function tearDown() { unset($this->Rss); } /** * testAddNamespace method * * @access public * @return void */ function testAddNamespace() { $this->Rss->addNs('custom', 'http://example.com/dtd.xml'); $manager =& XmlManager::getInstance(); $expected = array('custom' => 'http://example.com/dtd.xml'); $this->assertEqual($manager->namespaces, $expected); $this->Rss->removeNs('custom'); $this->Rss->addNs('dummy', 'http://dummy.com/1.0/'); $result = $this->Rss->document(); $expected = array( 'rss' => array( 'xmlns:dummy' => 'http://dummy.com/1.0/', 'version' => '2.0' ) ); $this->assertTags($result, $expected); $this->Rss->removeNs('dummy'); } /** * testRemoveNamespace method * * @access public * @return void */ function testRemoveNamespace() { $this->Rss->addNs('custom', 'http://example.com/dtd.xml'); $this->Rss->addNs('custom2', 'http://example.com/dtd2.xml'); $manager =& XmlManager::getInstance(); $expected = array('custom' => 'http://example.com/dtd.xml', 'custom2' => 'http://example.com/dtd2.xml'); $this->assertEqual($manager->namespaces, $expected); $this->Rss->removeNs('custom'); $expected = array('custom2' => 'http://example.com/dtd2.xml'); $this->assertEqual($manager->namespaces, $expected); } /** * testDocument method * * @access public * @return void */ function testDocument() { $result = $this->Rss->document(); $expected = array( 'rss' => array( 'version' => '2.0' ) ); $this->assertTags($result, $expected); $result = $this->Rss->document(array('contrived' => 'parameter')); $expected = array( 'rss' => array( 'version' => '2.0' ), 'assertTags($result, $expected); $result = $this->Rss->document(null, 'content'); $expected = array( 'rss' => array( 'version' => '2.0' ), 'content' ); $this->assertTags($result, $expected); $result = $this->Rss->document(array('contrived' => 'parameter'), 'content'); $expected = array( 'rss' => array( 'contrived' => 'parameter', 'version' => '2.0' ), 'content' ); $this->assertTags($result, $expected); } /** * testChannel method * * @access public * @return void */ function testChannel() { $attrib = array('a' => '1', 'b' => '2'); $elements = array('title' => 'title'); $content = 'content'; $result = $this->Rss->channel($attrib, $elements, $content); $expected = array( 'channel' => array( 'a' => '1', 'b' => '2' ), 'assertTags($result, $expected); } /** * test correct creation of channel sub elements. * * @access public * @return void */ function testChannelElements() { $attrib = array(); $elements = array( 'title' => 'Title of RSS Feed', 'link' => 'http://example.com', 'description' => 'Description of RSS Feed', 'image' => array( 'title' => 'Title of image', 'url' => 'http://example.com/example.png', 'link' => 'http://example.com' ), 'cloud' => array( 'domain' => "rpc.sys.com", 'port' => "80", 'path' =>"/RPC2", 'registerProcedure' => "myCloud.rssPleaseNotify", 'protocol' => "xml-rpc" ) ); $content = 'content-here'; $result = $this->Rss->channel($attrib, $elements, $content); $expected = array( ' array( 'domain' => "rpc.sys.com", 'port' => "80", 'path' =>"/RPC2", 'registerProcedure' => "myCloud.rssPleaseNotify", 'protocol' => "xml-rpc" ), 'content-here', '/channel', ); $this->assertTags($result, $expected); } function testChannelElementAttributes() { $attrib = array(); $elements = array( 'title' => 'Title of RSS Feed', 'link' => 'http://example.com', 'description' => 'Description of RSS Feed', 'image' => array( 'title' => 'Title of image', 'url' => 'http://example.com/example.png', 'link' => 'http://example.com' ), 'atom:link' => array( 'attrib' => array( 'href' => 'http://www.example.com/rss.xml', 'rel' => 'self', 'type' => 'application/rss+xml') ) ); $content = 'content-here'; $result = $this->Rss->channel($attrib, $elements, $content); $expected = array( ' array( 'href' => "http://www.example.com/rss.xml", 'rel' => "self", 'type' =>"application/rss+xml" ), 'content-here', '/channel', ); $this->assertTags($result, $expected); } /** * testItems method * * @access public * @return void */ function testItems() { $items = array( array('title' => 'title1', 'guid' => 'http://www.example.com/guid1', 'link' => 'http://www.example.com/link1', 'description' => 'description1'), array('title' => 'title2', 'guid' => 'http://www.example.com/guid2', 'link' => 'http://www.example.com/link2', 'description' => 'description2'), array('title' => 'title3', 'guid' => 'http://www.example.com/guid3', 'link' => 'http://www.example.com/link3', 'description' => 'description3') ); $result = $this->Rss->items($items); $expected = array( 'assertTags($result, $expected); $result = $this->Rss->items(array()); $expected = ''; $this->assertEqual($result, $expected); } /** * testItem method * * @access public * @return void */ function testItem() { $item = array( 'title' => 'My title', 'description' => 'My description', 'link' => 'http://www.google.com/' ); $result = $this->Rss->item(null, $item); $expected = array( 'assertTags($result, $expected); $item = array( 'title' => array( 'value' => 'My Title', 'cdata' => true, ), 'link' => 'http://www.example.com/1', 'description' => array( 'value' => 'descriptive words', 'cdata' => true, ), 'pubDate' => '2008-05-31 12:00:00', 'guid' => 'http://www.example.com/1' ); $result = $this->Rss->item(null, $item); $expected = array( 'assertTags($result, $expected); $item = array( 'title' => array( 'value' => 'My Title & more', 'cdata' => true ) ); $result = $this->Rss->item(null, $item); $expected = array( 'assertTags($result, $expected); $item = array( 'title' => array( 'value' => 'My Title & more', 'convertEntities' => false ) ); $result = $this->Rss->item(null, $item); $expected = array( 'assertTags($result, $expected); $item = array( 'title' => array( 'value' => 'My Title & more', 'cdata' => true, 'convertEntities' => false, ) ); $result = $this->Rss->item(null, $item); $expected = array( 'assertTags($result, $expected); $item = array( 'category' => array( 'value' => 'CakePHP', 'cdata' => true, 'domain' => 'http://www.cakephp.org' ) ); $result = $this->Rss->item(null, $item); $expected = array( ' array('domain' => 'http://www.cakephp.org'), 'assertTags($result, $expected); $item = array( 'category' => array( array( 'value' => 'CakePHP', 'cdata' => true, 'domain' => 'http://www.cakephp.org' ), array( 'value' => 'Bakery', 'cdata' => true ) ) ); $result = $this->Rss->item(null, $item); $expected = array( ' array('domain' => 'http://www.cakephp.org'), 'assertTags($result, $expected); $item = array( 'title' => array( 'value' => 'My Title', 'cdata' => true, ), 'link' => 'http://www.example.com/1', 'description' => array( 'value' => 'descriptive words', 'cdata' => true, ), 'enclosure' => array( 'url' => '/test.flv' ), 'pubDate' => '2008-05-31 12:00:00', 'guid' => 'http://www.example.com/1', 'category' => array( array( 'value' => 'CakePHP', 'cdata' => true, 'domain' => 'http://www.cakephp.org' ), array( 'value' => 'Bakery', 'cdata' => true ) ) ); $result = $this->Rss->item(null, $item); $expected = array( ' array('url' => RssHelper::url('/test.flv', true)), ' array('domain' => 'http://www.cakephp.org'), 'assertTags($result, $expected); $item = array( 'title' => 'Foo bar', 'link' => array( 'url' => 'http://example.com/foo?a=1&b=2', 'convertEntities' => false ), 'description' => array( 'value' => 'descriptive words', 'cdata' => true, ), 'pubDate' => '2008-05-31 12:00:00' ); $result = $this->Rss->item(null, $item); $expected = array( 'assertTags($result, $expected); } /** * testTime method * * @access public * @return void */ function testTime() { } /** * testElementAttrNotInParent method * * @access public * @return void */ function testElementAttrNotInParent() { $attributes = array( 'title' => 'Some Title', 'link' => 'http://link.com', 'description' => 'description' ); $elements = array('enclosure' => array('url' => 'http://test.com')); $result = $this->Rss->item($attributes, $elements); $expected = array( 'item' => array( 'title' => 'Some Title', 'link' => 'http://link.com', 'description' => 'description' ), 'enclosure' => array( 'url' => 'http://test.com' ), '/item' ); $this->assertTags($result, $expected); } }