summaryrefslogtreecommitdiffstats
path: root/3rdparty/fguillot/picofeed/tests/Parser
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/fguillot/picofeed/tests/Parser')
-rw-r--r--3rdparty/fguillot/picofeed/tests/Parser/AtomParserTest.php178
-rw-r--r--3rdparty/fguillot/picofeed/tests/Parser/ParserTest.php75
-rw-r--r--3rdparty/fguillot/picofeed/tests/Parser/Rss10ParserTest.php112
-rw-r--r--3rdparty/fguillot/picofeed/tests/Parser/Rss20ParserTest.php252
-rw-r--r--3rdparty/fguillot/picofeed/tests/Parser/Rss91ParserTest.php30
-rw-r--r--3rdparty/fguillot/picofeed/tests/Parser/Rss92ParserTest.php28
-rw-r--r--3rdparty/fguillot/picofeed/tests/Parser/XmlParserTest.php105
7 files changed, 780 insertions, 0 deletions
diff --git a/3rdparty/fguillot/picofeed/tests/Parser/AtomParserTest.php b/3rdparty/fguillot/picofeed/tests/Parser/AtomParserTest.php
new file mode 100644
index 000000000..491c7e3e0
--- /dev/null
+++ b/3rdparty/fguillot/picofeed/tests/Parser/AtomParserTest.php
@@ -0,0 +1,178 @@
+<?php
+namespace PicoFeed\Parser;
+
+use PHPUnit_Framework_TestCase;
+
+
+class AtomParserTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @expectedException PicoFeed\Parser\MalformedXmlException
+ */
+ public function testBadInput()
+ {
+ $parser = new Atom('boo');
+ $parser->execute();
+ }
+
+ public function testFeedTitle()
+ {
+ $parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('The Official Google Blog', $feed->getTitle());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('Example Feed', $feed->getTitle());
+ }
+
+ public function testFeedDescription()
+ {
+ $parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('Insights from Googlers into our products, technology, and the Google culture.', $feed->getDescription());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('', $feed->getDescription());
+ }
+
+ public function testFeedLogo()
+ {
+ $parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('', $feed->getLogo());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/bbc_urdu.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('http://www.bbc.co.uk/urdu/images/gel/rss_logo.gif', $feed->getLogo());
+ }
+
+ public function testFeedUrl()
+ {
+ $parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('http://googleblog.blogspot.com/', $feed->getUrl());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('http://example.org/', $feed->getUrl());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/lagrange.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('http://www.la-grange.net/', $feed->getUrl());
+ }
+
+ public function testFeedId()
+ {
+ $parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('tag:blogger.com,1999:blog-10861780', $feed->getId());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6', $feed->getId());
+ }
+
+ public function testFeedDate()
+ {
+ $parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals(1360148333, $feed->getDate());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals(1071340202, $feed->getDate());
+ }
+
+ public function testFeedLanguage()
+ {
+ $parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('', $feed->getLanguage());
+ $this->assertEquals('', $feed->items[0]->getLanguage());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/bbc_urdu.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('ur', $feed->getLanguage());
+ $this->assertEquals('ur', $feed->items[0]->getLanguage());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/lagrange.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('fr', $feed->getLanguage());
+ $this->assertEquals('fr', $feed->items[0]->getLanguage());
+ }
+
+ public function testItemId()
+ {
+ $parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('3841e5cf232f5111fc5841e9eba5f4b26d95e7d7124902e0f7272729d65601a6', $feed->items[0]->getId());
+ }
+
+ public function testItemUrl()
+ {
+ $parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('http://feedproxy.google.com/~r/blogspot/MKuf/~3/S_hccisqTW8/a-chrome-experiment-made-with-some.html', $feed->items[0]->getUrl());
+ }
+
+ public function testItemTitle()
+ {
+ $parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('Safer Internet Day: How we help you stay secure online', $feed->items[1]->getTitle());
+ }
+
+ public function testItemDate()
+ {
+ $parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals(1360011661, $feed->items[1]->getDate());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals(1071340202, $feed->items[0]->getDate());
+ }
+
+ public function testItemLanguage()
+ {
+ $parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('', $feed->items[1]->getLanguage());
+ }
+
+ public function testItemAuthor()
+ {
+ $parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('Emily Wood', $feed->items[1]->getAuthor());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('John Doe', $feed->items[0]->getAuthor());
+ }
+
+ public function testItemContent()
+ {
+ $parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertTrue(strpos($feed->items[1]->getContent(), '<p>Technology can') === 0);
+
+ $parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertTrue(strpos($feed->items[0]->getContent(), '<p>Some text.') === 0);
+ }
+} \ No newline at end of file
diff --git a/3rdparty/fguillot/picofeed/tests/Parser/ParserTest.php b/3rdparty/fguillot/picofeed/tests/Parser/ParserTest.php
new file mode 100644
index 000000000..3be864507
--- /dev/null
+++ b/3rdparty/fguillot/picofeed/tests/Parser/ParserTest.php
@@ -0,0 +1,75 @@
+<?php
+namespace PicoFeed\Parser;
+
+use PHPUnit_Framework_TestCase;
+
+
+class ParserTest extends PHPUnit_Framework_TestCase
+{
+ public function testParseDate()
+ {
+ $parser = new Rss20('');
+
+ date_default_timezone_set('UTC');
+
+ $this->assertEquals(1359066183, $parser->parseDate('Thu, 24 Jan 2013 22:23:03 +0000'));
+ $this->assertEquals(1362992761, $parser->parseDate('2013-03-11T09:06:01+00:00'));
+ $this->assertEquals(1363752990, $parser->parseDate('2013-03-20T04:16:30+00:00'));
+ $this->assertEquals(1359066183, $parser->parseDate('Thu, 24 Jan 2013 22:23:03 +0000'));
+ $this->assertEquals(1380929699, $parser->parseDate('Sat, 04 Oct 2013 02:34:59 +0300'));
+ $this->assertEquals(1054633161, $parser->parseDate('Tue, 03 Jun 2003 09:39:21 GMT'));
+ $this->assertEquals(1071340202, $parser->parseDate('2003-12-13T18:30:02Z'));
+ $this->assertEquals(1364234797, $parser->parseDate('Mon, 25 Mar 2013 19:06:37 +0100'));
+ $this->assertEquals(1360054941, $parser->parseDate('2013-02-05T09:02:21.880-08:00'));
+ $this->assertEquals(1286834400, $parser->parseDate('Tue, 12 Oct 2010 00:00:00 IST'));
+ $this->assertEquals('2012-05-15', date('Y-m-d', $parser->parseDate('Tue, 15 May 2012 24:05:00 UTC')));
+ $this->assertEquals('2013-09-12', date('Y-m-d', $parser->parseDate('Thu, 12 Sep 2013 7:00:00 UTC')));
+ $this->assertEquals('2012-01-31', date('Y-m-d', $parser->parseDate('01.31.2012')));
+ $this->assertEquals('2012-01-31', date('Y-m-d', $parser->parseDate('01/31/2012')));
+ $this->assertEquals('2012-01-31', date('Y-m-d', $parser->parseDate('2012-01-31')));
+ $this->assertEquals('2010-02-24', date('Y-m-d', $parser->parseDate('2010-02-245T15:27:52Z')));
+ $this->assertEquals('2010-08-20', date('Y-m-d', $parser->parseDate('2010-08-20Thh:08:ssZ')));
+ $this->assertEquals(1288648057, $parser->parseDate('Mon, 01 Nov 2010 21:47:37 UT'));
+ $this->assertEquals(1346069615, $parser->parseDate('Mon Aug 27 2012 12:13:35 GMT-0700 (PDT)'));
+ $this->assertEquals(time(), $parser->parseDate('Tue, 3 Febuary 2010 00:00:00 IST'));
+ $this->assertEquals(time(), $parser->parseDate('############# EST'));
+ $this->assertEquals(time(), $parser->parseDate('Wed, 30 Nov -0001 00:00:00 +0000'));
+ $this->assertEquals(time(), $parser->parseDate('čet, 24 maj 2012 00:00:00'));
+ $this->assertEquals(time(), $parser->parseDate('-0-0T::Z'));
+ $this->assertEquals(time(), $parser->parseDate('Wed, 18 2012'));
+ $this->assertEquals(time(), $parser->parseDate("'2009-09-30 CDT16:09:54"));
+ $this->assertEquals(time(), $parser->parseDate('ary 8 Jan 2013 00:00:00 GMT'));
+ $this->assertEquals(time(), $parser->parseDate('Sat, 11 00:00:01 GMT'));
+ $this->assertEquals(1370631743, $parser->parseDate('Fri Jun 07 2013 19:02:23 GMT+0000 (UTC)'));
+ $this->assertEquals(1377412225, $parser->parseDate('25/08/2013 06:30:25 م'));
+ $this->assertEquals(time(), $parser->parseDate('+0400'));
+ }
+
+ public function testChangeHashAlgo()
+ {
+ $parser = new Rss20('');
+ $this->assertEquals('fb8e20fc2e4c3f248c60c39bd652f3c1347298bb977b8b4d5903b85055620603', $parser->generateId('a', 'b'));
+
+ $parser->setHashAlgo('sha1');
+ $this->assertEquals('da23614e02469a0d7c7bd1bdab5c9c474b1904dc', $parser->generateId('a', 'b'));
+ }
+
+ public function testLangRTL()
+ {
+ $this->assertFalse(Parser::isLanguageRTL('fr-FR'));
+ $this->assertTrue(Parser::isLanguageRTL('ur'));
+ $this->assertTrue(Parser::isLanguageRTL('syr-**'));
+ $this->assertFalse(Parser::isLanguageRTL('ru'));
+ }
+
+ public function testNamespaceValue()
+ {
+ $xml = XmlParser::getSimpleXml(file_get_contents('tests/fixtures/rue89.xml'));
+ $this->assertNotFalse($xml);
+ $namespaces = $xml->getNamespaces(true);
+
+ $parser = new Rss20('');
+ $this->assertEquals('Blandine Grosjean', XmlParser::getNamespaceValue($xml->channel->item[0], $namespaces, 'creator'));
+ $this->assertEquals('Pierre-Carl Langlais', XmlParser::getNamespaceValue($xml->channel->item[1], $namespaces, 'creator'));
+ }
+}
diff --git a/3rdparty/fguillot/picofeed/tests/Parser/Rss10ParserTest.php b/3rdparty/fguillot/picofeed/tests/Parser/Rss10ParserTest.php
new file mode 100644
index 000000000..bc0824502
--- /dev/null
+++ b/3rdparty/fguillot/picofeed/tests/Parser/Rss10ParserTest.php
@@ -0,0 +1,112 @@
+<?php
+namespace PicoFeed\Parser;
+
+use PHPUnit_Framework_TestCase;
+
+
+class Rss10ParserTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @expectedException PicoFeed\Parser\MalformedXmlException
+ */
+ public function testBadInput()
+ {
+ $parser = new Rss10('boo');
+ $parser->execute();
+ }
+
+ public function testFeedTitle()
+ {
+ $parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals("Planète jQuery : l'actualité jQuery, plugins jQuery et tutoriels jQuery en français", $feed->getTitle());
+ }
+
+ public function testFeedUrl()
+ {
+ $parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('http://planete-jquery.fr', $feed->getUrl());
+ }
+
+ public function testFeedId()
+ {
+ $parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('http://planete-jquery.fr', $feed->getId());
+ }
+
+ public function testFeedDate()
+ {
+ $parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals(1363752990, $feed->getDate());
+ }
+
+ public function testFeedLanguage()
+ {
+ $parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('fr', $feed->getLanguage());
+ $this->assertEquals('fr', $feed->items[0]->getLanguage());
+ }
+
+ public function testItemId()
+ {
+ $parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
+ $parser->disableContentFiltering();
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+
+ $item = $feed->items[0];
+ $this->assertEquals($parser->generateId($item->getTitle(), $item->getUrl(), $item->getContent()), $item->getId());
+ }
+
+ public function testItemUrl()
+ {
+ $parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('http://www.mathieurobin.com/2013/03/chroniques-jquery-episode-108/', $feed->items[0]->getUrl());
+ }
+
+ public function testItemTitle()
+ {
+ $parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('LaFermeDuWeb : PowerTip - Des tooltips aux fonctionnalités avancées', $feed->items[1]->getTitle());
+ }
+
+ public function testItemDate()
+ {
+ $parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals(1362647700, $feed->items[1]->getDate());
+ }
+
+ public function testItemLanguage()
+ {
+ $parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('fr', $feed->items[1]->getLanguage());
+ }
+
+ public function testItemAuthor()
+ {
+ $parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('LaFermeDuWeb', $feed->items[1]->getAuthor());
+ }
+
+ public function testItemContent()
+ {
+ $parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertTrue(strpos($feed->items[1]->getContent(), '<a href="http://www.lafermeduweb.net') === 0);
+ }
+} \ No newline at end of file
diff --git a/3rdparty/fguillot/picofeed/tests/Parser/Rss20ParserTest.php b/3rdparty/fguillot/picofeed/tests/Parser/Rss20ParserTest.php
new file mode 100644
index 000000000..b06821c27
--- /dev/null
+++ b/3rdparty/fguillot/picofeed/tests/Parser/Rss20ParserTest.php
@@ -0,0 +1,252 @@
+<?php
+namespace PicoFeed\Parser;
+
+use PHPUnit_Framework_TestCase;
+
+
+class Rss20ParserTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @expectedException PicoFeed\Parser\MalformedXmlException
+ */
+ public function testBadInput()
+ {
+ $parser = new Rss20('boo');
+ $parser->execute();
+ }
+
+ public function testFeedTitle()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('WordPress News', $feed->getTitle());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/pcinpact.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('PC INpact', $feed->getTitle());
+ }
+
+ public function testFeedDescription()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('WordPress News', $feed->getDescription());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/pcinpact.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('Actualités Informatique', $feed->getDescription());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/sametmax.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('Deux développeurs en vadrouille qui se sortent les doigts du code', $feed->getDescription());
+ }
+
+ public function testFeedLogo()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('', $feed->getLogo());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/radio-france.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('http://media.radiofrance-podcast.net/podcast09/RF_OMM_0000006330_ITE.jpg', $feed->getLogo());
+ }
+
+ public function testFeedUrl()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('http://wordpress.org/news', $feed->getUrl());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/pcinpact.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('http://www.pcinpact.com/', $feed->getUrl());
+ }
+
+ public function testFeedId()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('http://wordpress.org/news', $feed->getId());
+ }
+
+ public function testFeedDate()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals(1359066183, $feed->getDate());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/fulltextrss.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals(time(), $feed->getDate());
+ }
+
+ public function testFeedLanguage()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('en-US', $feed->getLanguage());
+ $this->assertEquals('en-US', $feed->items[0]->getLanguage());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/zoot_egkty.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('ur', $feed->getLanguage());
+ $this->assertEquals('ur', $feed->items[0]->getLanguage());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/ibash.ru.xml'));
+ $feed = $parser->execute();
+ $this->assertEquals('ru', $feed->getLanguage());
+ $this->assertEquals('ru', $feed->items[0]->getLanguage());
+ }
+
+ public function testItemId()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('de679f14fc4774f0d6dfe73c3f8c8368ab85da18addf101a2af8c32ac6320f9f', $feed->items[0]->getId());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/pcinpact.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals(hash('sha256', '78872'), $feed->items[0]->getId());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/fulltextrss.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals(hash('sha256', 'http://www.numerama.com/magazine/25669-brevets-un-juge-doute-de-la-bonne-volonte-de-google-et-apple.html'), $feed->items[0]->getId());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/debug_show.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals(hash('sha256', '38DC2FF1-4207-4C04-93F3-2DAFB0E559D9'), $feed->items[1]->getId());
+ $this->assertEquals(hash('sha256', '3FA03A63-BEA2-4199-A1E4-D2963845F3F6'), $feed->items[2]->getId());
+ $this->assertEquals($feed->items[1]->getUrl(), $feed->items[2]->getUrl());
+ $this->assertNotEquals($feed->items[1]->getId(), $feed->items[2]->getId());
+ }
+
+ public function testItemUrl()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('http://wordpress.org/news/2013/01/wordpress-3-5-1/', $feed->items[0]->getUrl());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/pcinpact.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('http://www.pcinpact.com/breve/78872-la-dcri-purge-wikipedia-par-menace-bel-effet-streisand-a-cle.htm?utm_source=PCi_RSS_Feed&utm_medium=news&utm_campaign=pcinpact', $feed->items[0]->getUrl());
+ }
+
+ public function testItemTitle()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('2012: A Look Back', $feed->items[1]->getTitle());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/womensweardaily.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('They Are Wearing: Frieze London Photo by Marcus Dawes', $feed->items[3]->getTitle());
+ }
+
+ public function testItemDate()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals(1357006940, $feed->items[1]->getDate());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/fulltextrss.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals(1365781095, $feed->items[0]->getDate());
+ }
+
+ public function testItemLanguage()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('en-US', $feed->items[1]->getLanguage());
+ }
+
+ public function testItemAuthor()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('Jen Mylo', $feed->items[1]->getAuthor());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss2sample.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('webmaster@example.com', $feed->items[2]->getAuthor());
+ }
+
+ public function testItemContent()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertTrue(strpos($feed->items[1]->getContent(), '<p>Another year is coming') === 0);
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/rss2sample.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertTrue(strpos($feed->items[1]->getContent(), '<p>Sky watchers in Europe') === 0);
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/ibash.ru.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertTrue(strpos($feed->items[0]->getContent(), '<p>Хабр, обсуждение фейлов на работе: reaferon: Интернет') === 0);
+ }
+
+ public function testItemEnclosure()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/rue89.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('http://rue89.feedsportal.com/c/33822/f/608948/e/1/s/2a687021/l/0L0Srue890N0Csites0Cnews0Cfiles0Cstyles0Cmosaic0Cpublic0Czapnet0Cthumbnail0Isquare0C20A130C0A40Ccahuzac0I10Bpng/cahuzac_1.png', $feed->items[0]->getEnclosureUrl());
+ $this->assertEquals('image/png', $feed->items[0]->getEnclosureType());
+ }
+
+ public function testFeedsReportedAsNotWorking()
+ {
+ $parser = new Rss20(file_get_contents('tests/fixtures/biertaucher.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals(177, count($feed->items));
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/radio-france.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals(52, count($feed->items));
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/fanboys.fm_episodes.all.mp3.rss'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/geekstammtisch.de_episodes.mp3.rss'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('http://geekstammtisch.de#GST001', $feed->items[1]->getUrl());
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/lincoln_loop.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/next_inpact_full.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/jeux-linux.fr.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+
+ $parser = new Rss20(file_get_contents('tests/fixtures/cercle.psy.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ }
+}
diff --git a/3rdparty/fguillot/picofeed/tests/Parser/Rss91ParserTest.php b/3rdparty/fguillot/picofeed/tests/Parser/Rss91ParserTest.php
new file mode 100644
index 000000000..8f10f2ea5
--- /dev/null
+++ b/3rdparty/fguillot/picofeed/tests/Parser/Rss91ParserTest.php
@@ -0,0 +1,30 @@
+<?php
+namespace PicoFeed\Parser;
+
+use PHPUnit_Framework_TestCase;
+
+
+class Rss91ParserTest extends PHPUnit_Framework_TestCase
+{
+ public function testFormatOk()
+ {
+ $parser = new Rss91(file_get_contents('tests/fixtures/rss_0.91.xml'));
+ $feed = $parser->execute();
+
+ $this->assertNotFalse($feed);
+ $this->assertNotEmpty($feed->items);
+
+ $this->assertEquals('WriteTheWeb', $feed->getTitle());
+ $this->assertEquals('http://writetheweb.com', $feed->getUrl());
+ $this->assertEquals('http://writetheweb.com', $feed->getId());
+ $this->assertEquals(time(), $feed->getDate());
+ $this->assertEquals(6, count($feed->items));
+
+ $this->assertEquals('Giving the world a pluggable Gnutella', $feed->items[0]->getTitle());
+ $this->assertEquals('http://writetheweb.com/read.php?item=24', $feed->items[0]->getUrl());
+ $this->assertEquals('085a9133a75542f878fa73ee2afbb6a2350b6c4fb125e6d8ca09478c47702111', $feed->items[0]->getId());
+ $this->assertEquals(time(), $feed->items[0]->getDate());
+ $this->assertEquals('webmaster@writetheweb.com', $feed->items[0]->getAuthor());
+ $this->assertTrue(strpos($feed->items[1]->getContent(), '<p>After a period of dormancy') === 0);
+ }
+} \ No newline at end of file
diff --git a/3rdparty/fguillot/picofeed/tests/Parser/Rss92ParserTest.php b/3rdparty/fguillot/picofeed/tests/Parser/Rss92ParserTest.php
new file mode 100644
index 000000000..1d67c2252
--- /dev/null
+++ b/3rdparty/fguillot/picofeed/tests/Parser/Rss92ParserTest.php
@@ -0,0 +1,28 @@
+<?php
+namespace PicoFeed\Parser;
+
+use PHPUnit_Framework_TestCase;
+
+
+class Rss92ParserTest extends PHPUnit_Framework_TestCase
+{
+ public function testFormatOk()
+ {
+ $parser = new Rss92(file_get_contents('tests/fixtures/univers_freebox.xml'));
+ $feed = $parser->execute();
+
+ $this->assertNotFalse($feed);
+ $this->assertNotEmpty($feed->items);
+
+ $this->assertEquals('Univers Freebox', $feed->getTitle());
+ $this->assertEquals('http://www.universfreebox.com', $feed->getUrl());
+ $this->assertEquals('http://www.universfreebox.com', $feed->getId());
+ $this->assertEquals(time(), $feed->date);
+ $this->assertEquals(30, count($feed->items));
+
+ $this->assertEquals('Retour de Xavier Niel sur Twitter, « sans initiative privée, pas de révolution #Born2code »', $feed->items[0]->title);
+ $this->assertEquals('http://www.universfreebox.com/article20302.html', $feed->items[0]->getUrl());
+ $this->assertEquals('ad23a45af194cc46d5151a9a062c5841b03405e456595c30b742d827e08af2e0', $feed->items[0]->getId());
+ $this->assertEquals('', $feed->items[0]->getAuthor());
+ }
+} \ No newline at end of file
diff --git a/3rdparty/fguillot/picofeed/tests/Parser/XmlParserTest.php b/3rdparty/fguillot/picofeed/tests/Parser/XmlParserTest.php
new file mode 100644
index 000000000..b20b3f635
--- /dev/null
+++ b/3rdparty/fguillot/picofeed/tests/Parser/XmlParserTest.php
@@ -0,0 +1,105 @@
+<?php
+namespace PicoFeed\Parser;
+
+use DOMDocument;
+
+use PHPUnit_Framework_TestCase;
+
+
+class XmlParserTest extends PHPUnit_Framework_TestCase
+{
+ public function testGetEncodingFromXmlTag()
+ {
+ $this->assertEquals('utf-8', XmlParser::getEncodingFromXmlTag("<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet"));
+ $this->assertEquals('utf-8', XmlParser::getEncodingFromXmlTag('<?xml version="1.0" encoding="UTF-8"?><feed xml:'));
+ $this->assertEquals('windows-1251', XmlParser::getEncodingFromXmlTag('<?xml version="1.0" encoding="Windows-1251"?><rss version="2.0">'));
+ }
+
+ public function testScanForXEE()
+ {
+ $xml = <<<XML
+<?xml version="1.0"?>
+<!DOCTYPE results [<!ENTITY harmless "completely harmless">]>
+<results>
+ <result>This result is &harmless;</result>
+</results>
+XML;
+
+ $this->assertFalse(XmlParser::getDomDocument($xml));
+ }
+
+ public function testScanForXXE()
+ {
+ $file = tempnam(sys_get_temp_dir(), 'PicoFeed_XmlParser');
+ file_put_contents($file, 'Content Injection');
+
+ $xml = <<<XML
+<?xml version="1.0"?>
+<!DOCTYPE root
+[
+<!ENTITY foo SYSTEM "file://$file">
+]>
+<results>
+ <result>&foo;</result>
+</results>
+XML;
+
+ $this->assertFalse(XmlParser::getDomDocument($xml));
+ unlink($file);
+ }
+
+ public function testScanSimpleXML()
+ {
+ return <<<XML
+<?xml version="1.0"?>
+<results>
+ <result>test</result>
+</results>
+XML;
+ $result = XmlParser::getSimpleXml($xml);<