<?php
/**
* SimpleXMLElement Introspection
*/
error_reporting(~0);
$xml = '<document>
<child>
give
<grandchild a1="v1" a2="v2">
me
</grandchild>
<grandchild>
more
</grandchild>
sugar.
</child>
<child>
</child>
<single/>
</document>
';
$xml = strtr($xml, array("\r" => "")); // fix for 3v4l.org using CRLF input instead of LF file-format on disk @ home
$simple = new SimpleXMLElement($xml);
/**
* @param SimpleXMLElement $element
* @return string
*/
function simplexml_get_xml_without_declaration(SimpleXMLElement $element)
{
list($elementNode) = $element->xpath('.');
list($documentElement) = $element->xpath('/*');
$xml = $element->asXML();
if ($elementNode == $element and $documentElement == $element) {
list(, $xml) = explode("\n", $xml, 2);
}
return $xml;
}
$documentElement = $simple;
$attributeList = $simple->child->grandchild->attributes();
$attributeListEmpty = $simple->child->attributes();
$attribute = $simple->child->grandchild['a1'];
$suite = array(
'get_xml_nodecl' => array('simplexml_get_xml_without_declaration', array(
array($xml, $simple),
array($simple->child->asXML(), $simple->child),
)),
);
echo "Running tests with LIBXML ", LIBXML_DOTTED_VERSION, ":\n";
run_test_suite($suite);
function run_test_suite(array $testsuite)
{
foreach ($testsuite as $caselabel => $testcasedef) {
list($callback, $testcase) = $testcasedef;
$stats[] = run_testcase($testcase, $callback, $caselabel);
}
echo "\n";
$stat['tests'] = 0;
$stat['failures'] = 0;
foreach ($stats as $singled) {
$stat['tests'] += $singled['tests'];
$stat['failures'] += $singled['failures'];
echo $singled['messages'];
}
printf("Done %d tests with %d failures.", $stat['tests'], $stat['failures']);
}
function run_testcase(array $testcase, $callback, $label = null)
{
if ($label === null) $label = $callback;
$stats['tests'] = 0;
$stats['failures'] = 0;
$messages = '';
foreach ($testcase as $i => $test) {
list($expected, $subject, $testlabel) = $test + array(2 => "#$i");
$labeltest = $label . ' ' . $testlabel;
ob_start();
$result = run_test($expected, $subject, $callback, $labeltest);
$buffer = ob_get_clean();
echo $result ? '.' : 'F';
if ($buffer) {
$messages .= sprintf("### %s ###\n", $labeltest);
$messages .= $buffer;
}
$stats['tests']++;
if (!$result) $stats['failures']++;
}
return $stats + array('messages' => $messages);
}
function run_test($expected, $subject, $callback, $label)
{
$actual = call_user_func($callback, $subject);
if ($expected instanceof SimpleXMLElement and $actual instanceof SimpleXMLElement) {
$result = $actual == $expected;
} else {
$result = $actual === $expected;
}
if (!$result) {
$extra = '';
if ($subject instanceof SimpleXMLElement) {
$extra = sprintf(' with %s', rtrim($subject->asXML()));
}
printf("FAILED to test %s%s.\n", $label, $extra);
echo 'expected: ', var_dump($expected);
echo 'actual:', var_dump($actual);
}
return $result;
}
- Output for git.master, git.master_jit, rfc.property-hooks
- Running tests with LIBXML 2.9.4:
..
Done 2 tests with 0 failures.
This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.
Active branches
Archived branches
Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page
preferences:
39.51 ms | 401 KiB | 8 Q