FeedTest.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace Suin\RSSWriter;
  3. use Mockery;
  4. class FeedTest extends \XoopsUnit\TestCase
  5. {
  6. private $channelInterface = '\Suin\RSSWriter\ChannelInterface';
  7. public function testAddChannel()
  8. {
  9. $channel = Mockery::mock($this->channelInterface);
  10. $feed = new Feed();
  11. $this->assertSame($feed, $feed->addChannel($channel));
  12. $this->assertAttributeSame([$channel], 'channels', $feed);
  13. }
  14. public function testRender()
  15. {
  16. $feed = new Feed();
  17. $xml1 = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><channel><title>channel1</title></channel>');
  18. $xml2 = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><channel><title>channel2</title></channel>');
  19. $xml3 = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><channel><title>channel3</title></channel>');
  20. $channel1 = $this->getMock($this->channelInterface);
  21. $channel1->expects($this->once())->method('asXML')->will($this->returnValue($xml1));
  22. $channel2 = $this->getMock($this->channelInterface);
  23. $channel2->expects($this->once())->method('asXML')->will($this->returnValue($xml2));
  24. $channel3 = $this->getMock($this->channelInterface);
  25. $channel3->expects($this->once())->method('asXML')->will($this->returnValue($xml3));
  26. $this->reveal($feed)->attr('channels', [$channel1, $channel2, $channel3]);
  27. $expect = '<?xml version="1.0" encoding="UTF-8" ?>
  28. <rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  29. <channel><title>channel1</title></channel>
  30. <channel><title>channel2</title></channel>
  31. <channel><title>channel3</title></channel>
  32. </rss>
  33. ';
  34. $this->assertXmlStringEqualsXmlString($expect, $feed->render());
  35. }
  36. public function testRender_with_japanese()
  37. {
  38. $feed = new Feed();
  39. $xml1 = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><channel><title>日本語1</title></channel>');
  40. $xml2 = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><channel><title>日本語2</title></channel>');
  41. $xml3 = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><channel><title>日本語3</title></channel>');
  42. $channel1 = $this->getMock($this->channelInterface);
  43. $channel1->expects($this->once())->method('asXML')->will($this->returnValue($xml1));
  44. $channel2 = $this->getMock($this->channelInterface);
  45. $channel2->expects($this->once())->method('asXML')->will($this->returnValue($xml2));
  46. $channel3 = $this->getMock($this->channelInterface);
  47. $channel3->expects($this->once())->method('asXML')->will($this->returnValue($xml3));
  48. $this->reveal($feed)->attr('channels', [$channel1, $channel2, $channel3]);
  49. $expect = <<< 'XML'
  50. <?xml version="1.0" encoding="UTF-8"?>
  51. <rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  52. <channel>
  53. <title>日本語1</title>
  54. </channel>
  55. <channel>
  56. <title>日本語2</title>
  57. </channel>
  58. <channel>
  59. <title>日本語3</title>
  60. </channel>
  61. </rss>
  62. XML;
  63. $this->assertSame($expect, $feed->render());
  64. }
  65. public function test__toString()
  66. {
  67. $feed = new Feed();
  68. $xml1 = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><channel><title>channel1</title></channel>');
  69. $xml2 = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><channel><title>channel2</title></channel>');
  70. $xml3 = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><channel><title>channel3</title></channel>');
  71. $channel1 = $this->getMock($this->channelInterface);
  72. $channel1->expects($this->once())->method('asXML')->will($this->returnValue($xml1));
  73. $channel2 = $this->getMock($this->channelInterface);
  74. $channel2->expects($this->once())->method('asXML')->will($this->returnValue($xml2));
  75. $channel3 = $this->getMock($this->channelInterface);
  76. $channel3->expects($this->once())->method('asXML')->will($this->returnValue($xml3));
  77. $this->reveal($feed)->attr('channels', [$channel1, $channel2, $channel3]);
  78. $expect = '<?xml version="1.0" encoding="UTF-8" ?>
  79. <rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  80. <channel><title>channel1</title></channel>
  81. <channel><title>channel2</title></channel>
  82. <channel><title>channel3</title></channel>
  83. </rss>
  84. ';
  85. $this->assertXmlStringEqualsXmlString($expect, strval($feed));
  86. }
  87. }