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

Issue Type: Bug Created: 2008-08-20T06:02:11.000+0000 Last Updated: 2009-09-18T08:56:24.000+0000 Status: Resolved Fix version(s): - 1.9.3 (22/Sep/09)

Reporter: Stefan Gehrig (sgehrig) Assignee: Stefan Gehrig (sgehrig) Tags: - Zend_Test_PHPUnit

Related issues: Attachments:


Faxnummern 1. 2. 3.


Posted by Matthew Weier O'Phinney (matthew) on 2008-09-11T07:06:46.000+0000

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.

Posted by Stefan Gehrig (sgehrig) on 2008-09-11T09:46:01.000+0000

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:

<pre class="highlight">
$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

<pre class="highlight">
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:

<pre class="highlight">
$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.

Posted by Stefan Gehrig (sgehrig) on 2009-09-18T01:43:10.000+0000

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.

Have you found an issue?

See the Overview section for more details.


© 2006-2018 by Zend, a Rogue Wave Company. Made with by awesome contributors.

This website is built using zend-expressive and it runs on PHP 7.