ZF-4010: assertQueryContentContains() crashes PHP on attribute value query




The problem isusing @value -- this syntax is not supported by Zend_Dom_Query. You can query for the value of an arbitrary attribute using some alternate CSS style notation; please see… for more information.

Currently, there is no support for finding simply the existence of an arbitrary attribute, only for testing against the value of an arbitrary attribute. If you would like the former functionality (existence of arbitrary attribute), please open a separate feature request.

Hi Matthew,

sorry, but I can't follow your comment... I'm trying to test against the value of an attribute (the {{value}}-Attribute of an {{}}-Tag).

The problem obviously is not {{Zend_Dom_Query}} as the following works as expected:

$query=new Zend_Dom_Query($string); // $string from example above
$result=$query->query('input#fax-0 @value');
foreach ($result as $r) {

{{Zend_Dom_Query}} translates this into {{//input[@id='fax-0']//@value}} and gives the following output

object(Zend_Dom_Query_Result)#3 (7) {
  string(18) "input#fax-0 @value"
  object(DOMDocument)#2 (0) {
  object(DOMNodeList)#5 (0) {
  string(28) "//input[@id='fax-0']//@value"
string(13) "(1234) 567890"

This is exactly what I want. But when using the query from above in a {{Zend_Test_PHPUnit_Constraint_DomQuery}} PHP crashes most obviously due to the code of {{Zend_Test_PHPUnit_Constraint_DomQuery::_getNodeContent(DOMNode $node)}} which reads:

$doc     = $node->ownerDocument;
$content = $doc->saveXML($node);
$tag     = $node->nodeName;
$regex   = '|?' . $tag . '[^>]*>|';
return preg_replace($regex, '', $content);

This doesn't work id {{$node}} is a {{DOMAttr}}.

Fixed in r18224. Zend_Test_PHPUnit_Constraint_DomQuery allows matching of attribute values. Although the original issue seems to be related to the PHP version used, the present fix is PHP version independent.