AtomTest.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  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/Atom.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_AtomTest 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->setDateModified(1234567890);
  44. $this->_validWriter->setLink('http://www.example.com');
  45. $this->_validWriter->setFeedLink('http://www.example.com/atom', 'atom');
  46. $this->_validWriter->addAuthor('Joe', 'joe@example.com', 'http://www.example.com/joe');
  47. $this->_validWriter->setType('atom');
  48. }
  49. public function tearDown()
  50. {
  51. $this->_validWriter = null;
  52. }
  53. public function testSetsWriterInConstructor()
  54. {
  55. $writer = new Zend_Feed_Writer_Feed;
  56. $feed = new Zend_Feed_Writer_Renderer_Feed_Atom($writer);
  57. $this->assertTrue($feed->getDataContainer() instanceof Zend_Feed_Writer_Feed);
  58. }
  59. public function testBuildMethodRunsMinimalWriterContainerProperlyBeforeICheckAtomCompliance()
  60. {
  61. $feed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  62. try {
  63. $feed->render();
  64. } catch (Zend_Feed_Exception $e) {
  65. $this->fail('Valid Writer object caused an exception when building which should never happen');
  66. }
  67. }
  68. public function testFeedEncodingHasBeenSet()
  69. {
  70. $this->_validWriter->setEncoding('iso-8859-1');
  71. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  72. $atomFeed->render();
  73. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  74. $this->assertEquals('iso-8859-1', $feed->getEncoding());
  75. }
  76. public function testFeedEncodingDefaultIsUsedIfEncodingNotSetByHand()
  77. {
  78. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  79. $atomFeed->render();
  80. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  81. $this->assertEquals('UTF-8', $feed->getEncoding());
  82. }
  83. public function testFeedTitleHasBeenSet()
  84. {
  85. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  86. $atomFeed->render();
  87. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  88. $this->assertEquals('This is a test feed.', $feed->getTitle());
  89. }
  90. /**
  91. * @expectedException Zend_Feed_Exception
  92. */
  93. public function testFeedTitleIfMissingThrowsException()
  94. {
  95. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  96. $this->_validWriter->remove('title');
  97. $atomFeed->render();
  98. }
  99. /**
  100. * @group ZFWCHARDATA01
  101. */
  102. public function testFeedTitleCharDataEncoding()
  103. {
  104. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  105. $this->_validWriter->setTitle('<>&\'"áéíóú');
  106. $atomFeed->render();
  107. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  108. $this->assertEquals('<>&\'"áéíóú', $feed->getTitle());
  109. }
  110. public function testFeedSubtitleHasBeenSet()
  111. {
  112. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  113. $atomFeed->render();
  114. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  115. $this->assertEquals('This is a test description.', $feed->getDescription());
  116. }
  117. public function testFeedSubtitleThrowsNoExceptionIfMissing()
  118. {
  119. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  120. $this->_validWriter->remove('description');
  121. $atomFeed->render();
  122. }
  123. /**
  124. * @group ZFWCHARDATA01
  125. */
  126. public function testFeedSubtitleCharDataEncoding()
  127. {
  128. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  129. $this->_validWriter->setDescription('<>&\'"áéíóú');
  130. $atomFeed->render();
  131. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  132. $this->assertEquals('<>&\'"áéíóú', $feed->getDescription());
  133. }
  134. public function testFeedUpdatedDateHasBeenSet()
  135. {
  136. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  137. $atomFeed->render();
  138. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  139. $this->assertEquals(1234567890, $feed->getDateModified()->get(Zend_Date::TIMESTAMP));
  140. }
  141. /**
  142. * @expectedException Zend_Feed_Exception
  143. */
  144. public function testFeedUpdatedDateIfMissingThrowsException()
  145. {
  146. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  147. $this->_validWriter->remove('dateModified');
  148. $atomFeed->render();
  149. }
  150. public function testFeedGeneratorHasBeenSet()
  151. {
  152. $this->_validWriter->setGenerator('FooFeedBuilder', '1.00', 'http://www.example.com');
  153. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  154. $atomFeed->render();
  155. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  156. $this->assertEquals('FooFeedBuilder', $feed->getGenerator());
  157. }
  158. public function testFeedGeneratorIfMissingThrowsNoException()
  159. {
  160. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  161. $this->_validWriter->remove('generator');
  162. $atomFeed->render();
  163. }
  164. public function testFeedGeneratorDefaultIsUsedIfGeneratorNotSetByHand()
  165. {
  166. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  167. $atomFeed->render();
  168. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  169. $this->assertEquals('Zend_Feed_Writer', $feed->getGenerator());
  170. }
  171. /**
  172. * @group ZFWCHARDATA01
  173. */
  174. public function testFeedGeneratorCharDataEncoding()
  175. {
  176. $this->_validWriter->setGenerator('<>&\'"áéíóú', '1.00', 'http://www.example.com');
  177. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  178. $atomFeed->render();
  179. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  180. $this->assertEquals('<>&\'"áéíóú', $feed->getGenerator());
  181. }
  182. public function testFeedLanguageHasBeenSet()
  183. {
  184. $this->_validWriter->setLanguage('fr');
  185. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  186. $atomFeed->render();
  187. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  188. $this->assertEquals('fr', $feed->getLanguage());
  189. }
  190. public function testFeedLanguageIfMissingThrowsNoException()
  191. {
  192. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  193. $this->_validWriter->remove('language');
  194. $atomFeed->render();
  195. }
  196. public function testFeedLanguageDefaultIsUsedIfGeneratorNotSetByHand()
  197. {
  198. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  199. $atomFeed->render();
  200. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  201. $this->assertEquals(null, $feed->getLanguage());
  202. }
  203. public function testFeedIncludesLinkToHtmlVersionOfFeed()
  204. {
  205. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  206. $atomFeed->render();
  207. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  208. $this->assertEquals('http://www.example.com', $feed->getLink());
  209. }
  210. public function testFeedLinkToHtmlVersionOfFeedIfMissingThrowsNoExceptionIfIdSet()
  211. {
  212. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  213. $this->_validWriter->setId('http://www.example.com');
  214. $this->_validWriter->remove('link');
  215. $atomFeed->render();
  216. }
  217. /**
  218. * @expectedException Zend_Feed_Exception
  219. */
  220. public function testFeedLinkToHtmlVersionOfFeedIfMissingThrowsExceptionIfIdMissing()
  221. {
  222. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  223. $this->_validWriter->remove('link');
  224. $atomFeed->render();
  225. }
  226. public function testFeedIncludesLinkToXmlAtomWhereTheFeedWillBeAvailable()
  227. {
  228. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  229. $atomFeed->render();
  230. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  231. $this->assertEquals('http://www.example.com/atom', $feed->getFeedLink());
  232. }
  233. /**
  234. * @expectedException Zend_Feed_Exception
  235. */
  236. public function testFeedLinkToXmlAtomWhereTheFeedWillBeAvailableIfMissingThrowsException()
  237. {
  238. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  239. $this->_validWriter->remove('feedLinks');
  240. $atomFeed->render();
  241. }
  242. public function testFeedHoldsAnyAuthorAdded()
  243. {
  244. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  245. $atomFeed->render();
  246. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  247. $author = $feed->getAuthor();
  248. $this->assertEquals(array(
  249. 'email'=>'joe@example.com',
  250. 'name'=>'Joe',
  251. 'uri'=>'http://www.example.com/joe'), $feed->getAuthor());
  252. }
  253. /**
  254. * @group ZFWCHARDATA01
  255. */
  256. public function testFeedAuthorCharDataEncoding()
  257. {
  258. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  259. $this->_validWriter->remove('authors');
  260. $this->_validWriter->addAuthor(array(
  261. 'email'=>'<>&\'"áéíóú',
  262. 'name'=>'<>&\'"áéíóú',
  263. 'uri'=>'http://www.example.com/joe'));
  264. $atomFeed->render();
  265. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  266. $author = $feed->getAuthor();
  267. $this->assertEquals(array(
  268. 'email'=>'<>&\'"áéíóú',
  269. 'name'=>'<>&\'"áéíóú',
  270. 'uri'=>'http://www.example.com/joe'), $feed->getAuthor());
  271. }
  272. public function testFeedAuthorIfNotSetThrowsExceptionIfAnyEntriesAlsoAreMissingAuthors()
  273. {
  274. $this->markTestIncomplete('Not yet implemented...');
  275. }
  276. public function testFeedAuthorIfNotSetThrowsNoExceptionIfAllEntriesIncludeAtLeastOneAuthor()
  277. {
  278. $this->markTestIncomplete('Not yet implemented...');
  279. }
  280. public function testFeedIdHasBeenSet()
  281. {
  282. $this->_validWriter->setId('urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6');
  283. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  284. $atomFeed->render();
  285. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  286. $this->assertEquals('urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6', $feed->getId());
  287. }
  288. public function testFeedIdDefaultOfHtmlLinkIsUsedIfNotSetByHand()
  289. {
  290. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  291. $atomFeed->render();
  292. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  293. $this->assertEquals($feed->getLink(), $feed->getId());
  294. }
  295. public function testBaseUrlCanBeSet()
  296. {
  297. $this->_validWriter->setBaseUrl('http://www.example.com/base');
  298. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  299. $atomFeed->render();
  300. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  301. $this->assertEquals('http://www.example.com/base', $feed->getBaseUrl());
  302. }
  303. public function testCopyrightCanBeSet()
  304. {
  305. $this->_validWriter->setCopyright('Copyright © 2009 Paddy');
  306. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  307. $atomFeed->render();
  308. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  309. $this->assertEquals('Copyright © 2009 Paddy', $feed->getCopyright());
  310. }
  311. public function testCopyrightCharDataEncoding()
  312. {
  313. $this->_validWriter->setCopyright('<>&\'"áéíóú');
  314. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  315. $atomFeed->render();
  316. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  317. $this->assertEquals('<>&\'"áéíóú', $feed->getCopyright());
  318. }
  319. public function testCategoriesCanBeSet()
  320. {
  321. $this->_validWriter->addCategories(array(
  322. array('term'=>'cat_dog', 'label' => 'Cats & Dogs', 'scheme' => 'http://example.com/schema1'),
  323. array('term'=>'cat_dog2')
  324. ));
  325. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  326. $atomFeed->render();
  327. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  328. $expected = array(
  329. array('term'=>'cat_dog', 'label' => 'Cats & Dogs', 'scheme' => 'http://example.com/schema1'),
  330. array('term'=>'cat_dog2', 'label' => 'cat_dog2', 'scheme' => null)
  331. );
  332. $this->assertEquals($expected, (array) $feed->getCategories());
  333. }
  334. public function testCategoriesCharDataEncoding()
  335. {
  336. $this->_validWriter->addCategories(array(
  337. array('term'=>'cat_dog', 'label' => '<>&\'"áéíóú', 'scheme' => 'http://example.com/schema1'),
  338. array('term'=>'cat_dog2')
  339. ));
  340. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  341. $atomFeed->render();
  342. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  343. $expected = array(
  344. array('term'=>'cat_dog', 'label' => '<>&\'"áéíóú', 'scheme' => 'http://example.com/schema1'),
  345. array('term'=>'cat_dog2', 'label' => 'cat_dog2', 'scheme' => null)
  346. );
  347. $this->assertEquals($expected, (array) $feed->getCategories());
  348. }
  349. public function testHubsCanBeSet()
  350. {
  351. $this->_validWriter->addHubs(
  352. array('http://www.example.com/hub', 'http://www.example.com/hub2')
  353. );
  354. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  355. $atomFeed->render();
  356. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  357. $expected = array(
  358. 'http://www.example.com/hub', 'http://www.example.com/hub2'
  359. );
  360. $this->assertEquals($expected, (array) $feed->getHubs());
  361. }
  362. public function testImageCanBeSet()
  363. {
  364. $this->_validWriter->setImage(
  365. array('uri'=>'http://www.example.com/logo.gif')
  366. );
  367. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  368. $atomFeed->render();
  369. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  370. $expected = array(
  371. 'uri' => 'http://www.example.com/logo.gif'
  372. );
  373. $this->assertEquals($expected, $feed->getImage());
  374. }
  375. public function testIconCanBeSet()
  376. {
  377. $this->_validWriter->setIcon(
  378. array('uri'=>'http://www.example.com/logo.gif')
  379. );
  380. $atomFeed = new Zend_Feed_Writer_Renderer_Feed_Atom($this->_validWriter);
  381. $atomFeed->render();
  382. $feed = Zend_Feed_Reader::importString($atomFeed->saveXml());
  383. $expected = array(
  384. 'uri' => 'http://www.example.com/logo.gif'
  385. );
  386. $this->assertEquals($expected, $feed->getIcon());
  387. }
  388. }