123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <?php
- /**
- * @package SimpleTest
- * @subpackage Extensions
- * @author Perrick Penet <perrick@noparking.net>
- * @version $Id$
- */
- /**#@+
- * include SimpleTest files
- */
- require_once dirname(__FILE__).'/../web_tester.php';
- require_once dirname(__FILE__).'/dom_tester/css_selector.php';
- /**#@-*/
- /**
- * CssSelectorExpectation
- *
- * Create a CSS Selector expectactation
- *
- * @package SimpleTest
- * @subpackage Extensions
- * @param DomDocument $_dom
- * @param string $_selector
- * @param array $_value
- *
- */
- class CssSelectorExpectation extends SimpleExpectation {
- protected $dom;
- protected $selector;
- protected $value;
-
- /**
- * Sets the dom tree and the css selector to compare against
- * @param mixed $dom Dom tree to search into.
- * @param mixed $selector Css selector to match element.
- * @param string $message Customised message on failure.
- * @access public
- */
- function __construct($dom, $selector, $message = '%s') {
- parent::__construct($message);
- $this->dom = $dom;
- $this->selector = $selector;
-
- $css_selector = new CssSelector($this->dom);
- $this->value = $css_selector->getTexts($this->selector);
- }
-
- /**
- * Tests the expectation. True if it matches the
- * held value.
- * @param mixed $compare Comparison value.
- * @return boolean True if correct.
- * @access public
- */
- function test($compare) {
- return (($this->value == $compare) && ($compare == $this->value));
- }
-
- /**
- * Returns a human readable test message.
- * @param mixed $compare Comparison value.
- * @return string Description of success
- * or failure.
- * @access public
- */
- function testMessage($compare) {
- $dumper = $this->getDumper();
- if (is_array($compare)) {
- sort($compare);
- }
- if ($this->test($compare)) {
- return "CSS selector expectation [" . $dumper->describeValue($this->value) . "]".
- " using [" . $dumper->describeValue($this->selector) . "]";
- } else {
- return "CSS selector expectation [" . $dumper->describeValue($this->value) . "]".
- " using [" . $dumper->describeValue($this->selector) . "]".
- " fails with [" .
- $dumper->describeValue($compare) . "] " .
- $dumper->describeDifference($this->value, $compare);
- }
- }
- }
- /**
- * DomTestCase
- *
- * Extend Web test case with DOM related assertions,
- * CSS selectors in particular
- *
- * @package SimpleTest
- * @subpackage Extensions
- * @param DomDocument $dom
- *
- */
- class DomTestCase extends WebTestCase {
- public $dom;
-
- function loadDom() {
- $this->dom = new DomDocument('1.0', 'utf-8');
- $this->dom->validateOnParse = true;
- $this->dom->loadHTML($this->_browser->getContent());
- }
- function getElementsBySelector($selector) {
- $this->loadDom();
- $css_selector = new CssSelectorExpectation($this->dom, $selector);
- return $css_selector->_value;
- }
-
- function assertElementsBySelector($selector, $elements, $message = '%s') {
- $this->loadDom();
- return $this->assert(
- new CssSelectorExpectation($this->dom, $selector),
- $elements,
- $message);
- }
- }
- ?>
|