1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
<?php
function test_helper(DOM\ParentNode $dom, string $selector, bool $only_name = false)
{
echo "--- Selector: $selector ---\n";
$all = $dom->querySelectorAll($selector);
$single = $dom->querySelector($selector);
if ((count($all) === 0 && $single !== null) || ($all[0] !== $single)) {
throw new Exception('Mismatch in querySelector and querySelectorAll');
}
$list = [];
foreach ($all as $node) {
$list[] = $node;
if ($only_name) {
echo $node->nodeName, "\n";
continue;
}
echo $dom->saveXML($node), "\n";
}
// If the element is in the list, then it must match, otherwise it must not
// This loops over all the elements in the document and checks them
foreach ($dom->querySelectorAll('*') as $node) {
if (in_array($node, $list, true) !== $node->matches($selector)) {
var_dump($node, $selector, in_array($node, $list, true), $node->matches($selector));
echo $dom->saveXML($node), "\n";
throw new Exception('Bug in Element::matches()');
}
}
}
function test_failure(DOM\ParentNode $dom, string $selector)
{
echo "--- Selector: $selector ---\n";
try {
var_dump(count($dom->querySelectorAll($selector)));
} catch (DOMException $e) {
echo "Code ", $e->getCode(), " ", $e->getMessage(), "\n";
}
}
|