3 * PHPUnit tests for XMLTypeCheck.
8 class XmlTypeCheckTest
extends PHPUnit_Framework_TestCase
{
9 const WELL_FORMED_XML
= "<root><child /></root>";
10 const MAL_FORMED_XML
= "<root><child /></error>";
11 // @codingStandardsIgnoreStart Generic.Files.LineLength
12 const XML_WITH_PIH
= '<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/w/index.php"?><svg><child /></svg>';
13 // @codingStandardsIgnoreEnd
16 * @covers XMLTypeCheck::newFromString
17 * @covers XMLTypeCheck::getRootElement
19 public function testWellFormedXML() {
20 $testXML = XmlTypeCheck
::newFromString( self
::WELL_FORMED_XML
);
21 $this->assertTrue( $testXML->wellFormed
);
22 $this->assertEquals( 'root', $testXML->getRootElement() );
26 * @covers XMLTypeCheck::newFromString
28 public function testMalFormedXML() {
29 $testXML = XmlTypeCheck
::newFromString( self
::MAL_FORMED_XML
);
30 $this->assertFalse( $testXML->wellFormed
);
34 * Verify we check for recursive entity DOS
36 * (If the DOS isn't properly handled, the test runner will probably go OOM...)
38 public function testRecursiveEntity() {
40 <?xml version="1.0" encoding="utf-8"?>
42 <!ENTITY test "&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;">
43 <!ENTITY a "&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;">
44 <!ENTITY b "&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;">
45 <!ENTITY c "&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;">
46 <!ENTITY d "&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;">
47 <!ENTITY e "&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;">
48 <!ENTITY f "&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;">
49 <!ENTITY g "-00000000000000000000000000000000000000000000000000000000000000000000000-">
55 $check = XmlTypeCheck
::newFromString( $xml );
56 $this->assertFalse( $check->wellFormed
);
60 * @covers XMLTypeCheck::processingInstructionHandler
62 public function testProcessingInstructionHandler() {
64 $testXML = new XmlTypeCheck(
69 'processing_instruction_handler' => function() use ( &$called ) {
74 $this->assertTrue( $called );