PageRenderTime 46ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/Zend/Feed/Writer/Renderer/Feed/RssTest.php

https://bitbucket.org/dbaltas/zend-framework-1.x-on-git
PHP | 570 lines | 429 code | 52 blank | 89 comment | 0 complexity | 3d14acfbb8e128dfaafcc423ed224318 MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.0, MIT
  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-2012 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 'Zend/Feed/Writer/Renderer/Feed/Rss.php';
  23. require_once 'Zend/Feed/Reader.php';
  24. require_once 'Zend/Version.php';
  25. /**
  26. * @category Zend
  27. * @package Zend_Feed
  28. * @subpackage UnitTests
  29. * @group Zend_Feed
  30. * @group Zend_Feed_Writer
  31. * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  32. * @license http://framework.zend.com/license/new-bsd New BSD License
  33. */
  34. class Zend_Feed_Writer_Renderer_Feed_RssTest extends PHPUnit_Framework_TestCase
  35. {
  36. protected $_validWriter = null;
  37. public function setUp()
  38. {
  39. $this->_validWriter = new Zend_Feed_Writer_Feed;
  40. $this->_validWriter->setTitle('This is a test feed.');
  41. $this->_validWriter->setDescription('This is a test description.');
  42. $this->_validWriter->setLink('http://www.example.com');
  43. $this->_validWriter->setType('rss');
  44. }
  45. public function tearDown()
  46. {
  47. $this->_validWriter = null;
  48. }
  49. public function testSetsWriterInConstructor()
  50. {
  51. $writer = new Zend_Feed_Writer_Feed;
  52. $feed = new Zend_Feed_Writer_Renderer_Feed_Rss($writer);
  53. $this->assertTrue($feed->getDataContainer() instanceof Zend_Feed_Writer_Feed);
  54. }
  55. public function testBuildMethodRunsMinimalWriterContainerProperlyBeforeICheckRssCompliance()
  56. {
  57. $feed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  58. try {
  59. $feed->render();
  60. } catch (Zend_Feed_Exception $e) {
  61. $this->fail('Valid Writer object caused an exception when building which should never happen');
  62. }
  63. }
  64. public function testFeedEncodingHasBeenSet()
  65. {
  66. $this->_validWriter->setEncoding('iso-8859-1');
  67. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  68. $rssFeed->render();
  69. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  70. $this->assertEquals('iso-8859-1', $feed->getEncoding());
  71. }
  72. public function testFeedEncodingDefaultIsUsedIfEncodingNotSetByHand()
  73. {
  74. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  75. $rssFeed->render();
  76. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  77. $this->assertEquals('UTF-8', $feed->getEncoding());
  78. }
  79. public function testFeedTitleHasBeenSet()
  80. {
  81. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  82. $rssFeed->render();
  83. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  84. $this->assertEquals('This is a test feed.', $feed->getTitle());
  85. }
  86. /**
  87. * @expectedException Zend_Feed_Exception
  88. */
  89. public function testFeedTitleIfMissingThrowsException()
  90. {
  91. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  92. $this->_validWriter->remove('title');
  93. $rssFeed->render();
  94. }
  95. /**
  96. * @group ZFWCHARDATA01
  97. */
  98. public function testFeedTitleCharDataEncoding()
  99. {
  100. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  101. $this->_validWriter->setTitle('<>&\'"áéíóú');
  102. $rssFeed->render();
  103. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  104. $this->assertEquals('<>&\'"áéíóú', $feed->getTitle());
  105. }
  106. public function testFeedDescriptionHasBeenSet()
  107. {
  108. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  109. $rssFeed->render();
  110. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  111. $this->assertEquals('This is a test description.', $feed->getDescription());
  112. }
  113. /**
  114. * @expectedException Zend_Feed_Exception
  115. */
  116. public function testFeedDescriptionThrowsExceptionIfMissing()
  117. {
  118. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  119. $this->_validWriter->remove('description');
  120. $rssFeed->render();
  121. }
  122. /**
  123. * @group ZFWCHARDATA01
  124. */
  125. public function testFeedDescriptionCharDataEncoding()
  126. {
  127. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  128. $this->_validWriter->setDescription('<>&\'"áéíóú');
  129. $rssFeed->render();
  130. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  131. $this->assertEquals('<>&\'"áéíóú', $feed->getDescription());
  132. }
  133. public function testFeedUpdatedDateHasBeenSet()
  134. {
  135. $this->_validWriter->setDateModified(1234567890);
  136. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  137. $rssFeed->render();
  138. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  139. $this->assertEquals(1234567890, $feed->getDateModified()->get(Zend_Date::TIMESTAMP));
  140. }
  141. public function testFeedUpdatedDateIfMissingThrowsNoException()
  142. {
  143. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  144. $this->_validWriter->remove('dateModified');
  145. $rssFeed->render();
  146. }
  147. public function testFeedLastBuildDateHasBeenSet()
  148. {
  149. $this->_validWriter->setLastBuildDate(1234567890);
  150. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  151. $rssFeed->render();
  152. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  153. $this->assertEquals(1234567890, $feed->getLastBuildDate()->get(Zend_Date::TIMESTAMP));
  154. }
  155. public function testFeedGeneratorHasBeenSet()
  156. {
  157. $this->_validWriter->setGenerator('FooFeedBuilder', '1.00', 'http://www.example.com');
  158. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  159. $rssFeed->render();
  160. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  161. $this->assertEquals('FooFeedBuilder 1.00 (http://www.example.com)', $feed->getGenerator());
  162. }
  163. public function testFeedGeneratorIfMissingThrowsNoException()
  164. {
  165. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  166. $this->_validWriter->remove('generator');
  167. $rssFeed->render();
  168. }
  169. public function testFeedGeneratorDefaultIsUsedIfGeneratorNotSetByHand()
  170. {
  171. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  172. $rssFeed->render();
  173. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  174. $this->assertEquals('Zend_Feed_Writer ' . Zend_Version::VERSION . ' (http://framework.zend.com)', $feed->getGenerator());
  175. }
  176. public function testFeedLanguageHasBeenSet()
  177. {
  178. $this->_validWriter->setLanguage('fr');
  179. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  180. $rssFeed->render();
  181. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  182. $this->assertEquals('fr', $feed->getLanguage());
  183. }
  184. public function testFeedLanguageIfMissingThrowsNoException()
  185. {
  186. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  187. $this->_validWriter->remove('language');
  188. $rssFeed->render();
  189. }
  190. public function testFeedLanguageDefaultIsUsedIfGeneratorNotSetByHand()
  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(null, $feed->getLanguage());
  196. }
  197. public function testFeedIncludesLinkToHtmlVersionOfFeed()
  198. {
  199. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  200. $rssFeed->render();
  201. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  202. $this->assertEquals('http://www.example.com', $feed->getLink());
  203. }
  204. /**
  205. * @expectedException Zend_Feed_Exception
  206. */
  207. public function testFeedLinkToHtmlVersionOfFeedIfMissingThrowsException()
  208. {
  209. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  210. $this->_validWriter->remove('link');
  211. $rssFeed->render();
  212. }
  213. public function testFeedIncludesLinkToXmlRssWhereTheFeedWillBeAvailable()
  214. {
  215. $this->_validWriter->setFeedLink('http://www.example.com/rss', 'rss');
  216. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  217. $rssFeed->render();
  218. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  219. $this->assertEquals('http://www.example.com/rss', $feed->getFeedLink());
  220. }
  221. public function testFeedLinkToXmlRssWhereTheFeedWillBeAvailableIfMissingThrowsNoException()
  222. {
  223. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  224. $this->_validWriter->remove('feedLinks');
  225. $rssFeed->render();
  226. }
  227. public function testBaseUrlCanBeSet()
  228. {
  229. $this->_validWriter->setBaseUrl('http://www.example.com/base');
  230. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  231. $rssFeed->render();
  232. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  233. $this->assertEquals('http://www.example.com/base', $feed->getBaseUrl());
  234. }
  235. /**
  236. * @group ZFW003
  237. */
  238. public function testFeedHoldsAnyAuthorAdded()
  239. {
  240. $this->_validWriter->addAuthor('Joe', 'joe@example.com', 'http://www.example.com/joe');
  241. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  242. $atomFeed->render();
  243. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  244. $author = $feed->getAuthor();
  245. $this->assertEquals(array('name'=>'Joe'), $feed->getAuthor());
  246. }
  247. /**
  248. * @group ZFWCHARDATA01
  249. */
  250. public function testFeedAuthorCharDataEncoding()
  251. {
  252. $this->_validWriter->addAuthor('<>&\'"áéíóú', 'joe@example.com', 'http://www.example.com/joe');
  253. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  254. $atomFeed->render();
  255. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  256. $author = $feed->getAuthor();
  257. $this->assertEquals(array('name'=>'<>&\'"áéíóú'), $feed->getAuthor());
  258. }
  259. public function testCopyrightCanBeSet()
  260. {
  261. $this->_validWriter->setCopyright('Copyright © 2009 Paddy');
  262. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  263. $rssFeed->render();
  264. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  265. $this->assertEquals('Copyright © 2009 Paddy', $feed->getCopyright());
  266. }
  267. /**
  268. * @group ZFWCHARDATA01
  269. */
  270. public function testCopyrightCharDataEncoding()
  271. {
  272. $this->_validWriter->setCopyright('<>&\'"áéíóú');
  273. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  274. $rssFeed->render();
  275. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  276. $this->assertEquals('<>&\'"áéíóú', $feed->getCopyright());
  277. }
  278. public function testCategoriesCanBeSet()
  279. {
  280. $this->_validWriter->addCategories(array(
  281. array('term'=>'cat_dog', 'label' => 'Cats & Dogs', 'scheme' => 'http://example.com/schema1'),
  282. array('term'=>'cat_dog2')
  283. ));
  284. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  285. $rssFeed->render();
  286. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  287. $expected = array(
  288. array('term'=>'cat_dog', 'label' => 'cat_dog', 'scheme' => 'http://example.com/schema1'),
  289. array('term'=>'cat_dog2', 'label' => 'cat_dog2', 'scheme' => null)
  290. );
  291. $this->assertEquals($expected, (array) $feed->getCategories());
  292. }
  293. /**
  294. * @group ZFWCHARDATA01
  295. */
  296. public function testCategoriesCharDataEncoding()
  297. {
  298. $this->_validWriter->addCategories(array(
  299. array('term'=>'<>&\'"áéíóú', 'label' => 'Cats & Dogs', 'scheme' => 'http://example.com/schema1'),
  300. array('term'=>'cat_dog2')
  301. ));
  302. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  303. $rssFeed->render();
  304. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  305. $expected = array(
  306. array('term'=>'<>&\'"áéíóú', 'label' => '<>&\'"áéíóú', 'scheme' => 'http://example.com/schema1'),
  307. array('term'=>'cat_dog2', 'label' => 'cat_dog2', 'scheme' => null)
  308. );
  309. $this->assertEquals($expected, (array) $feed->getCategories());
  310. }
  311. public function testHubsCanBeSet()
  312. {
  313. $this->_validWriter->addHubs(
  314. array('http://www.example.com/hub', 'http://www.example.com/hub2')
  315. );
  316. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  317. $rssFeed->render();
  318. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  319. $expected = array(
  320. 'http://www.example.com/hub', 'http://www.example.com/hub2'
  321. );
  322. $this->assertEquals($expected, (array) $feed->getHubs());
  323. }
  324. public function testImageCanBeSet()
  325. {
  326. $this->_validWriter->setImage(array(
  327. 'uri' => 'http://www.example.com/logo.gif',
  328. 'link' => 'http://www.example.com',
  329. 'title' => 'Image ALT',
  330. 'height' => '400',
  331. 'width' => '144',
  332. 'description' => 'Image TITLE'
  333. ));
  334. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  335. $rssFeed->render();
  336. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  337. $expected = array(
  338. 'uri' => 'http://www.example.com/logo.gif',
  339. 'link' => 'http://www.example.com',
  340. 'title' => 'Image ALT',
  341. 'height' => '400',
  342. 'width' => '144',
  343. 'description' => 'Image TITLE'
  344. );
  345. $this->assertEquals($expected, $feed->getImage());
  346. }
  347. public function testImageCanBeSetWithOnlyRequiredElements()
  348. {
  349. $this->_validWriter->setImage(array(
  350. 'uri' => 'http://www.example.com/logo.gif',
  351. 'link' => 'http://www.example.com',
  352. 'title' => 'Image ALT'
  353. ));
  354. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  355. $rssFeed->render();
  356. $feed = Zend_Feed_Reader::importString($rssFeed->saveXml());
  357. $expected = array(
  358. 'uri' => 'http://www.example.com/logo.gif',
  359. 'link' => 'http://www.example.com',
  360. 'title' => 'Image ALT'
  361. );
  362. $this->assertEquals($expected, $feed->getImage());
  363. }
  364. /**
  365. * @expectedException Zend_Feed_Exception
  366. */
  367. public function testImageThrowsExceptionOnMissingLink()
  368. {
  369. $this->_validWriter->setImage(array(
  370. 'uri' => 'http://www.example.com/logo.gif',
  371. 'title' => 'Image ALT'
  372. ));
  373. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  374. $rssFeed->render();
  375. }
  376. /**
  377. * @expectedException Zend_Feed_Exception
  378. */
  379. public function testImageThrowsExceptionOnMissingTitle()
  380. {
  381. $this->_validWriter->setImage(array(
  382. 'uri' => 'http://www.example.com/logo.gif',
  383. 'link' => 'http://www.example.com'
  384. ));
  385. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  386. $rssFeed->render();
  387. }
  388. /**
  389. * @expectedException Zend_Feed_Exception
  390. */
  391. public function testImageThrowsExceptionOnMissingUri()
  392. {
  393. $this->_validWriter->setImage(array(
  394. 'link' => 'http://www.example.com',
  395. 'title' => 'Image ALT'
  396. ));
  397. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  398. $rssFeed->render();
  399. }
  400. /**
  401. * @expectedException Zend_Feed_Exception
  402. */
  403. public function testImageThrowsExceptionIfOptionalDescriptionInvalid()
  404. {
  405. $this->_validWriter->setImage(array(
  406. 'uri' => 'http://www.example.com/logo.gif',
  407. 'link' => 'http://www.example.com',
  408. 'title' => 'Image ALT',
  409. 'description' => 2
  410. ));
  411. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  412. $rssFeed->render();
  413. }
  414. /**
  415. * @expectedException Zend_Feed_Exception
  416. */
  417. public function testImageThrowsExceptionIfOptionalDescriptionEmpty()
  418. {
  419. $this->_validWriter->setImage(array(
  420. 'uri' => 'http://www.example.com/logo.gif',
  421. 'link' => 'http://www.example.com',
  422. 'title' => 'Image ALT',
  423. 'description' => ''
  424. ));
  425. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  426. $rssFeed->render();
  427. }
  428. /**
  429. * @expectedException Zend_Feed_Exception
  430. */
  431. public function testImageThrowsExceptionIfOptionalHeightNotAnInteger()
  432. {
  433. $this->_validWriter->setImage(array(
  434. 'uri' => 'http://www.example.com/logo.gif',
  435. 'link' => 'http://www.example.com',
  436. 'title' => 'Image ALT',
  437. 'height' => 'a',
  438. 'width' => 144
  439. ));
  440. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  441. $rssFeed->render();
  442. }
  443. /**
  444. * @expectedException Zend_Feed_Exception
  445. */
  446. public function testImageThrowsExceptionIfOptionalHeightEmpty()
  447. {
  448. $this->_validWriter->setImage(array(
  449. 'uri' => 'http://www.example.com/logo.gif',
  450. 'link' => 'http://www.example.com',
  451. 'title' => 'Image ALT',
  452. 'height' => '',
  453. 'width' => 144
  454. ));
  455. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  456. $rssFeed->render();
  457. }
  458. /**
  459. * @expectedException Zend_Feed_Exception
  460. */
  461. public function testImageThrowsExceptionIfOptionalHeightGreaterThan400()
  462. {
  463. $this->_validWriter->setImage(array(
  464. 'uri' => 'http://www.example.com/logo.gif',
  465. 'link' => 'http://www.example.com',
  466. 'title' => 'Image ALT',
  467. 'height' => '401',
  468. 'width' => 144
  469. ));
  470. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  471. $rssFeed->render();
  472. }
  473. /**
  474. * @expectedException Zend_Feed_Exception
  475. */
  476. public function testImageThrowsExceptionIfOptionalWidthNotAnInteger()
  477. {
  478. $this->_validWriter->setImage(array(
  479. 'uri' => 'http://www.example.com/logo.gif',
  480. 'link' => 'http://www.example.com',
  481. 'title' => 'Image ALT',
  482. 'height' => '400',
  483. 'width' => 'a'
  484. ));
  485. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  486. $rssFeed->render();
  487. }
  488. /**
  489. * @expectedException Zend_Feed_Exception
  490. */
  491. public function testImageThrowsExceptionIfOptionalWidthEmpty()
  492. {
  493. $this->_validWriter->setImage(array(
  494. 'uri' => 'http://www.example.com/logo.gif',
  495. 'link' => 'http://www.example.com',
  496. 'title' => 'Image ALT',
  497. 'height' => '400',
  498. 'width' => ''
  499. ));
  500. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  501. $rssFeed->render();
  502. }
  503. /**
  504. * @expectedException Zend_Feed_Exception
  505. */
  506. public function testImageThrowsExceptionIfOptionalWidthGreaterThan144()
  507. {
  508. $this->_validWriter->setImage(array(
  509. 'uri' => 'http://www.example.com/logo.gif',
  510. 'link' => 'http://www.example.com',
  511. 'title' => 'Image ALT',
  512. 'height' => '400',
  513. 'width' => '145'
  514. ));
  515. $rssFeed = new Zend_Feed_Writer_Renderer_Feed_Rss($this->_validWriter);
  516. $rssFeed->render();
  517. }
  518. }