Mercurial > hg > Members > shoshi > webvirt
diff cake/tests/cases/libs/view/helpers/rss.test.php @ 0:261e66bd5a0c
hg init
author | Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 24 Jul 2011 21:08:31 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cake/tests/cases/libs/view/helpers/rss.test.php Sun Jul 24 21:08:31 2011 +0900 @@ -0,0 +1,593 @@ +<?php +/** + * RssHelperTest file + * + * PHP versions 4 and 5 + * + * CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing> + * 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' + ), + '<parameter' + ); + $this->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' + ), + '<title', + 'title', + '/title', + '<link', + RssHelper::url('/', true), + '/link', + '<description', + 'content', + '/channel' + ); + $this->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( + '<channel', + '<title', 'Title of RSS Feed', '/title', + '<link', 'http://example.com', '/link', + '<description', 'Description of RSS Feed', '/description', + '<image', + '<title', 'Title of image', '/title', + '<url', 'http://example.com/example.png', '/url', + '<link', 'http://example.com', '/link', + '/image', + 'cloud' => 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( + '<channel', + '<title', 'Title of RSS Feed', '/title', + '<link', 'http://example.com', '/link', + '<description', 'Description of RSS Feed', '/description', + '<image', + '<title', 'Title of image', '/title', + '<url', 'http://example.com/example.png', '/url', + '<link', 'http://example.com', '/link', + '/image', + 'atom:link' => 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( + '<item', + '<title', 'title1', '/title', + '<guid', 'http://www.example.com/guid1', '/guid', + '<link', 'http://www.example.com/link1', '/link', + '<description', 'description1', '/description', + '/item', + '<item', + '<title', 'title2', '/title', + '<guid', 'http://www.example.com/guid2', '/guid', + '<link', 'http://www.example.com/link2', '/link', + '<description', 'description2', '/description', + '/item', + '<item', + '<title', 'title3', '/title', + '<guid', 'http://www.example.com/guid3', '/guid', + '<link', 'http://www.example.com/link3', '/link', + '<description', 'description3', '/description', + '/item' + ); + $this->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( + '<item', + '<title', + 'My title', + '/title', + '<description', + 'My description', + '/description', + '<link', + 'http://www.google.com/', + '/link', + '<guid', + 'http://www.google.com/', + '/guid', + '/item' + ); + $this->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( + '<item', + '<title', + '<![CDATA[My Title]]', + '/title', + '<link', + 'http://www.example.com/1', + '/link', + '<description', + '<![CDATA[descriptive words]]', + '/description', + '<pubDate', + date('r', strtotime('2008-05-31 12:00:00')), + '/pubDate', + '<guid', + 'http://www.example.com/1', + '/guid', + '/item' + ); + $this->assertTags($result, $expected); + + $item = array( + 'title' => array( + 'value' => 'My Title & more', + 'cdata' => true + ) + ); + $result = $this->Rss->item(null, $item); + $expected = array( + '<item', + '<title', + '<![CDATA[My Title & more]]', + '/title', + '/item' + ); + $this->assertTags($result, $expected); + + $item = array( + 'title' => array( + 'value' => 'My Title & more', + 'convertEntities' => false + ) + ); + $result = $this->Rss->item(null, $item); + $expected = array( + '<item', + '<title', + 'My Title & more', + '/title', + '/item' + ); + $this->assertTags($result, $expected); + + $item = array( + 'title' => array( + 'value' => 'My Title & more', + 'cdata' => true, + 'convertEntities' => false, + ) + ); + $result = $this->Rss->item(null, $item); + $expected = array( + '<item', + '<title', + '<![CDATA[My Title & more]]', + '/title', + '/item' + ); + $this->assertTags($result, $expected); + + $item = array( + 'category' => array( + 'value' => 'CakePHP', + 'cdata' => true, + 'domain' => 'http://www.cakephp.org' + ) + ); + $result = $this->Rss->item(null, $item); + $expected = array( + '<item', + 'category' => array('domain' => 'http://www.cakephp.org'), + '<![CDATA[CakePHP]]', + '/category', + '/item' + ); + $this->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( + '<item', + 'category' => array('domain' => 'http://www.cakephp.org'), + '<![CDATA[CakePHP]]', + '/category', + '<category', + '<![CDATA[Bakery]]', + '/category', + '/item' + ); + $this->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( + '<item', + '<title', + '<![CDATA[My Title]]', + '/title', + '<link', + 'http://www.example.com/1', + '/link', + '<description', + '<![CDATA[descriptive words]]', + '/description', + 'enclosure' => array('url' => RssHelper::url('/test.flv', true)), + '<pubDate', + date('r', strtotime('2008-05-31 12:00:00')), + '/pubDate', + '<guid', + 'http://www.example.com/1', + '/guid', + 'category' => array('domain' => 'http://www.cakephp.org'), + '<![CDATA[CakePHP]]', + '/category', + '<category', + '<![CDATA[Bakery]]', + '/category', + '/item' + ); + $this->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( + '<item', + '<title', + 'Foo bar', + '/title', + '<link', + 'http://example.com/foo?a=1&b=2', + '/link', + '<description', + '<![CDATA[descriptive words]]', + '/description', + '<pubDate', + date('r', strtotime('2008-05-31 12:00:00')), + '/pubDate', + '<guid', + 'http://example.com/foo?a=1&b=2', + '/guid', + '/item' + ); + $this->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); + } +}