mirror of
https://github.com/moodle/moodle.git
synced 2025-01-18 22:08:20 +01:00
MDL-19840 Upgraded code of HTML-parsing assertions
This commit is contained in:
parent
1a504c8996
commit
6a92312848
@ -45,7 +45,7 @@ class ContainsTagWithAttribute_test extends UnitTestCase {
|
||||
|
||||
function test_other_attrs() {
|
||||
$expectation = new ContainsTagWithAttribute('span', 'class', 'error');
|
||||
$this->assertTrue($expectation->test('<span otherattr="thingy" class = "error" otherattr="thingy">message</span>'));
|
||||
$this->assertTrue($expectation->test('<span oneattr="thingy" class = "error" otherattr="thingy">message</span>'));
|
||||
}
|
||||
|
||||
function test_fails() {
|
||||
@ -54,8 +54,21 @@ class ContainsTagWithAttribute_test extends UnitTestCase {
|
||||
}
|
||||
|
||||
function test_link() {
|
||||
$html = '<a href="http://www.test.com">Click Here</a>';
|
||||
$expectation = new ContainsTagWithAttribute('a', 'href', 'http://www.test.com');
|
||||
$this->assertTrue($expectation->test('<a href="http://www.test.com">Click Here</a>'));
|
||||
$this->assertTrue($expectation->test($html));
|
||||
$this->assert(new ContainsTagWithContents('a', 'Click Here'), $html);
|
||||
}
|
||||
|
||||
function test_garbage() {
|
||||
$expectation = new ContainsTagWithAttribute('a', 'href', '!#@*%@_-)(*#0-735\\fdf//fdfg235-0970}$@}{#:~');
|
||||
$this->assertTrue($expectation->test('<a href="!#@*%@_-)(*#0-735\\fdf//fdfg235-0970}$@}{#:~">Click Here</a>'));
|
||||
|
||||
}
|
||||
|
||||
function test_inline_js() {
|
||||
$html = '<a title="Popup window" href="http://otheraddress.com" class="link" onclick="this.target=\'my_popup\';">Click here</a>';
|
||||
$this->assert(new ContainsTagWithAttribute('a', 'href', 'http://otheraddress.com'), $html);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -195,8 +195,6 @@ class CheckSpecifiedFieldsExpectation extends SimpleExpectation {
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class ContainsTagWithAttribute extends SimpleExpectation {
|
||||
const ATTRSREGEX = '(?:\s+\w+\s*=\s*["\'][^"\'>]*["\'])*';
|
||||
|
||||
protected $tag;
|
||||
protected $attribute;
|
||||
protected $value;
|
||||
@ -209,10 +207,17 @@ class ContainsTagWithAttribute extends SimpleExpectation {
|
||||
}
|
||||
|
||||
function test($html) {
|
||||
$regex = '/<' . preg_quote($this->tag, '/') . self::ATTRSREGEX .
|
||||
'(?:\s+' . preg_quote($this->attribute, '/') . '\s*=\s*["\']' . preg_quote($this->value, '/') . '["\'])' .
|
||||
self::ATTRSREGEX . '\s*>/';
|
||||
return preg_match($regex, $html);
|
||||
$parser = new DOMDocument();
|
||||
$parser->validateOnParse = true;
|
||||
$parser->loadHTML($html);
|
||||
$list = $parser->getElementsByTagName($this->tag);
|
||||
|
||||
foreach ($list as $node) {
|
||||
if ($node->attributes->getNamedItem($this->attribute)->nodeValue == $this->value) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function testMessage($html) {
|
||||
@ -221,6 +226,65 @@ class ContainsTagWithAttribute extends SimpleExpectation {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An Expectation that looks to see whether some HMTL contains a tag with an array of attributes.
|
||||
* All attributes must be present and their values must match the expected values.
|
||||
*
|
||||
* @copyright 2009 Nicolas Connault
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class ContainsTagWithAttributes extends SimpleExpectation {
|
||||
protected $tag;
|
||||
protected $attributes = array();
|
||||
|
||||
function __construct($tag, $attributes, $message = '%s') {
|
||||
$this->SimpleExpectation($message);
|
||||
$this->tag = $tag;
|
||||
$this->attributes = $attributes;
|
||||
}
|
||||
|
||||
function test($html) {
|
||||
$parser = new DOMDocument();
|
||||
$parser->validateOnParse = true;
|
||||
$parser->loadHTML($html);
|
||||
$list = $parser->getElementsByTagName($this->tag);
|
||||
|
||||
// Iterating through inputs
|
||||
foreach ($list as $node) {
|
||||
if (empty($node->attributes) || !is_a($node->attributes, 'DOMNamedNodeMap')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$result = true;
|
||||
|
||||
foreach ($this->attributes as $attribute => $expectedvalue) {
|
||||
if (!$node->attributes->getNamedItem($attribute)) {
|
||||
break 2;
|
||||
}
|
||||
|
||||
if ($node->attributes->getNamedItem($attribute)->value != $expectedvalue) {
|
||||
$result = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($result) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function testMessage($html) {
|
||||
$output = 'Content [' . $html . '] does not contain the tag [' . $this->tag . '] with attributes [';
|
||||
foreach ($this->attributes as $var => $val) {
|
||||
$output .= "$var=\"$val\" ";
|
||||
}
|
||||
$output = rtrim($output);
|
||||
$output .= ']';
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An Expectation that looks to see whether some HMTL contains a tag with a certain text inside it.
|
||||
@ -229,8 +293,6 @@ class ContainsTagWithAttribute extends SimpleExpectation {
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class ContainsTagWithContents extends SimpleExpectation {
|
||||
const ATTRSREGEX = '(?:\s+\w+\s*=\s*["\'][^"\'>]*["\'])*';
|
||||
|
||||
protected $tag;
|
||||
protected $content;
|
||||
|
||||
@ -241,9 +303,17 @@ class ContainsTagWithContents extends SimpleExpectation {
|
||||
}
|
||||
|
||||
function test($html) {
|
||||
$regex = '/<' . preg_quote($this->tag, '/') . self::ATTRSREGEX . '\s*>' . preg_quote($this->content, '/') .
|
||||
'<\/' . preg_quote($this->tag, '/') . '>/';
|
||||
return preg_match($regex, $html);
|
||||
$parser = new DOMDocument();
|
||||
$parser->loadHTML($html);
|
||||
$list = $parser->getElementsByTagName($this->tag);
|
||||
|
||||
foreach ($list as $node) {
|
||||
if ($node->textContent == $this->content) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function testMessage($html) {
|
||||
@ -252,6 +322,39 @@ class ContainsTagWithContents extends SimpleExpectation {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An Expectation that looks to see whether some HMTL contains an empty tag of a specific type.
|
||||
*
|
||||
* @copyright 2009 Nicolas Connault
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class ContainsEmptyTag extends SimpleExpectation {
|
||||
protected $tag;
|
||||
|
||||
function __construct($tag, $message = '%s') {
|
||||
$this->SimpleExpectation($message);
|
||||
$this->tag = $tag;
|
||||
}
|
||||
|
||||
function test($html) {
|
||||
$parser = new DOMDocument();
|
||||
$parser->loadHTML($html);
|
||||
$list = $parser->getElementsByTagName($this->tag);
|
||||
|
||||
foreach ($list as $node) {
|
||||
if (!$node->hasAttributes() && !$node->hasChildNodes()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function testMessage($html) {
|
||||
return 'Content ['.$html.'] does not contain the empty tag ['.$this->tag.'].';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This class lets you write unit tests that access a separate set of test
|
||||
|
Loading…
x
Reference in New Issue
Block a user