1--TEST--
2DOM\HTMLDocument::createFromString()/createFromFile() with LIBXML_HTML_NOIMPLIED
3--EXTENSIONS--
4dom
5--FILE--
6<?php
7function test(string $html) {
8    echo "Testing: $html\n";
9    $dom = DOM\HTMLDocument::createFromString($html, LIBXML_HTML_NOIMPLIED | LIBXML_NOERROR);
10    $output = $dom->saveHTML();
11    echo $output, "\n";
12
13    // Also test the loadHTMLFile variation. We won't print out the result, just checking the result is the same.
14    $temp = fopen(__DIR__."/DOM_HTMLDocument_loadHTML_LIBXML_HTML_NOIMPLIED_input.tmp", "w");
15    fwrite($temp, $html);
16    fclose($temp);
17    $dom = DOM\HTMLDocument::createFromFile(__DIR__."/DOM_HTMLDocument_loadHTML_LIBXML_HTML_NOIMPLIED_input.tmp", LIBXML_HTML_NOIMPLIED | LIBXML_NOERROR);
18    var_dump($output === $dom->saveHTML());
19}
20
21echo "--- Missing html, head, body ---\n";
22test("");
23test("foobarbaz");
24test("<p>foo</p>");
25echo "--- Missing html, head ---\n";
26test("<body><p>foo</p></body>");
27test("<title>x</title><p>foo</p>");
28echo "--- Missing html, body ---\n";
29test("<!-- bar --><head><title>x</title><!-- foo --></head><p>foo</p><!-- bar -->");
30echo "--- Missing html ---\n";
31test("<head><title>x</title></head><body><p>foo</p></body>");
32echo "--- Missing head, body ---\n";
33test("<html>foobar</html>");
34test("<html><!-- foo --><title>a</title><p>foo</p></html><!-- bar -->");
35echo "--- Missing head ---\n";
36test("<html><!-- foo --><body>hi</body></html>");
37echo "--- Missing nothing ---\n";
38test("<html><head><title>x</title></head><!-- foo --><body><p>foo</p></body></html>");
39echo "--- Malformed document ---\n";
40test("<!-- start --><body><head><html>foo</html></head></body><!-- end -->");
41?>
42--CLEAN--
43<?php
44@unlink(__DIR__."/DOM_HTMLDocument_loadHTML_LIBXML_HTML_NOIMPLIED_input.tmp");
45?>
46--EXPECT--
47--- Missing html, head, body ---
48Testing:
49
50bool(true)
51Testing: foobarbaz
52foobarbaz
53bool(true)
54Testing: <p>foo</p>
55<p>foo</p>
56bool(true)
57--- Missing html, head ---
58Testing: <body><p>foo</p></body>
59<body><p>foo</p></body>
60bool(true)
61Testing: <title>x</title><p>foo</p>
62<title>x</title><p>foo</p>
63bool(true)
64--- Missing html, body ---
65Testing: <!-- bar --><head><title>x</title><!-- foo --></head><p>foo</p><!-- bar -->
66<!-- bar --><head><title>x</title><!-- foo --></head><p>foo</p><!-- bar -->
67bool(true)
68--- Missing html ---
69Testing: <head><title>x</title></head><body><p>foo</p></body>
70<head><title>x</title></head><body><p>foo</p></body>
71bool(true)
72--- Missing head, body ---
73Testing: <html>foobar</html>
74<html>foobar</html>
75bool(true)
76Testing: <html><!-- foo --><title>a</title><p>foo</p></html><!-- bar -->
77<html><!-- foo --><title>a</title><p>foo</p></html><!-- bar -->
78bool(true)
79--- Missing head ---
80Testing: <html><!-- foo --><body>hi</body></html>
81<html><!-- foo --><body>hi</body></html>
82bool(true)
83--- Missing nothing ---
84Testing: <html><head><title>x</title></head><!-- foo --><body><p>foo</p></body></html>
85<html><head><title>x</title></head><!-- foo --><body><p>foo</p></body></html>
86bool(true)
87--- Malformed document ---
88Testing: <!-- start --><body><head><html>foo</html></head></body><!-- end -->
89<!-- start --><body>foo</body><!-- end -->
90bool(true)
91