Skip to content

Commit 2348e42

Browse files
author
Greg Bowler
authored
Jelmergu's Element::__debugInfo (#226)
* Added test to raise Element coverage to 100% Closes #84 * Add Element::__debugInfo Closes #147 * Edit ElementTest::testDebugInfoSelect Change Element::__debugInfo to just take raw values instead of processing nodeValue and innerHTML * Convert space to tabs Signed-off-by: Jelmergu <[email protected]> * Apply styleguide
1 parent c232d5d commit 2348e42

File tree

3 files changed

+140
-48
lines changed

3 files changed

+140
-48
lines changed

src/Element.php

+21-4
Original file line numberDiff line numberDiff line change
@@ -269,13 +269,16 @@ public function prop_set_selected(bool $selected):bool {
269269
}
270270

271271
public function prop_get_form() {
272-
if (in_array($this->tagName, self::FORM_CONTROL_ELEMENTS)) {
273-
if ($this->tagName === "input" && $this->getAttribute("type") === "image") {
272+
if(in_array($this->tagName, self::FORM_CONTROL_ELEMENTS)) {
273+
if($this->tagName === "input"
274+
&& $this->getAttribute("type") === "image") {
274275
return null;
275276
}
276277

277-
if ($this->hasAttribute("form")) {
278-
return $this->getRootDocument()->getElementById($this->getAttribute("form"));
278+
if($this->hasAttribute("form")) {
279+
return $this->getRootDocument()->getElementById(
280+
$this->getAttribute("form")
281+
);
279282
}
280283
else {
281284
return $this->closest('form');
@@ -372,4 +375,18 @@ private function value_get_input() {
372375
public function isSelectOptionSelected(Element $option) {
373376
return $option->hasAttribute('selected') && $option->getAttribute('selected');
374377
}
378+
379+
public function __debugInfo() {
380+
return [
381+
'nodeName' => $this->nodeName,
382+
'nodeValue' => $this->nodeValue,
383+
'innerHTML' => $this->innerHTML,
384+
"class" => $this->className,
385+
"id" => $this->id,
386+
"name" => $this->getAttribute("name"),
387+
"type" => $this->getAttribute("type"),
388+
"src" => $this->getAttribute("src"),
389+
"href" => $this->getAttribute("href"),
390+
];
391+
}
375392
}

src/TokenList.php

+4
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,8 @@ public function toggle(string $token):bool {
118118

119119
return true;
120120
}
121+
122+
public function __toString() {
123+
return join(" ", $this->tokenArray);
124+
}
121125
}

test/unit/ElementTest.php

+115-44
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ public function testInnerHTMLWithJson() {
160160
"__RATING_COUNT__",
161161
], [
162162
$ratingValue,
163-
$ratingCount
163+
$ratingCount,
164164
], $script->innerHTML);
165165

166166
self::assertStringContainsString(
@@ -414,24 +414,24 @@ public function testFormControlElementReturnsNullIfItDoesNotHaveFormAttributeAnd
414414
$document = new HTMLDocument(Helper::HTML_FORM_PROPERTY);
415415

416416
$input = $document->getElementById('f11');
417-
self::assertEquals(NULL, $input->form);
417+
self::assertEquals(null, $input->form);
418418
}
419419

420420
public function testNonControlElementRetursNullAsFormProperty() {
421421
$document = new HTMLDocument(Helper::HTML_FORM_PROPERTY);
422422

423423
$span = $document->getElementById('non_form_control_1');
424-
self::assertEquals(NULL, $span->form);
424+
self::assertEquals(null, $span->form);
425425

426426
$span = $document->getElementById('non_form_control_2');
427-
self::assertEquals(NULL, $span->form);
427+
self::assertEquals(null, $span->form);
428428
}
429429

430430
public function testInputElementWithTypeImagetReturnsNullAsFormProperty() {
431431
$document = new HTMLDocument(Helper::HTML_FORM_PROPERTY);
432432

433433
$input = $document->getElementById('f12');
434-
self::assertEquals(NULL, $input->form);
434+
self::assertEquals(null, $input->form);
435435
}
436436

437437
public function testPropertyAttributeCorrelationFormEncoding() {
@@ -512,58 +512,129 @@ public function testOptionValueGetSet() {
512512
}
513513

514514
public function testSetClassNameProperty() {
515-
$document = new HTMLDocument();
516-
$element = $document->createElement("div");
515+
$document = new HTMLDocument();
516+
$element = $document->createElement("div");
517517

518-
$element->className = "test";
519-
self::assertEquals("test", $element->getAttribute("class"));
520-
}
518+
$element->className = "test";
519+
self::assertEquals("test", $element->getAttribute("class"));
520+
}
521521

522-
public function testSetIdProperty() {
523-
$document = new HTMLDocument();
524-
$element = $document->createElement("div");
522+
public function testSetIdProperty() {
523+
$document = new HTMLDocument();
524+
$element = $document->createElement("div");
525525

526-
$element->id = "test";
527-
self::assertEquals("test", $element->id);
528-
}
526+
$element->id = "test";
527+
self::assertEquals("test", $element->id);
528+
}
529529

530-
public function testSetValueOnButton() {
531-
$document = new HTMLDocument();
532-
$element = $document->createElement("button");
530+
public function testSetValueOnButton() {
531+
$document = new HTMLDocument();
532+
$element = $document->createElement("button");
533533

534-
$element->value = "test";
535-
self::assertEquals("test", $element->value);
536-
}
534+
$element->value = "test";
535+
self::assertEquals("test", $element->value);
536+
}
537537

538-
public function testSetOuterHTMLChangesElementInDocument() {
539-
$document = new HTMLDocument(Helper::HTML);
540-
$element = $document->querySelector("h1");
541-
$element->outerHTML = "<p>Hello!</p>";
538+
public function testSetOuterHTMLChangesElementInDocument() {
539+
$document = new HTMLDocument(Helper::HTML);
540+
$element = $document->querySelector("h1");
541+
$element->outerHTML = "<p>Hello!</p>";
542542

543-
$newElement = $document->querySelector("p");
543+
$newElement = $document->querySelector("p");
544544

545-
self::assertNull($document->querySelector("h1"));
546-
self::assertNotNull($newElement);
547-
self::assertEquals("Hello!", $newElement->innerHTML);
548-
self::assertStringContainsString("<p>", $newElement->outerHTML);
549-
}
545+
self::assertNull($document->querySelector("h1"));
546+
self::assertNotNull($newElement);
547+
self::assertEquals("Hello!", $newElement->innerHTML);
548+
self::assertStringContainsString("<p>", $newElement->outerHTML);
549+
}
550550

551-
public function testGetValueAsDateDoesNothingOnNonInputElements() {
552-
$document = new HTMLDocument(Helper::HTML_SELECTS);
553-
$element = $document->querySelector("select");
551+
public function testGetValueAsDateDoesNothingOnNonInputElements() {
552+
$document = new HTMLDocument(Helper::HTML_SELECTS);
553+
$element = $document->querySelector("select");
554554

555-
$sut = $element->valueAsDate;
555+
$sut = $element->valueAsDate;
556556

557-
self::assertNull($sut);
558-
}
557+
self::assertNull($sut);
558+
}
559559

560-
public function testGetValueAsNumberDoesNothingOnNonInputElements() {
561-
$document = new HTMLDocument(Helper::HTML_SELECTS);
562-
$element = $document->querySelector("select");
560+
public function testGetValueAsNumberDoesNothingOnNonInputElements() {
561+
$document = new HTMLDocument(Helper::HTML_SELECTS);
562+
$element = $document->querySelector("select");
563563

564-
$sut = $element->valueAsNumber;
564+
$sut = $element->valueAsNumber;
565565

566-
self::assertNull($sut);
567-
}
566+
self::assertNull($sut);
567+
}
568568

569+
public function testDebugInfoSelect() {
570+
$document = new HTMLDocument(Helper::HTML_SELECTS);
571+
$element = $document->querySelector("select");
572+
573+
$sut = $element->__debugInfo();
574+
575+
$expected = [
576+
'nodeName' => "select",
577+
'nodeValue' => "ZeroOneTwoThreeFourFive",
578+
'innerHTML' => '<option value="0">Zero</option><option value="1">One</option><option value="2">Two</option><option value="3">Three</option><option value="4">Four</option><option value="5">Five</option>',
579+
"class" => null,
580+
"name" => "from",
581+
"type" => null,
582+
"id" => null,
583+
"src" => null,
584+
"href" => null
585+
];
586+
587+
self::assertEquals($expected["nodeName"], $sut["nodeName"]);
588+
self::assertEquals($expected["nodeValue"], trim(strtr($sut["nodeValue"], ["\t" => '', "\r" => '', "\n" => ''])));
589+
self::assertEquals($expected["innerHTML"], trim(strtr($sut["innerHTML"], ["\t" => '', "\r" => '', "\n" => ''])));
590+
self::assertEquals($expected['class'], $sut['class']);
591+
self::assertEquals($expected["name"], $sut["name"]);
592+
self::assertEquals($expected["type"], $sut["type"]);
593+
self::assertEquals($expected["id"], $sut["id"]);
594+
self::assertEquals($expected["src"], $sut["src"]);
595+
self::assertEquals($expected["href"], $sut["href"]);
596+
}
597+
598+
public function testDebugInfoInput() {
599+
$document = new HTMLDocument(Helper::HTML_MORE);
600+
$element = $document->querySelector("input[name='who']");
601+
602+
$sut = $element->__debugInfo();
603+
604+
$expected = [
605+
'nodeName' => "input",
606+
'nodeValue' => "",
607+
'innerHTML' => "",
608+
"class" => 'c1 c3',
609+
"name" => "who",
610+
"type" => null,
611+
"id" => null,
612+
"src" => null,
613+
"href" => null,
614+
615+
];
616+
// die(var_dump($sut));
617+
self::assertEquals($expected, $sut);
618+
}
619+
620+
public function testDebugInfoAnchor() {
621+
$document = new HTMLDocument(Helper::HTML_TEXT);
622+
$element = $document->querySelector("a");
623+
624+
$sut = $element->__debugInfo();
625+
626+
$expected = [
627+
'nodeName' => "a",
628+
'nodeValue' => "casting a\n ballot",
629+
'innerHTML' => "casting a\n ballot",
630+
"class" => null,
631+
"name" => null,
632+
"type" => null,
633+
"id" => null,
634+
"src" => null,
635+
"href" => "http://en.wikipedia.org/wiki/Absentee_ballot",
636+
637+
];
638+
self::assertEquals($expected, $sut);
639+
}
569640
}

0 commit comments

Comments
 (0)