summaryrefslogtreecommitdiffstats
path: root/3rdparty/fguillot/picofeed/tests/Parser/XmlParserTest.php
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/fguillot/picofeed/tests/Parser/XmlParserTest.php')
-rw-r--r--3rdparty/fguillot/picofeed/tests/Parser/XmlParserTest.php105
1 files changed, 105 insertions, 0 deletions
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);
+ $this->assertTrue($result instanceof SimpleXMLElement);
+ $this->assertEquals($result->result, 'test');
+ }
+
+ public function testScanDomDocument()
+ {
+ return <<<XML
+<?xml version="1.0"?>
+<results>
+ <result>test</result>
+</results>
+XML;
+ $result = XmlParser::getDomDocument($xml);
+ $this->assertTrue($result instanceof DOMDocument);
+ $node = $result->getElementsByTagName('result')->item(0);
+ $this->assertEquals($node->nodeValue, 'test');
+ }
+
+ public function testScanInvalidXml()
+ {
+ $xml = <<<XML
+<foo>test</bar>
+XML;
+
+ $this->assertFalse(XmlParser::getDomDocument($xml));
+ $this->assertFalse(XmlParser::getSimpleXml($xml));
+ }
+
+ public function testScanXmlWithDTD()
+ {
+ $xml = <<<XML
+<?xml version="1.0"?>
+<!DOCTYPE results [
+<!ELEMENT results (result+)>
+<!ELEMENT result (#PCDATA)>
+]>
+<results>
+ <result>test</result>
+</results>
+XML;
+
+ $result = XmlParser::getDomDocument($xml);
+ $this->assertTrue($result instanceof DOMDocument);
+ $this->assertTrue($result->validate());
+ }
+}