You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
624 lines
31 KiB
624 lines
31 KiB
<?php
|
|
/**
|
|
* @license MIT
|
|
* Copyright 2017 Dustin Wilson, J. King, et al.
|
|
* See LICENSE and AUTHORS files for details
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
namespace MensBeam\HTML\DOM\TestCase;
|
|
|
|
use MensBeam\HTML\DOM\{
|
|
Document,
|
|
DOMException,
|
|
Element,
|
|
Node,
|
|
Text,
|
|
XMLDocument
|
|
};
|
|
|
|
|
|
/** @covers \MensBeam\HTML\DOM\Element */
|
|
class TestElement extends \PHPUnit\Framework\TestCase {
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Attr::__get_value
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::__get_documentElement
|
|
* @covers \MensBeam\HTML\DOM\Document::load
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__get_namespaceURI
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttribute
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttributeNode
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::__get_ownerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::hasChildNodes
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_wrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
*/
|
|
public function testMethod_getAttribute() {
|
|
$d = new Document('<!DOCTYPE html><html id="ook" poop💩="jeff"></html>', 'UTF-8');
|
|
$documentElement = $d->documentElement;
|
|
|
|
// id attribute
|
|
$this->assertSame('ook', $documentElement->getAttribute('id'));
|
|
// coerced attribute
|
|
$this->assertSame('jeff', $documentElement->getAttribute('poop💩'));
|
|
// nonexistent attribute
|
|
$this->assertNull($documentElement->getAttribute('class'));
|
|
}
|
|
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttributeNames
|
|
*
|
|
* @covers \MensBeam\HTML\DOM\Collection::__construct
|
|
* @covers \MensBeam\HTML\DOM\Collection::item
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::load
|
|
* @covers \MensBeam\HTML\DOM\DocumentOrElement::getElementsByTagName
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\HTMLCollection::item
|
|
* @covers \MensBeam\HTML\DOM\HTMLCollection::offsetGet
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::hasChildNodes
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
*/
|
|
public function testMethod_getAttributeNames() {
|
|
$d = new Document('<!DOCTYPE html><html><body><div id="ook" class="eek" ack="ack" foo="foo" bar="bar"></div></body></html>');
|
|
$div = $d->getElementsByTagName('div')[0];
|
|
$this->assertSame([ 'id', 'class', 'ack', 'foo', 'bar' ], $div->getAttributeNames());
|
|
}
|
|
|
|
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttributeNodeNS
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttributeNS
|
|
*
|
|
* @covers \MensBeam\HTML\DOM\Attr::__get_value
|
|
* @covers \MensBeam\HTML\DOM\Attr::__set_value
|
|
* @covers \MensBeam\HTML\DOM\Collection::__construct
|
|
* @covers \MensBeam\HTML\DOM\Collection::item
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::__get_documentElement
|
|
* @covers \MensBeam\HTML\DOM\Document::createAttributeNS
|
|
* @covers \MensBeam\HTML\DOM\Document::load
|
|
* @covers \MensBeam\HTML\DOM\DocumentOrElement::getElementsByTagNameNS
|
|
* @covers \MensBeam\HTML\DOM\DocumentOrElement::validateAndExtract
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::setAttributeNode
|
|
* @covers \MensBeam\HTML\DOM\Element::setAttributeNodeNS
|
|
* @covers \MensBeam\HTML\DOM\Element::setAttributeNS
|
|
* @covers \MensBeam\HTML\DOM\HTMLCollection::item
|
|
* @covers \MensBeam\HTML\DOM\HTMLCollection::offsetGet
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::__get_ownerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerNode
|
|
* @covers \MensBeam\HTML\DOM\Node::hasChildNodes
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_wrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::getProtectedProperty
|
|
*/
|
|
public function testMethod_getAttributeNS() {
|
|
$d = new Document('<!DOCTYPE html><html><head></head><body><svg xmlns="' . Node::SVG_NAMESPACE . '" xmlns:xlink="' . Node::XLINK_NAMESPACE . '" viewBox="0 0 42 42"></svg></body></html>', 'UTF-8');
|
|
$svg = $d->getElementsByTagNameNS(Node::SVG_NAMESPACE, 'svg')[0];
|
|
// Parser per the spec doesn't parse xmlns prefixed attributes except xlink, so let's add one manually instead to test coercion.
|
|
$svg->setAttributeNS(Node::XMLNS_NAMESPACE, 'xmlns:poop💩', 'https://poop💩.poop');
|
|
|
|
// xmlns attribute
|
|
$this->assertSame(Node::SVG_NAMESPACE, $svg->getAttributeNS(Node::XMLNS_NAMESPACE, 'xmlns'));
|
|
// xmlns xlink attribute
|
|
$this->assertSame(Node::XLINK_NAMESPACE, $svg->getAttributeNS(Node::XMLNS_NAMESPACE, 'xlink'));
|
|
// coerced namespaced attribute
|
|
$this->assertSame('https://poop💩.poop', $svg->getAttributeNS(Node::XMLNS_NAMESPACE, 'poop💩'));
|
|
// nonexistent namespaced attribute
|
|
$this->assertNull($svg->getAttributeNS(Node::XMLNS_NAMESPACE, 'ook'));
|
|
// empty string namespace
|
|
$this->assertSame('0 0 42 42', $svg->getAttributeNS('', 'viewBox'));
|
|
}
|
|
|
|
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Element::hasAttribute
|
|
*
|
|
* @covers \MensBeam\HTML\DOM\Collection::__construct
|
|
* @covers \MensBeam\HTML\DOM\Collection::item
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::__get_documentElement
|
|
* @covers \MensBeam\HTML\DOM\Document::load
|
|
* @covers \MensBeam\HTML\DOM\DocumentOrElement::getElementsByTagNameNS
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__get_namespaceURI
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttributeNode
|
|
* @covers \MensBeam\HTML\DOM\HTMLCollection::item
|
|
* @covers \MensBeam\HTML\DOM\HTMLCollection::offsetGet
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::__get_ownerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::hasChildNodes
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_wrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
*/
|
|
public function testMethod_hasAttribute() {
|
|
$d = new Document('<!DOCTYPE html><html id="ook" poop💩="jeff"></html>', 'UTF-8');
|
|
$documentElement = $d->documentElement;
|
|
$svg = $d->getElementsByTagNameNS(Node::SVG_NAMESPACE, 'svg')[0];
|
|
|
|
$this->assertTrue($documentElement->hasAttribute('id'));
|
|
$this->assertTrue($documentElement->hasAttribute('poop💩'));
|
|
}
|
|
|
|
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Element::hasAttributeNS
|
|
*
|
|
* @covers \MensBeam\HTML\DOM\Attr::__set_value
|
|
* @covers \MensBeam\HTML\DOM\Collection::__construct
|
|
* @covers \MensBeam\HTML\DOM\Collection::item
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::__get_documentElement
|
|
* @covers \MensBeam\HTML\DOM\Document::createAttributeNS
|
|
* @covers \MensBeam\HTML\DOM\Document::load
|
|
* @covers \MensBeam\HTML\DOM\DocumentOrElement::getElementsByTagNameNS
|
|
* @covers \MensBeam\HTML\DOM\DocumentOrElement::validateAndExtract
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttributeNodeNS
|
|
* @covers \MensBeam\HTML\DOM\Element::setAttributeNode
|
|
* @covers \MensBeam\HTML\DOM\Element::setAttributeNodeNS
|
|
* @covers \MensBeam\HTML\DOM\Element::setAttributeNS
|
|
* @covers \MensBeam\HTML\DOM\HTMLCollection::item
|
|
* @covers \MensBeam\HTML\DOM\HTMLCollection::offsetGet
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::__get_ownerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerNode
|
|
* @covers \MensBeam\HTML\DOM\Node::hasChildNodes
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_wrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::getProtectedProperty
|
|
*/
|
|
public function testMethod_hasAttributeNS() {
|
|
$d = new Document('<!DOCTYPE html><html><head></head><body><svg xmlns="' . Node::SVG_NAMESPACE . '" xmlns:xlink="' . Node::XLINK_NAMESPACE . '" viewBox="0 0 42 42"></svg></body></html>', 'UTF-8');
|
|
$svg = $d->getElementsByTagNameNS(Node::SVG_NAMESPACE, 'svg')[0];
|
|
// Parser per the spec doesn't parse xmlns prefixed attributes except xlink, so let's add one manually instead to test coercion.
|
|
$svg->setAttributeNS(Node::XMLNS_NAMESPACE, 'xmlns:poop💩', 'https://poop💩.poop');
|
|
|
|
// xmlns attribute
|
|
$this->assertTrue($svg->hasAttributeNS(Node::XMLNS_NAMESPACE, 'xmlns'));
|
|
// xmlns xlink attribute
|
|
$this->assertTrue($svg->hasAttributeNS(Node::XMLNS_NAMESPACE, 'xlink'));
|
|
// coerced namespaced attribute
|
|
$this->assertTrue($svg->hasAttributeNS(Node::XMLNS_NAMESPACE, 'poop💩'));
|
|
// nonexistent namespaced attribute
|
|
$this->assertFalse($svg->hasAttributeNS(Node::XMLNS_NAMESPACE, 'ook'));
|
|
// empty string namespace
|
|
$this->assertTrue($svg->hasAttributeNS('', 'viewBox'));
|
|
}
|
|
|
|
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Element::hasAttributes
|
|
*
|
|
* @covers \MensBeam\HTML\DOM\Collection::__construct
|
|
* @covers \MensBeam\HTML\DOM\Collection::item
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::load
|
|
* @covers \MensBeam\HTML\DOM\DocumentOrElement::getElementsByTagNameNS
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\HTMLCollection::item
|
|
* @covers \MensBeam\HTML\DOM\HTMLCollection::offsetGet
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::hasChildNodes
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
*/
|
|
public function testMethod_hasAttributes() {
|
|
$d = new Document('<!DOCTYPE html><html><body><svg xmlns="' . Node::SVG_NAMESPACE . '" xmlns:xlink="' . Node::XLINK_NAMESPACE . '"></svg></body></html>', 'UTF-8');
|
|
$svg = $d->getElementsByTagNameNS(Node::SVG_NAMESPACE, 'svg')[0];
|
|
$this->assertTrue($svg->hasAttributes());
|
|
}
|
|
|
|
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Element::setAttribute
|
|
*
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::__get_documentElement
|
|
* @covers \MensBeam\HTML\DOM\Document::createElement
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__get_namespaceURI
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttributeNode
|
|
* @covers \MensBeam\HTML\DOM\Element::hasAttribute
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::__get_ownerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::appendChild
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerNode
|
|
* @covers \MensBeam\HTML\DOM\Node::getRootNode
|
|
* @covers \MensBeam\HTML\DOM\Node::postInsertionBugFixes
|
|
* @covers \MensBeam\HTML\DOM\Node::preInsertionBugFixes
|
|
* @covers \MensBeam\HTML\DOM\Node::preInsertionValidity
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_wrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::getProtectedProperty
|
|
*/
|
|
public function testMethod_setAttribute() {
|
|
$d = new Document();
|
|
$d->appendChild($d->createElement('html'));
|
|
$documentElement = $d->documentElement;
|
|
// Just need to test coerced attributes; everything else has been covered
|
|
// elsewhere
|
|
$documentElement->setAttribute('poop💩', 'jeff');
|
|
$this->assertTrue($documentElement->hasAttribute('poop💩'));
|
|
}
|
|
|
|
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Element::setAttribute
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::__get_documentElement
|
|
* @covers \MensBeam\HTML\DOM\Document::createElement
|
|
* @covers \MensBeam\HTML\DOM\DOMException::__construct
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::appendChild
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerNode
|
|
* @covers \MensBeam\HTML\DOM\Node::getRootNode
|
|
* @covers \MensBeam\HTML\DOM\Node::postInsertionBugFixes
|
|
* @covers \MensBeam\HTML\DOM\Node::preInsertionBugFixes
|
|
* @covers \MensBeam\HTML\DOM\Node::preInsertionValidity
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::getProtectedProperty
|
|
*/
|
|
public function testMethod_setAttribute__errors() {
|
|
$this->expectException(DOMException::class);
|
|
$this->expectExceptionCode(DOMException::INVALID_CHARACTER);
|
|
$d = new Document();
|
|
$d->appendChild($d->createElement('html'));
|
|
$d->documentElement->setAttribute('this will fail', 'fail');
|
|
}
|
|
|
|
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Element::setAttributeNode
|
|
* @covers \MensBeam\HTML\DOM\Attr::__get_localName
|
|
* @covers \MensBeam\HTML\DOM\Attr::__get_ownerElement
|
|
* @covers \MensBeam\HTML\DOM\Attr::__get_value
|
|
* @covers \MensBeam\HTML\DOM\Attr::__set_value
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::__get_documentElement
|
|
* @covers \MensBeam\HTML\DOM\Document::createAttribute
|
|
* @covers \MensBeam\HTML\DOM\Document::createElement
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__get_namespaceURI
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttribute
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttributeNode
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::__get_ownerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::appendChild
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerNode
|
|
* @covers \MensBeam\HTML\DOM\Node::getRootNode
|
|
* @covers \MensBeam\HTML\DOM\Node::postInsertionBugFixes
|
|
* @covers \MensBeam\HTML\DOM\Node::preInsertionBugFixes
|
|
* @covers \MensBeam\HTML\DOM\Node::preInsertionValidity
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_wrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::getProtectedProperty
|
|
*/
|
|
public function testMethod_setAttributeNode() {
|
|
$d = new Document();
|
|
$d->appendChild($d->createElement('html'));
|
|
$documentElement = $d->documentElement;
|
|
$attr = $d->createAttribute('poop💩');
|
|
$attr->value = 'jeff';
|
|
$documentElement->setAttributeNode($attr);
|
|
|
|
// Almost everything is covered. Just need to test same attributes and
|
|
// replacements.
|
|
$documentElement->setAttributeNode($attr);
|
|
$this->assertSame('jeff', $documentElement->getAttribute('poop💩'));
|
|
$attr = $d->createAttribute('poop💩');
|
|
$attr->value = 'jeff';
|
|
$documentElement->setAttributeNode($attr);
|
|
$this->assertSame('jeff', $documentElement->getAttribute('poop💩'));
|
|
}
|
|
|
|
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Element::setAttributeNode
|
|
*
|
|
* @covers \MensBeam\HTML\DOM\Attr::__get_localName
|
|
* @covers \MensBeam\HTML\DOM\Attr::__get_ownerElement
|
|
* @covers \MensBeam\HTML\DOM\Attr::__set_value
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::__get_documentElement
|
|
* @covers \MensBeam\HTML\DOM\Document::createAttribute
|
|
* @covers \MensBeam\HTML\DOM\Document::createElement
|
|
* @covers \MensBeam\HTML\DOM\DOMException::__construct
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__get_namespaceURI
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttributeNode
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::__get_ownerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::appendChild
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerNode
|
|
* @covers \MensBeam\HTML\DOM\Node::getRootNode
|
|
* @covers \MensBeam\HTML\DOM\Node::postInsertionBugFixes
|
|
* @covers \MensBeam\HTML\DOM\Node::preInsertionBugFixes
|
|
* @covers \MensBeam\HTML\DOM\Node::preInsertionValidity
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_wrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::getProtectedProperty
|
|
*/
|
|
public function testMethod_setAttributeNode__errors() {
|
|
$this->expectException(DOMException::class);
|
|
$this->expectExceptionCode(DOMException::IN_USE_ATTRIBUTE);
|
|
$d = new Document();
|
|
$documentElement = $d->appendChild($d->createElement('html'));
|
|
$body = $documentElement->appendChild($d->createElement('body'));
|
|
$attr = $d->createAttribute('ook');
|
|
$attr->value = 'eek';
|
|
$body->setAttributeNode($attr);
|
|
$documentElement->setAttributeNode($attr);
|
|
}
|
|
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Element::setAttributeNS
|
|
*
|
|
* @covers \MensBeam\HTML\DOM\Attr::__get_value
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::__get_documentElement
|
|
* @covers \MensBeam\HTML\DOM\Document::createElement
|
|
* @covers \MensBeam\HTML\DOM\DocumentOrElement::validateAndExtract
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttributeNodeNS
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttributeNS
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::appendChild
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerNode
|
|
* @covers \MensBeam\HTML\DOM\Node::getRootNode
|
|
* @covers \MensBeam\HTML\DOM\Node::postInsertionBugFixes
|
|
* @covers \MensBeam\HTML\DOM\Node::preInsertionBugFixes
|
|
* @covers \MensBeam\HTML\DOM\Node::preInsertionValidity
|
|
* @covers \MensBeam\HTML\DOM\NonElementParentNode::getElementById
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::getProtectedProperty
|
|
*/
|
|
public function testMethod_setAttributeNS() {
|
|
$d = new Document();
|
|
$d->appendChild($d->createElement('html'));
|
|
$documentElement = $d->documentElement;
|
|
|
|
// Just need to test setting of a bullshit namespaced attribute and id
|
|
// attribute; everything else is covered already.
|
|
$documentElement->setAttributeNS('https://poop💩.poop💩', 'poop💩:poop💩', 'jeff');
|
|
$this->assertSame('jeff', $documentElement->getAttributeNS('https://poop💩.poop💩', 'poop💩'));
|
|
$documentElement->setAttributeNS(null, 'id', 'ook');
|
|
$this->assertSame($documentElement, $d->getElementById('ook'));
|
|
}
|
|
|
|
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Element::__get_attributes
|
|
*
|
|
* @covers \MensBeam\HTML\DOM\Attr::__get_value
|
|
* @covers \MensBeam\HTML\DOM\Collection::__get_length
|
|
* @covers \MensBeam\HTML\DOM\Collection::count
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::__get_documentElement
|
|
* @covers \MensBeam\HTML\DOM\Document::load
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__get_namespaceURI
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttribute
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttributeNode
|
|
* @covers \MensBeam\HTML\DOM\NamedNodeMap::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::__get_ownerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::hasChildNodes
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_wrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
*/
|
|
public function testProperty_attributes() {
|
|
$d = new Document('<!DOCTYPE html><html id="ook" class="eek" ack="ack" foo="foo" bar="bar" xmlns="' . Node::HTML_NAMESPACE . '"></html>', 'UTF-8');
|
|
$documentElement = $d->documentElement;
|
|
$this->assertEquals(6, $documentElement->attributes->length);
|
|
$this->assertSame(Node::HTML_NAMESPACE, $documentElement->getAttribute('xmlns'));
|
|
}
|
|
|
|
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Element::__get_classList
|
|
*
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::__get_documentElement
|
|
* @covers \MensBeam\HTML\DOM\Document::load
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\DOMTokenList::__construct
|
|
* @covers \MensBeam\HTML\DOM\DOMTokenList::__get_length
|
|
* @covers \MensBeam\HTML\DOM\DOMTokenList::parseOrderedSet
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::hasChildNodes
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::getProtectedProperty
|
|
*/
|
|
public function testProperty_classList() {
|
|
$d = new Document('<!DOCTYPE html><html class="ook eek ack foo bar"></html>', 'UTF-8');
|
|
$documentElement = $d->documentElement;
|
|
$this->assertEquals(5, $documentElement->classList->length);
|
|
}
|
|
|
|
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Element::__get_className
|
|
* @covers \MensBeam\HTML\DOM\Element::__set_className
|
|
*
|
|
* @covers \MensBeam\HTML\DOM\Attr::__get_value
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::createElement
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__get_namespaceURI
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttribute
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttributeNode
|
|
* @covers \MensBeam\HTML\DOM\Element::setAttribute
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::__get_ownerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::appendChild
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerNode
|
|
* @covers \MensBeam\HTML\DOM\Node::getRootNode
|
|
* @covers \MensBeam\HTML\DOM\Node::postInsertionBugFixes
|
|
* @covers \MensBeam\HTML\DOM\Node::preInsertionBugFixes
|
|
* @covers \MensBeam\HTML\DOM\Node::preInsertionValidity
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_wrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::getProtectedProperty
|
|
*/
|
|
public function testProperty_className() {
|
|
$d = new Document();
|
|
$documentElement = $d->appendChild($d->createElement('html'));
|
|
$documentElement->className = 'ook';
|
|
$this->assertSame('ook', $documentElement->className);
|
|
}
|
|
|
|
|
|
/**
|
|
* @covers \MensBeam\HTML\DOM\Element::__get_id
|
|
* @covers \MensBeam\HTML\DOM\Element::__set_id
|
|
*
|
|
* @covers \MensBeam\HTML\DOM\Attr::__get_value
|
|
* @covers \MensBeam\HTML\DOM\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Document::createElement
|
|
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__construct
|
|
* @covers \MensBeam\HTML\DOM\Element::__get_namespaceURI
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttribute
|
|
* @covers \MensBeam\HTML\DOM\Element::getAttributeNode
|
|
* @covers \MensBeam\HTML\DOM\Element::setAttribute
|
|
* @covers \MensBeam\HTML\DOM\Node::__construct
|
|
* @covers \MensBeam\HTML\DOM\Node::__get_ownerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::appendChild
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
|
|
* @covers \MensBeam\HTML\DOM\Node::getInnerNode
|
|
* @covers \MensBeam\HTML\DOM\Node::getRootNode
|
|
* @covers \MensBeam\HTML\DOM\Node::postInsertionBugFixes
|
|
* @covers \MensBeam\HTML\DOM\Node::preInsertionBugFixes
|
|
* @covers \MensBeam\HTML\DOM\Node::preInsertionValidity
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_wrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
|
|
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
|
|
* @covers \MensBeam\HTML\DOM\Inner\Reflection::getProtectedProperty
|
|
*/
|
|
public function testProperty_id() {
|
|
$d = new Document();
|
|
$documentElement = $d->appendChild($d->createElement('html'));
|
|
$documentElement->id = 'ook';
|
|
$this->assertSame('ook', $documentElement->id);
|
|
}
|
|
}
|