2
0

RssTest.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_Feed
  17. * @subpackage UnitTests
  18. * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  19. * @license http://framework.zend.com/license/new-bsd New BSD License
  20. * @version $Id$
  21. */
  22. require_once dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))) . DIRECTORY_SEPARATOR . 'TestHelper.php';
  23. require_once 'Zend/Feed/Writer/Renderer/Feed/Rss.php';
  24. require_once 'Zend/Feed/Reader.php';
  25. require_once 'Zend/Version.php';
  26. /**
  27. * @category Zend
  28. * @package Zend_Feed
  29. * @subpackage UnitTests
  30. * @group Zend_Feed
  31. * @group Zend_Feed_Writer
  32. * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  33. * @license http://framework.zend.com/license/new-bsd New BSD License
  34. */
  35. class Zend_Feed_Writer_Renderer_Feed_RssTest extends PHPUnit_Framework_TestCase
  36. {
  37. protected $_validWriter = null;
  38. public function setUp()
  39. {
  40. $this->_validWriter = new Zend_Feed_Writer_Feed;
  41. $this->_validWriter->setTitle('This is a test feed.');
  42. $this->_validWriter->setDescription('This is a test description.');
  43. $this->_validWriter->setLink('http://www.example.com');
  44. $this->_validWriter->setType('rss');
  45. }
  46. public function tearDown()
  47. {
  48. $this->_validWriter = null;
  49. }
  50. public function testSetsWriterInConstructor()
  51. {
  52. $writer = new Zend_Feed_Writer_Feed;
  53. $feed = new Zend_Feed_Writer_Renderer_Feed_Rss($writer);
  54. $this->assertTrue($feed->getDataContainer() instanceof Zend_Feed_Writer_Feed);
  55. }
  56. public function testBuildMethodRunsMinimalWriterContainerProperlyBeforeICheckRssCompliance()
  57. {
  58. $feed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  59. try {
  60. $feed->render();
  61. } catch (Zend_Feed_Exception $e) {
  62. $this->fail('Valid Writer object caused an exception when building which should never happen');
  63. }
  64. }
  65. public function testFeedEncodingHasBeenSet()
  66. {
  67. $this->_validWriter->setEncoding('iso-8859-1');
  68. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  69. $rssFeed->render();
  70. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  71. $this->assertEquals('iso-8859-1', $feed->getEncoding());
  72. }
  73. public function testFeedEncodingDefaultIsUsedIfEncodingNotSetByHand()
  74. {
  75. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  76. $rssFeed->render();
  77. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  78. $this->assertEquals('UTF-8', $feed->getEncoding());
  79. }
  80. public function testFeedTitleHasBeenSet()
  81. {
  82. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  83. $rssFeed->render();
  84. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  85. $this->assertEquals('This is a test feed.', $feed->getTitle());
  86. }
  87. /**
  88. * @expectedException Zend_Feed_Exception
  89. */
  90. public function testFeedTitleIfMissingThrowsException()
  91. {
  92. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  93. $this->_validWriter->remove('title');
  94. $rssFeed->render();
  95. }
  96. /**
  97. * @group ZFWCHARDATA01
  98. */
  99. public function testFeedTitleCharDataEncoding()
  100. {
  101. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  102. $this->_validWriter->setTitle('<>&\'"áéíóú');
  103. $rssFeed->render();
  104. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  105. $this->assertEquals('<>&\'"áéíóú', $feed->getTitle());
  106. }
  107. public function testFeedDescriptionHasBeenSet()
  108. {
  109. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  110. $rssFeed->render();
  111. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  112. $this->assertEquals('This is a test description.', $feed->getDescription());
  113. }
  114. /**
  115. * @expectedException Zend_Feed_Exception
  116. */
  117. public function testFeedDescriptionThrowsExceptionIfMissing()
  118. {
  119. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  120. $this->_validWriter->remove('description');
  121. $rssFeed->render();
  122. }
  123. /**
  124. * @group ZFWCHARDATA01
  125. */
  126. public function testFeedDescriptionCharDataEncoding()
  127. {
  128. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  129. $this->_validWriter->setDescription('<>&\'"áéíóú');
  130. $rssFeed->render();
  131. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  132. $this->assertEquals('<>&\'"áéíóú', $feed->getDescription());
  133. }
  134. public function testFeedUpdatedDateHasBeenSet()
  135. {
  136. $this->_validWriter->setDateModified(1234567890);
  137. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  138. $rssFeed->render();
  139. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  140. $this->assertEquals(1234567890, $feed->getDateModified()->get(Zend_Date::TIMESTAMP));
  141. }
  142. public function testFeedUpdatedDateIfMissingThrowsNoException()
  143. {
  144. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  145. $this->_validWriter->remove('dateModified');
  146. $rssFeed->render();
  147. }
  148. public function testFeedGeneratorHasBeenSet()
  149. {
  150. $this->_validWriter->setGenerator('FooFeedBuilder', '1.00', 'http://www.example.com');
  151. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  152. $rssFeed->render();
  153. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  154. $this->assertEquals('FooFeedBuilder 1.00 (http://www.example.com)', $feed->getGenerator());
  155. }
  156. public function testFeedGeneratorIfMissingThrowsNoException()
  157. {
  158. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  159. $this->_validWriter->remove('generator');
  160. $rssFeed->render();
  161. }
  162. public function testFeedGeneratorDefaultIsUsedIfGeneratorNotSetByHand()
  163. {
  164. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  165. $rssFeed->render();
  166. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  167. $this->assertEquals('Zend_Feed_Writer ' . Zend_Version::VERSION . ' (http://framework.zend.com)', $feed->getGenerator());
  168. }
  169. public function testFeedLanguageHasBeenSet()
  170. {
  171. $this->_validWriter->setLanguage('fr');
  172. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  173. $rssFeed->render();
  174. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  175. $this->assertEquals('fr', $feed->getLanguage());
  176. }
  177. public function testFeedLanguageIfMissingThrowsNoException()
  178. {
  179. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  180. $this->_validWriter->remove('language');
  181. $rssFeed->render();
  182. }
  183. public function testFeedLanguageDefaultIsUsedIfGeneratorNotSetByHand()
  184. {
  185. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  186. $rssFeed->render();
  187. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  188. $this->assertEquals(null, $feed->getLanguage());
  189. }
  190. public function testFeedIncludesLinkToHtmlVersionOfFeed()
  191. {
  192. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  193. $rssFeed->render();
  194. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  195. $this->assertEquals('http://www.example.com', $feed->getLink());
  196. }
  197. /**
  198. * @expectedException Zend_Feed_Exception
  199. */
  200. public function testFeedLinkToHtmlVersionOfFeedIfMissingThrowsException()
  201. {
  202. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  203. $this->_validWriter->remove('link');
  204. $rssFeed->render();
  205. }
  206. public function testFeedIncludesLinkToXmlRssWhereTheFeedWillBeAvailable()
  207. {
  208. $this->_validWriter->setFeedLink('http://www.example.com/rss', 'rss');
  209. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  210. $rssFeed->render();
  211. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  212. $this->assertEquals('http://www.example.com/rss', $feed->getFeedLink());
  213. }
  214. public function testFeedLinkToXmlRssWhereTheFeedWillBeAvailableIfMissingThrowsNoException()
  215. {
  216. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  217. $this->_validWriter->remove('feedLinks');
  218. $rssFeed->render();
  219. }
  220. public function testBaseUrlCanBeSet()
  221. {
  222. $this->_validWriter->setBaseUrl('http://www.example.com/base');
  223. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  224. $rssFeed->render();
  225. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  226. $this->assertEquals('http://www.example.com/base', $feed->getBaseUrl());
  227. }
  228. /**
  229. * @group ZFW003
  230. */
  231. public function testFeedHoldsAnyAuthorAdded()
  232. {
  233. $this->_validWriter->addAuthor('Joe', 'joe@example.com', 'http://www.example.com/joe');
  234. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  235. $atomFeed->render();
  236. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  237. $author = $feed->getAuthor();
  238. $this->assertEquals(array('name'=>'Joe'), $feed->getAuthor());
  239. }
  240. /**
  241. * @group ZFWCHARDATA01
  242. */
  243. public function testFeedAuthorCharDataEncoding()
  244. {
  245. $this->_validWriter->addAuthor('<>&\'"áéíóú', 'joe@example.com', 'http://www.example.com/joe');
  246. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  247. $atomFeed->render();
  248. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  249. $author = $feed->getAuthor();
  250. $this->assertEquals(array('name'=>'<>&\'"áéíóú'), $feed->getAuthor());
  251. }
  252. public function testCopyrightCanBeSet()
  253. {
  254. $this->_validWriter->setCopyright('Copyright © 2009 Paddy');
  255. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  256. $rssFeed->render();
  257. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  258. $this->assertEquals('Copyright © 2009 Paddy', $feed->getCopyright());
  259. }
  260. /**
  261. * @group ZFWCHARDATA01
  262. */
  263. public function testCopyrightCharDataEncoding()
  264. {
  265. $this->_validWriter->setCopyright('<>&\'"áéíóú');
  266. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  267. $rssFeed->render();
  268. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  269. $this->assertEquals('<>&\'"áéíóú', $feed->getCopyright());
  270. }
  271. public function testCategoriesCanBeSet()
  272. {
  273. $this->_validWriter->addCategories(array(
  274. array('term'=>'cat_dog', 'label' => 'Cats & Dogs', 'scheme' => 'http://example.com/schema1'),
  275. array('term'=>'cat_dog2')
  276. ));
  277. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  278. $rssFeed->render();
  279. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  280. $expected = array(
  281. array('term'=>'cat_dog', 'label' => 'cat_dog', 'scheme' => 'http://example.com/schema1'),
  282. array('term'=>'cat_dog2', 'label' => 'cat_dog2', 'scheme' => null)
  283. );
  284. $this->assertEquals($expected, (array) $feed->getCategories());
  285. }
  286. /**
  287. * @group ZFWCHARDATA01
  288. */
  289. public function testCategoriesCharDataEncoding()
  290. {
  291. $this->_validWriter->addCategories(array(
  292. array('term'=>'<>&\'"áéíóú', 'label' => 'Cats & Dogs', 'scheme' => 'http://example.com/schema1'),
  293. array('term'=>'cat_dog2')
  294. ));
  295. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  296. $rssFeed->render();
  297. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  298. $expected = array(
  299. array('term'=>'<>&\'"áéíóú', 'label' => '<>&\'"áéíóú', 'scheme' => 'http://example.com/schema1'),
  300. array('term'=>'cat_dog2', 'label' => 'cat_dog2', 'scheme' => null)
  301. );
  302. $this->assertEquals($expected, (array) $feed->getCategories());
  303. }
  304. public function testHubsCanBeSet()
  305. {
  306. $this->_validWriter->addHubs(
  307. array('http://www.example.com/hub', 'http://www.example.com/hub2')
  308. );
  309. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  310. $rssFeed->render();
  311. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  312. $expected = array(
  313. 'http://www.example.com/hub', 'http://www.example.com/hub2'
  314. );
  315. $this->assertEquals($expected, (array) $feed->getHubs());
  316. }
  317. }