From 14e1451aa949d67f3d68cdbbcafce11cd97e8c0a Mon Sep 17 00:00:00 2001 From: Jim Parry Date: Sun, 17 Mar 2019 00:37:29 -0700 Subject: [PATCH] Fix & test Test\DOMParser --- system/Test/DOMParser.php | 9 +++-- tests/system/Test/DOMParserTest.php | 53 +++++++++++++++++++++++++++-- 2 files changed, 58 insertions(+), 4 deletions(-) diff --git a/system/Test/DOMParser.php b/system/Test/DOMParser.php index 55bd10eff9..41dfacd19a 100644 --- a/system/Test/DOMParser.php +++ b/system/Test/DOMParser.php @@ -47,7 +47,10 @@ class DOMParser { if (! extension_loaded('DOM')) { + // always there in travis-ci + // @codeCoverageIgnoreStart throw new \BadMethodCallException('DOM extension is required, but not currently loaded.'); + // @codeCoverageIgnoreEnd } $this->dom = new \DOMDocument('1.0', 'utf-8'); @@ -78,8 +81,10 @@ class DOMParser //turning off some errors libxml_use_internal_errors(true); - if (! $this->dom->loadHTML($content)) + $this->dom->loadHTML($content); + if (sizeof(libxml_get_errors()) > 0) { + libxml_clear_errors(); throw new \BadMethodCallException('Invalid HTML'); } @@ -248,7 +253,7 @@ class DOMParser { foreach ($selector['attr'] as $key => $value) { - $path .= "[{$key}={$value}]"; + $path .= "[@{$key}=\"{$value}\"]"; } } diff --git a/tests/system/Test/DOMParserTest.php b/tests/system/Test/DOMParserTest.php index 8bd9b1479b..93ea627533 100644 --- a/tests/system/Test/DOMParserTest.php +++ b/tests/system/Test/DOMParserTest.php @@ -1,7 +1,9 @@ -

Hello

'; $expected = '' . "\n" - . '

Hello

'; + . '

Hello

'; $this->assertEquals($expected . "\n", $dom->withString($html)->getBody()); } @@ -74,6 +76,16 @@ class DOMParserTest extends CIUnitTestCase $this->assertTrue($dom->see('Hello World')); } + public function testBadHTML() + { + $dom = new DOMParser(); + + $html = '

Hello World

'; + + $this->expectException(\BadMethodCallException::class); + $dom->withString($html); + } + public function testSeeHTML() { $dom = new DOMParser(); @@ -333,4 +345,41 @@ class DOMParserTest extends CIUnitTestCase $this->assertTrue($dom->seeCheckboxIsChecked('.btn')); } + + public function testWithFile() + { + $dom = new DOMParser(); + + $filename = APPPATH . 'index.html'; + + $dom->withFile($filename); + $this->assertTrue($dom->see('Directory access is forbidden.')); + } + + public function testWithNotFile() + { + $dom = new DOMParser(); + + $filename = APPPATH . 'bogus.html'; + + $this->expectException(\InvalidArgumentException::class); + $dom->withFile($filename); + } + + public function testSeeAttribute() + { + $dom = new DOMParser(); + + $path = '[ name = user ]'; + $selector = $dom->parseSelector($path); + + $this->assertEquals(['name' => 'user'], $selector['attr']); + + $html = '
George
'; + $dom->withString($html); + + $this->assertTrue($dom->see(null, '*[ name = user ]')); + $this->assertFalse($dom->see(null, '*[ name = notthere ]')); + } + }