createElementNS($nsIn, $nameIn); $this->assertSame($nsOut, $e->namespaceURI); $this->assertSame($local, $e->localName); $this->assertSame($prefix, $e->prefix); } public function provideNamespacedElements(): iterable { return [ [null, "test", null, "test", ""], [null, "test:test", null, "testU00003Atest", ""], ["http://www.w3.org/2000/svg", "svg", "http://www.w3.org/2000/svg", "svg", ""], ["http://www.w3.org/2000/svg", "svg:svg", "http://www.w3.org/2000/svg", "svg", "svg"], ["fake_ns", "test:test", "fake_ns", "test", "test"], ["fake_ns", "test:test:test", "fake_ns", "testU00003Atest", "test"], ["fake_ns", "te st:test", "fake_ns", "test", "teU000020st"], [null, "9", null, "U000039", ""], ["http://www.w3.org/1999/xhtml", "test", null, "test", ""], ["http://www.w3.org/1999/xhtml", "TEST", null, "test", ""], [null, "TEST", null, "test", ""], ["fake_ns", "TEST", "fake_ns", "TEST", ""], ["http://www.w3.org/2000/svg", "TEST", "http://www.w3.org/2000/svg", "TEST", ""], ["http://www.w3.org/1998/Math/MathML", "TEST", "http://www.w3.org/1998/Math/MathML", "TEST", ""], ]; } /** * @dataProvider provideBareElements * @covers \MensBeam\HTML\Document::createElement */ public function testCreateBareElements(string $nameIn, $nameOut): void { $d = new Document; $e = $d->createElement($nameIn); $this->assertNull($e->namespaceURI); $this->assertSame("", $e->prefix); $this->assertSame($nameOut, $e->localName); } public function provideBareElements(): iterable { return [ ["test", "test"], ["test:test", "testU00003Atest"], ["9", "U000039"], ["TEST", "test"], ]; } /** @covers \MensBeam\HTML\Document::createElementNS */ public function testCreateTemplateElements(): void { $d = new Document; $t = $d->createElement("template"); $this->assertInstanceOf(TemplateElement::class, $t); $this->assertNotNull($t->ownerDocument); $t = $d->createElement("TEMPLATE"); $this->assertInstanceOf(TemplateElement::class, $t); $this->assertNotNull($t->ownerDocument); $t = $d->createElementNS(null, "template"); $this->assertInstanceOf(TemplateElement::class, $t); $this->assertNotNull($t->ownerDocument); $t = $d->createElementNS(null, "TEMPLATE"); $this->assertInstanceOf(TemplateElement::class, $t); $this->assertNotNull($t->ownerDocument); $t = $d->createElementNS("http://www.w3.org/1999/xhtml", "template"); $this->assertInstanceOf(TemplateElement::class, $t); $this->assertNotNull($t->ownerDocument); $t = $d->createElementNS("http://www.w3.org/1999/xhtml", "TEMPLATE"); $this->assertInstanceOf(TemplateElement::class, $t); $this->assertNotNull($t->ownerDocument); } /** * @dataProvider provideNamespacedAttributeCreations * @covers \MensBeam\HTML\Document::createAttributeNS */ public function testCreateNamespacedAttributes(?string $nsIn, string $nameIn, string $local, string $prefix): void { $d = new Document; $d->appendChild($d->createElement("html")); $a = $d->createAttributeNS($nsIn, $nameIn); $this->assertSame($local, $a->localName); $this->assertSame($nsIn, $a->namespaceURI); $this->assertSame($prefix, $a->prefix); } public function provideNamespacedAttributeCreations(): iterable { return [ [null, "test", "test", ""], [null, "test:test", "testU00003Atest", ""], [null, "test", "test", ""], [null, "TEST:TEST", "TESTU00003ATEST", ""], ["fake_ns", "test", "test", ""], ["fake_ns", "test:test", "test", "test"], ["fake_ns", "TEST:TEST", "TEST", "TEST"], ["fake_ns", "test:test:test", "testU00003Atest", "test"], ["fake_ns", "TEST:TEST:TEST", "TESTU00003ATEST", "TEST"], ]; } /** * @dataProvider provideBareAttributeCreations * @covers \MensBeam\HTML\Document::createAttribute */ public function testCreateBareAttributes(string $nameIn, string $nameOut): void { $d = new Document; $d->appendChild($d->createElement("html")); $a = $d->createAttribute($nameIn); $this->assertSame($nameOut, $a->name); $this->assertNull($a->namespaceURI); } public function provideBareAttributeCreations(): iterable { return [ ["test", "test"], ["test:test", "testU00003Atest"], ["TEST", "TEST"], ["TEST:TEST", "TESTU00003ATEST"], ]; } /** * @dataProvider provideNamespacedAttributeSettings * @covers \MensBeam\HTML\Element::setAttributeNS */ public function testSetNamespoacedAttributes(?string $elementNS, ?string $attrNS, string $nameIn, string $nameOut): void { $d = new Document; $e = $d->createElementNS($elementNS, "test"); $this->assertSame(0, $e->attributes->length); $e->setAttributeNS($attrNS, $nameIn, "test"); $this->assertSame(1, $e->attributes->length); $a = $e->attributes[0]; $this->assertSame($nameOut, $a->nodeName); $this->assertSame($attrNS, $a->namespaceURI); } public function provideNamespacedAttributeSettings(): iterable { return [ [null, null, "test", "test"], [null, null, "TEST", "test"], ["http://www.w3.org/1999/xhtml", null, "test", "test"], ["http://www.w3.org/1999/xhtml", null, "TEST", "test"], [null, null, "test:test", "testU00003Atest"], [null, null, "TEST:TEST", "testU00003Atest"], ["http://www.w3.org/1999/xhtml", null, "test:test", "testU00003Atest"], ["http://www.w3.org/1999/xhtml", null, "TEST:TEST", "testU00003Atest"], [null, "http://www.w3.org/1999/xhtml", "test:test", "test:test"], [null, "http://www.w3.org/1999/xhtml", "TEST:TEST", "TEST:TEST"], ["http://www.w3.org/1998/Math/MathML", null, "test", "test"], ["http://www.w3.org/1998/Math/MathML", null, "TEST", "TEST"], [null, "http://www.w3.org/2000/xmlns/", "xmlns:xlink", "xmlns:xlink"], [null, "http://www.w3.org/2000/xmlns/", "xmlns:XLINK", "xmlns:XLINK"], [null, "fake_ns", "test:test:test", "test:testU00003Atest"], [null, "fake_ns", "TEST:TEST:TEST", "TEST:TESTU00003ATEST"], ]; } /** * @dataProvider provideBareAttributeSettings * @covers \MensBeam\HTML\Element::setAttribute */ public function testSetBareAttributes(?string $elementNS, string $nameIn, string $nameOut): void { $d = new Document; $e = $d->createElementNS($elementNS, "test"); $this->assertSame(0, $e->attributes->length); $e->setAttribute($nameIn, "test"); $this->assertSame(1, $e->attributes->length); $a = $e->attributes[0]; $this->assertSame($nameOut, $a->nodeName); $this->assertNull($a->namespaceURI); } public function provideBareAttributeSettings(): iterable { return [ [null, "test", "test"], [null, "TEST", "test"], ["http://www.w3.org/1999/xhtml", "test", "test"], ["http://www.w3.org/1999/xhtml", "TEST", "test"], [null, "test:test", "testU00003Atest"], [null, "TEST:TEST", "testU00003Atest"], ["http://www.w3.org/1999/xhtml", "test:test", "testU00003Atest"], ["http://www.w3.org/1999/xhtml", "TEST:TEST", "testU00003Atest"], ["http://www.w3.org/1998/Math/MathML", "test", "test"], ["http://www.w3.org/1998/Math/MathML", "TEST", "TEST"], ]; } /** * @dataProvider provideAttributeNodeSettings * @covers \MensBeam\HTML\Element::setAttributeNode * @covers \MensBeam\HTML\Element::setAttributeNodeNS */ public function testSetAttributeNodes(bool $ns, ?string $elementNS, ?string $attrNS, string $name): void { $d = new Document; $e = $d->createElementNS($elementNS, "test"); $d->appendChild($e); $this->assertSame(0, $e->attributes->length); $a = $d->createAttributeNS($attrNS, $name); if ($ns) { $e->setAttributeNodeNS($a); } else { $e->setAttributeNode($a); } $this->assertSame(1, $e->attributes->length); $a = $e->attributes[0]; $this->assertSame($name, $a->nodeName); $this->assertSame($attrNS, $a->namespaceURI); } public function provideAttributeNodeSettings(): iterable { return [ [true, null, null, "test"], [true, null, null, "TEST"], [true, "http://www.w3.org/1999/xhtml", null, "test"], [true, "http://www.w3.org/1999/xhtml", null, "TEST"], [true, null, null, "testU00003Atest"], [true, null, null, "TESTU00003ATEST"], [true, "http://www.w3.org/1999/xhtml", null, "testU00003Atest"], [true, "http://www.w3.org/1999/xhtml", null, "TESTU00003ATEST"], [true, null, "http://www.w3.org/1999/xhtml", "test:test"], [true, null, "http://www.w3.org/1999/xhtml", "TEST:TEST"], [true, "http://www.w3.org/1998/Math/MathML", null, "test"], [true, "http://www.w3.org/1998/Math/MathML", null, "TEST"], [true, null, "http://www.w3.org/2000/xmlns/", "xmlns:xlink"], [true, null, "http://www.w3.org/2000/xmlns/", "xmlns:XLINK"], [true, null, "fake_ns", "test:testU00003Atest"], [true, null, "fake_ns", "TEST:TESTU00003ATEST"], [false, null, null, "test"], [false, null, null, "TEST"], [false, "http://www.w3.org/1999/xhtml", null, "test"], [false, "http://www.w3.org/1999/xhtml", null, "TEST"], [false, null, null, "testU00003Atest"], [false, null, null, "TESTU00003ATEST"], [false, "http://www.w3.org/1999/xhtml", null, "testU00003Atest"], [false, "http://www.w3.org/1999/xhtml", null, "TESTU00003ATEST"], [false, null, "http://www.w3.org/1999/xhtml", "test:test"], [false, null, "http://www.w3.org/1999/xhtml", "TEST:TEST"], [false, "http://www.w3.org/1998/Math/MathML", null, "test"], [false, "http://www.w3.org/1998/Math/MathML", null, "TEST"], [false, null, "http://www.w3.org/2000/xmlns/", "xmlns:xlink"], [false, null, "http://www.w3.org/2000/xmlns/", "xmlns:XLINK"], [false, null, "fake_ns", "test:testU00003Atest"], [false, null, "fake_ns", "TEST:TESTU00003ATEST"], ]; } }