diff --git a/contrib/simpletest/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE b/contrib/simpletest/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE
old mode 100644
new mode 100755
index 8ac9cf2a..a65e83e8
--- a/contrib/simpletest/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE
+++ b/contrib/simpletest/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE
@@ -5,13 +5,64 @@ written with earlier versions will fail with the newest ones. The most
dramatic changes are in the alpha releases. Here is a list of possible
problems and their fixes...
+assertText() no longer finds a string inside a |', '', $text);
- $text = preg_replace('|]*alt\s*=\s*"([^"]*)"[^>]*>|', ' \1 ', $text);
- $text = preg_replace('|
]*alt\s*=\s*\'([^\']*)\'[^>]*>|', ' \1 ', $text);
- $text = preg_replace('|
]*alt\s*=\s*([a-zA-Z_]+)[^>]*>|', ' \1 ', $text);
- $text = preg_replace('|<[^>]*>|', '', $text);
- $text = SimpleHtmlSaxParser::decodeHtml($text);
- $text = preg_replace('|\s+|', ' ', $text);
- return trim(trim($text), "\xA0"); // TODO: The \xAO is a . Add a test for this.
- }
}
/**
- * SAX event handler.
+ * SAX event handler. Maintains a list of
+ * open tags and dispatches them as they close.
* @package SimpleTest
* @subpackage WebTester
- * @abstract
*/
-class SimpleSaxListener {
-
+class SimplePhpPageBuilder {
+ private $tags;
+ private $page;
+ private $private_content_tag;
+ private $open_forms = array();
+ private $complete_forms = array();
+ private $frameset = false;
+ private $loading_frames = array();
+ private $frameset_nesting_level = 0;
+ private $left_over_labels = array();
+
/**
- * Sets the document to write to.
+ * Frees up any references so as to allow the PHP garbage
+ * collection from unset() to work.
* @access public
*/
- function SimpleSaxListener() {
+ function free() {
+ unset($this->tags);
+ unset($this->page);
+ unset($this->private_content_tags);
+ $this->open_forms = array();
+ $this->complete_forms = array();
+ $this->frameset = false;
+ $this->loading_frames = array();
+ $this->frameset_nesting_level = 0;
+ $this->left_over_labels = array();
}
-
+
/**
- * Start of element event.
- * @param string $name Element name.
- * @param hash $attributes Name value pairs.
- * Attributes without content
- * are marked as true.
- * @return boolean False on parse error.
+ * This builder is always available.
+ * @return boolean Always true.
+ */
+ function can() {
+ return true;
+ }
+
+ /**
+ * Reads the raw content and send events
+ * into the page to be built.
+ * @param $response SimpleHttpResponse Fetched response.
+ * @return SimplePage Newly parsed page.
+ * @access public
+ */
+ function parse($response) {
+ $this->tags = array();
+ $this->page = $this->createPage($response);
+ $parser = $this->createParser($this);
+ $parser->parse($response->getContent());
+ $this->acceptPageEnd();
+ $page = $this->page;
+ $this->free();
+ return $page;
+ }
+
+ /**
+ * Creates an empty page.
+ * @return SimplePage New unparsed page.
+ * @access protected
+ */
+ protected function createPage($response) {
+ return new SimplePage($response);
+ }
+
+ /**
+ * Creates the parser used with the builder.
+ * @param SimplePhpPageBuilder $listener Target of parser.
+ * @return SimpleSaxParser Parser to generate
+ * events for the builder.
+ * @access protected
+ */
+ protected function createParser(&$listener) {
+ return new SimpleHtmlSaxParser($listener);
+ }
+
+ /**
+ * Start of element event. Opens a new tag.
+ * @param string $name Element name.
+ * @param hash $attributes Attributes without content
+ * are marked as true.
+ * @return boolean False on parse error.
* @access public
*/
function startElement($name, $attributes) {
+ $factory = new SimpleTagBuilder();
+ $tag = $factory->createTag($name, $attributes);
+ if (! $tag) {
+ return true;
+ }
+ if ($tag->getTagName() == 'label') {
+ $this->acceptLabelStart($tag);
+ $this->openTag($tag);
+ return true;
+ }
+ if ($tag->getTagName() == 'form') {
+ $this->acceptFormStart($tag);
+ return true;
+ }
+ if ($tag->getTagName() == 'frameset') {
+ $this->acceptFramesetStart($tag);
+ return true;
+ }
+ if ($tag->getTagName() == 'frame') {
+ $this->acceptFrame($tag);
+ return true;
+ }
+ if ($tag->isPrivateContent() && ! isset($this->private_content_tag)) {
+ $this->private_content_tag = &$tag;
+ }
+ if ($tag->expectEndTag()) {
+ $this->openTag($tag);
+ return true;
+ }
+ $this->acceptTag($tag);
+ return true;
}
-
+
/**
* End of element event.
* @param string $name Element name.
@@ -750,15 +811,244 @@ class SimpleSaxListener {
* @access public
*/
function endElement($name) {
+ if ($name == 'label') {
+ $this->acceptLabelEnd();
+ return true;
+ }
+ if ($name == 'form') {
+ $this->acceptFormEnd();
+ return true;
+ }
+ if ($name == 'frameset') {
+ $this->acceptFramesetEnd();
+ return true;
+ }
+ if ($this->hasNamedTagOnOpenTagStack($name)) {
+ $tag = array_pop($this->tags[$name]);
+ if ($tag->isPrivateContent() && $this->private_content_tag->getTagName() == $name) {
+ unset($this->private_content_tag);
+ }
+ $this->addContentTagToOpenTags($tag);
+ $this->acceptTag($tag);
+ return true;
+ }
+ return true;
}
-
+
/**
- * Unparsed, but relevant data.
+ * Test to see if there are any open tags awaiting
+ * closure that match the tag name.
+ * @param string $name Element name.
+ * @return boolean True if any are still open.
+ * @access private
+ */
+ protected function hasNamedTagOnOpenTagStack($name) {
+ return isset($this->tags[$name]) && (count($this->tags[$name]) > 0);
+ }
+
+ /**
+ * Unparsed, but relevant data. The data is added
+ * to every open tag.
* @param string $text May include unparsed tags.
* @return boolean False on parse error.
* @access public
*/
function addContent($text) {
+ if (isset($this->private_content_tag)) {
+ $this->private_content_tag->addContent($text);
+ } else {
+ $this->addContentToAllOpenTags($text);
+ }
+ return true;
+ }
+
+ /**
+ * Any content fills all currently open tags unless it
+ * is part of an option tag.
+ * @param string $text May include unparsed tags.
+ * @access private
+ */
+ protected function addContentToAllOpenTags($text) {
+ foreach (array_keys($this->tags) as $name) {
+ for ($i = 0, $count = count($this->tags[$name]); $i < $count; $i++) {
+ $this->tags[$name][$i]->addContent($text);
+ }
+ }
+ }
+
+ /**
+ * Parsed data in tag form. The parsed tag is added
+ * to every open tag. Used for adding options to select
+ * fields only.
+ * @param SimpleTag $tag Option tags only.
+ * @access private
+ */
+ protected function addContentTagToOpenTags(&$tag) {
+ if ($tag->getTagName() != 'option') {
+ return;
+ }
+ foreach (array_keys($this->tags) as $name) {
+ for ($i = 0, $count = count($this->tags[$name]); $i < $count; $i++) {
+ $this->tags[$name][$i]->addTag($tag);
+ }
+ }
+ }
+
+ /**
+ * Opens a tag for receiving content. Multiple tags
+ * will be receiving input at the same time.
+ * @param SimpleTag $tag New content tag.
+ * @access private
+ */
+ protected function openTag($tag) {
+ $name = $tag->getTagName();
+ if (! in_array($name, array_keys($this->tags))) {
+ $this->tags[$name] = array();
+ }
+ $this->tags[$name][] = $tag;
+ }
+
+ /**
+ * Adds a tag to the page.
+ * @param SimpleTag $tag Tag to accept.
+ * @access public
+ */
+ protected function acceptTag($tag) {
+ if ($tag->getTagName() == "a") {
+ $this->page->addLink($tag);
+ } elseif ($tag->getTagName() == "base") {
+ $this->page->setBase($tag->getAttribute('href'));
+ } elseif ($tag->getTagName() == "title") {
+ $this->page->setTitle($tag);
+ } elseif ($this->isFormElement($tag->getTagName())) {
+ for ($i = 0; $i < count($this->open_forms); $i++) {
+ $this->open_forms[$i]->addWidget($tag);
+ }
+ $this->last_widget = $tag;
+ }
+ }
+
+ /**
+ * Opens a label for a described widget.
+ * @param SimpleFormTag $tag Tag to accept.
+ * @access public
+ */
+ protected function acceptLabelStart($tag) {
+ $this->label = $tag;
+ unset($this->last_widget);
+ }
+
+ /**
+ * Closes the most recently opened label.
+ * @access public
+ */
+ protected function acceptLabelEnd() {
+ if (isset($this->label)) {
+ if (isset($this->last_widget)) {
+ $this->last_widget->setLabel($this->label->getText());
+ unset($this->last_widget);
+ } else {
+ $this->left_over_labels[] = SimpleTestCompatibility::copy($this->label);
+ }
+ unset($this->label);
+ }
+ }
+
+ /**
+ * Tests to see if a tag is a possible form
+ * element.
+ * @param string $name HTML element name.
+ * @return boolean True if form element.
+ * @access private
+ */
+ protected function isFormElement($name) {
+ return in_array($name, array('input', 'button', 'textarea', 'select'));
+ }
+
+ /**
+ * Opens a form. New widgets go here.
+ * @param SimpleFormTag $tag Tag to accept.
+ * @access public
+ */
+ protected function acceptFormStart($tag) {
+ $this->open_forms[] = new SimpleForm($tag, $this->page);
+ }
+
+ /**
+ * Closes the most recently opened form.
+ * @access public
+ */
+ protected function acceptFormEnd() {
+ if (count($this->open_forms)) {
+ $this->complete_forms[] = array_pop($this->open_forms);
+ }
+ }
+
+ /**
+ * Opens a frameset. A frameset may contain nested
+ * frameset tags.
+ * @param SimpleFramesetTag $tag Tag to accept.
+ * @access public
+ */
+ protected function acceptFramesetStart($tag) {
+ if (! $this->isLoadingFrames()) {
+ $this->frameset = $tag;
+ }
+ $this->frameset_nesting_level++;
+ }
+
+ /**
+ * Closes the most recently opened frameset.
+ * @access public
+ */
+ protected function acceptFramesetEnd() {
+ if ($this->isLoadingFrames()) {
+ $this->frameset_nesting_level--;
+ }
+ }
+
+ /**
+ * Takes a single frame tag and stashes it in
+ * the current frame set.
+ * @param SimpleFrameTag $tag Tag to accept.
+ * @access public
+ */
+ protected function acceptFrame($tag) {
+ if ($this->isLoadingFrames()) {
+ if ($tag->getAttribute('src')) {
+ $this->loading_frames[] = $tag;
+ }
+ }
+ }
+
+ /**
+ * Test to see if in the middle of reading
+ * a frameset.
+ * @return boolean True if inframeset.
+ * @access private
+ */
+ protected function isLoadingFrames() {
+ return $this->frameset and $this->frameset_nesting_level > 0;
+ }
+
+ /**
+ * Marker for end of complete page. Any work in
+ * progress can now be closed.
+ * @access public
+ */
+ protected function acceptPageEnd() {
+ while (count($this->open_forms)) {
+ $this->complete_forms[] = array_pop($this->open_forms);
+ }
+ foreach ($this->left_over_labels as $label) {
+ for ($i = 0, $count = count($this->complete_forms); $i < $count; $i++) {
+ $this->complete_forms[$i]->attachLabelBySelector(
+ new SimpleById($label->getFor()),
+ $label->getText());
+ }
+ }
+ $this->page->setForms($this->complete_forms);
+ $this->page->setFrames($this->loading_frames);
}
}
?>
\ No newline at end of file
diff --git a/contrib/simpletest/simpletest/recorder.php b/contrib/simpletest/simpletest/recorder.php
new file mode 100644
index 00000000..b3d0d01c
--- /dev/null
+++ b/contrib/simpletest/simpletest/recorder.php
@@ -0,0 +1,101 @@
+time, $this->breadcrumb, $this->message) =
+ array(time(), $breadcrumb, $message);
+ }
+}
+
+/**
+ * A single pass captured for later.
+ * @package SimpleTest
+ * @subpackage Extensions
+ */
+class SimpleResultOfPass extends SimpleResult { }
+
+/**
+ * A single failure captured for later.
+ * @package SimpleTest
+ * @subpackage Extensions
+ */
+class SimpleResultOfFail extends SimpleResult { }
+
+/**
+ * A single exception captured for later.
+ * @package SimpleTest
+ * @subpackage Extensions
+ */
+class SimpleResultOfException extends SimpleResult { }
+
+/**
+ * Array-based test recorder. Returns an array
+ * with timestamp, status, test name and message for each pass and failure.
+ * @package SimpleTest
+ * @subpackage Extensions
+ */
+class Recorder extends SimpleReporterDecorator {
+ public $results = array();
+
+ /**
+ * Stashes the pass as a SimpleResultOfPass
+ * for later retrieval.
+ * @param string $message Pass message to be displayed
+ * eventually.
+ */
+ function paintPass($message) {
+ parent::paintPass($message);
+ $this->results[] = new SimpleResultOfPass(parent::getTestList(), $message);
+ }
+
+ /**
+ * Stashes the fail as a SimpleResultOfFail
+ * for later retrieval.
+ * @param string $message Failure message to be displayed
+ * eventually.
+ */
+ function paintFail($message) {
+ parent::paintFail($message);
+ $this->results[] = new SimpleResultOfFail(parent::getTestList(), $message);
+ }
+
+ /**
+ * Stashes the exception as a SimpleResultOfException
+ * for later retrieval.
+ * @param string $message Exception message to be displayed
+ * eventually.
+ */
+ function paintException($message) {
+ parent::paintException($message);
+ $this->results[] = new SimpleResultOfException(parent::getTestList(), $message);
+ }
+}
+?>
\ No newline at end of file
diff --git a/contrib/simpletest/simpletest/reflection_php4.php b/contrib/simpletest/simpletest/reflection_php4.php
index 6c93915a..39801ea1 100644
--- a/contrib/simpletest/simpletest/reflection_php4.php
+++ b/contrib/simpletest/simpletest/reflection_php4.php
@@ -3,7 +3,7 @@
* base include file for SimpleTest
* @package SimpleTest
* @subpackage UnitTester
- * @version $Id: reflection_php4.php 1672 2008-03-02 04:47:34Z edwardzyang $
+ * @version $Id: reflection_php4.php 2011 2011-04-29 08:22:48Z pp11 $
*/
/**
@@ -112,7 +112,7 @@ class SimpleReflection {
function isInterface() {
return false;
}
-
+
/**
* Scans for final methods, but as it's PHP 4 there
* aren't any.
diff --git a/contrib/simpletest/simpletest/reflection_php5.php b/contrib/simpletest/simpletest/reflection_php5.php
index 8383bccd..43d8a7b2 100644
--- a/contrib/simpletest/simpletest/reflection_php5.php
+++ b/contrib/simpletest/simpletest/reflection_php5.php
@@ -3,7 +3,7 @@
* base include file for SimpleTest
* @package SimpleTest
* @subpackage UnitTester
- * @version $Id: reflection_php5.php 1683 2008-03-05 21:57:08Z lastcraft $
+ * @version $Id: reflection_php5.php 2011 2011-04-29 08:22:48Z pp11 $
*/
/**
@@ -12,15 +12,15 @@
* @subpackage UnitTester
*/
class SimpleReflection {
- var $_interface;
+ private $interface;
/**
* Stashes the class/interface.
* @param string $interface Class or interface
* to inspect.
*/
- function SimpleReflection($interface) {
- $this->_interface = $interface;
+ function __construct($interface) {
+ $this->interface = $interface;
}
/**
@@ -31,10 +31,10 @@ class SimpleReflection {
* @access public
*/
function classExists() {
- if (! class_exists($this->_interface)) {
+ if (! class_exists($this->interface)) {
return false;
}
- $reflection = new ReflectionClass($this->_interface);
+ $reflection = new ReflectionClass($this->interface);
return ! $reflection->isInterface();
}
@@ -45,7 +45,7 @@ class SimpleReflection {
* @access public
*/
function classExistsSansAutoload() {
- return class_exists($this->_interface, false);
+ return class_exists($this->interface, false);
}
/**
@@ -55,7 +55,7 @@ class SimpleReflection {
* @access public
*/
function classOrInterfaceExists() {
- return $this->_classOrInterfaceExistsWithAutoload($this->_interface, true);
+ return $this->classOrInterfaceExistsWithAutoload($this->interface, true);
}
/**
@@ -65,7 +65,7 @@ class SimpleReflection {
* @access public
*/
function classOrInterfaceExistsSansAutoload() {
- return $this->_classOrInterfaceExistsWithAutoload($this->_interface, false);
+ return $this->classOrInterfaceExistsWithAutoload($this->interface, false);
}
/**
@@ -76,13 +76,13 @@ class SimpleReflection {
* @return boolean True if interface defined.
* @access private
*/
- function _classOrInterfaceExistsWithAutoload($interface, $autoload) {
+ protected function classOrInterfaceExistsWithAutoload($interface, $autoload) {
if (function_exists('interface_exists')) {
- if (interface_exists($this->_interface, $autoload)) {
+ if (interface_exists($this->interface, $autoload)) {
return true;
}
}
- return class_exists($this->_interface, $autoload);
+ return class_exists($this->interface, $autoload);
}
/**
@@ -92,7 +92,7 @@ class SimpleReflection {
* @access public
*/
function getMethods() {
- return array_unique(get_class_methods($this->_interface));
+ return array_unique(get_class_methods($this->interface));
}
/**
@@ -103,11 +103,11 @@ class SimpleReflection {
* @access public
*/
function getInterfaces() {
- $reflection = new ReflectionClass($this->_interface);
+ $reflection = new ReflectionClass($this->interface);
if ($reflection->isInterface()) {
- return array($this->_interface);
+ return array($this->interface);
}
- return $this->_onlyParents($reflection->getInterfaces());
+ return $this->onlyParents($reflection->getInterfaces());
}
/**
@@ -131,7 +131,7 @@ class SimpleReflection {
* @returns boolean True if enforced.
* @access private
*/
- function _isInterfaceMethod($method) {
+ protected function isInterfaceMethod($method) {
return in_array($method, $this->getInterfaceMethods());
}
@@ -141,7 +141,7 @@ class SimpleReflection {
* @access public
*/
function getParent() {
- $reflection = new ReflectionClass($this->_interface);
+ $reflection = new ReflectionClass($this->interface);
$parent = $reflection->getParentClass();
if ($parent) {
return $parent->getName();
@@ -155,7 +155,7 @@ class SimpleReflection {
* @access public
*/
function isAbstract() {
- $reflection = new ReflectionClass($this->_interface);
+ $reflection = new ReflectionClass($this->interface);
return $reflection->isAbstract();
}
@@ -165,7 +165,7 @@ class SimpleReflection {
* @access public
*/
function isInterface() {
- $reflection = new ReflectionClass($this->_interface);
+ $reflection = new ReflectionClass($this->interface);
return $reflection->isInterface();
}
@@ -176,7 +176,7 @@ class SimpleReflection {
* @access public
*/
function hasFinal() {
- $reflection = new ReflectionClass($this->_interface);
+ $reflection = new ReflectionClass($this->interface);
foreach ($reflection->getMethods() as $method) {
if ($method->isFinal()) {
return true;
@@ -193,7 +193,7 @@ class SimpleReflection {
* @returns array List of parent interface names.
* @access private
*/
- function _onlyParents($interfaces) {
+ protected function onlyParents($interfaces) {
$parents = array();
$blacklist = array();
foreach ($interfaces as $interface) {
@@ -218,8 +218,8 @@ class SimpleReflection {
* @return bool true if method is abstract, else false
* @access private
*/
- function _isAbstractMethod($name) {
- $interface = new ReflectionClass($this->_interface);
+ protected function isAbstractMethod($name) {
+ $interface = new ReflectionClass($this->interface);
if (! $interface->hasMethod($name)) {
return false;
}
@@ -232,8 +232,8 @@ class SimpleReflection {
* @return bool true if method is the constructor
* @access private
*/
- function _isConstructor($name) {
- return ($name == '__construct') || ($name == $this->_interface);
+ protected function isConstructor($name) {
+ return ($name == '__construct') || ($name == $this->interface);
}
/**
@@ -242,8 +242,8 @@ class SimpleReflection {
* @return bool true if method is abstract in parent, else false
* @access private
*/
- function _isAbstractMethodInParents($name) {
- $interface = new ReflectionClass($this->_interface);
+ protected function isAbstractMethodInParents($name) {
+ $interface = new ReflectionClass($this->interface);
$parent = $interface->getParentClass();
while($parent) {
if (! $parent->hasMethod($name)) {
@@ -263,8 +263,8 @@ class SimpleReflection {
* @return bool true if method is static, else false
* @access private
*/
- function _isStaticMethod($name) {
- $interface = new ReflectionClass($this->_interface);
+ protected function isStaticMethod($name) {
+ $interface = new ReflectionClass($this->interface);
if (! $interface->hasMethod($name)) {
return false;
}
@@ -294,13 +294,19 @@ class SimpleReflection {
if ($name == '__toString') {
return "function $name()";
}
- if ($this->_isInterfaceMethod($name) ||
- $this->_isAbstractMethod($name) ||
- $this->_isAbstractMethodInParents($name) ||
- $this->_isStaticMethod($name)) {
- return $this->_getFullSignature($name);
+
+ // This wonky try-catch is a work around for a faulty method_exists()
+ // in early versions of PHP 5 which would return false for static
+ // methods. The Reflection classes work fine, but hasMethod()
+ // doesn't exist prior to PHP 5.1.0, so we need to use a more crude
+ // detection method.
+ try {
+ $interface = new ReflectionClass($this->interface);
+ $interface->getMethod($name);
+ } catch (ReflectionException $e) {
+ return "function $name()";
}
- return "function $name()";
+ return $this->getFullSignature($name);
}
/**
@@ -311,13 +317,13 @@ class SimpleReflection {
* bracket.
* @access private
*/
- function _getFullSignature($name) {
- $interface = new ReflectionClass($this->_interface);
+ protected function getFullSignature($name) {
+ $interface = new ReflectionClass($this->interface);
$method = $interface->getMethod($name);
$reference = $method->returnsReference() ? '&' : '';
$static = $method->isStatic() ? 'static ' : '';
return "{$static}function $reference$name(" .
- implode(', ', $this->_getParameterSignatures($method)) .
+ implode(', ', $this->getParameterSignatures($method)) .
")";
}
@@ -329,7 +335,7 @@ class SimpleReflection {
* a snippet of code.
* @access private
*/
- function _getParameterSignatures($method) {
+ protected function getParameterSignatures($method) {
$signatures = array();
foreach ($method->getParameters() as $parameter) {
$signature = '';
@@ -342,8 +348,8 @@ class SimpleReflection {
if ($parameter->isPassedByReference()) {
$signature .= '&';
}
- $signature .= '$' . $this->_suppressSpurious($parameter->getName());
- if ($this->_isOptional($parameter)) {
+ $signature .= '$' . $this->suppressSpurious($parameter->getName());
+ if ($this->isOptional($parameter)) {
$signature .= ' = null';
}
$signatures[] = $signature;
@@ -359,7 +365,7 @@ class SimpleReflection {
* @return string Cleaner name.
* @access private
*/
- function _suppressSpurious($name) {
+ protected function suppressSpurious($name) {
return str_replace(array('[', ']', ' '), '', $name);
}
@@ -370,11 +376,11 @@ class SimpleReflection {
* @return boolean True if optional.
* @access private
*/
- function _isOptional($parameter) {
+ protected function isOptional($parameter) {
if (method_exists($parameter, 'isOptional')) {
return $parameter->isOptional();
}
return false;
}
}
-?>
+?>
\ No newline at end of file
diff --git a/contrib/simpletest/simpletest/remote.php b/contrib/simpletest/simpletest/remote.php
index 8889ed7b..4bb37b7c 100644
--- a/contrib/simpletest/simpletest/remote.php
+++ b/contrib/simpletest/simpletest/remote.php
@@ -3,7 +3,7 @@
* base include file for SimpleTest
* @package SimpleTest
* @subpackage UnitTester
- * @version $Id: remote.php 1723 2008-04-08 00:34:10Z lastcraft $
+ * @version $Id: remote.php 2011 2011-04-29 08:22:48Z pp11 $
*/
/**#@+
@@ -20,29 +20,29 @@ require_once(dirname(__FILE__) . '/test_case.php');
* @subpackage UnitTester
*/
class RemoteTestCase {
- var $_url;
- var $_dry_url;
- var $_size;
-
+ private $url;
+ private $dry_url;
+ private $size;
+
/**
* Sets the location of the remote test.
* @param string $url Test location.
* @param string $dry_url Location for dry run.
* @access public
*/
- function RemoteTestCase($url, $dry_url = false) {
- $this->_url = $url;
- $this->_dry_url = $dry_url ? $dry_url : $url;
- $this->_size = false;
+ function __construct($url, $dry_url = false) {
+ $this->url = $url;
+ $this->dry_url = $dry_url ? $dry_url : $url;
+ $this->size = false;
}
-
+
/**
* Accessor for the test name for subclasses.
* @return string Name of the test.
* @access public
*/
function getLabel() {
- return $this->_url;
+ return $this->url;
}
/**
@@ -53,65 +53,63 @@ class RemoteTestCase {
* @returns boolean True if no failures.
* @access public
*/
- function run(&$reporter) {
- $browser = &$this->_createBrowser();
- $xml = $browser->get($this->_url);
+ function run($reporter) {
+ $browser = $this->createBrowser();
+ $xml = $browser->get($this->url);
if (! $xml) {
- trigger_error('Cannot read remote test URL [' . $this->_url . ']');
+ trigger_error('Cannot read remote test URL [' . $this->url . ']');
return false;
}
- $parser = &$this->_createParser($reporter);
+ $parser = $this->createParser($reporter);
if (! $parser->parse($xml)) {
- trigger_error('Cannot parse incoming XML from [' . $this->_url . ']');
+ trigger_error('Cannot parse incoming XML from [' . $this->url . ']');
return false;
}
return true;
}
-
+
/**
* Creates a new web browser object for fetching
* the XML report.
* @return SimpleBrowser New browser.
* @access protected
*/
- function &_createBrowser() {
- $browser = &new SimpleBrowser();
- return $browser;
+ protected function createBrowser() {
+ return new SimpleBrowser();
}
-
+
/**
* Creates the XML parser.
* @param SimpleReporter $reporter Target of test results.
* @return SimpleTestXmlListener XML reader.
* @access protected
*/
- function &_createParser(&$reporter) {
- $parser = &new SimpleTestXmlParser($reporter);
- return $parser;
+ protected function createParser($reporter) {
+ return new SimpleTestXmlParser($reporter);
}
-
+
/**
* Accessor for the number of subtests.
* @return integer Number of test cases.
* @access public
*/
function getSize() {
- if ($this->_size === false) {
- $browser = &$this->_createBrowser();
- $xml = $browser->get($this->_dry_url);
+ if ($this->size === false) {
+ $browser = $this->createBrowser();
+ $xml = $browser->get($this->dry_url);
if (! $xml) {
- trigger_error('Cannot read remote test URL [' . $this->_dry_url . ']');
+ trigger_error('Cannot read remote test URL [' . $this->dry_url . ']');
return false;
}
- $reporter = &new SimpleReporter();
- $parser = &$this->_createParser($reporter);
+ $reporter = new SimpleReporter();
+ $parser = $this->createParser($reporter);
if (! $parser->parse($xml)) {
- trigger_error('Cannot parse incoming XML from [' . $this->_dry_url . ']');
+ trigger_error('Cannot parse incoming XML from [' . $this->dry_url . ']');
return false;
}
- $this->_size = $reporter->getTestCaseCount();
+ $this->size = $reporter->getTestCaseCount();
}
- return $this->_size;
+ return $this->size;
}
}
?>
\ No newline at end of file
diff --git a/contrib/simpletest/simpletest/reporter.php b/contrib/simpletest/simpletest/reporter.php
old mode 100644
new mode 100755
index a13eff8c..bd4f3fa4
--- a/contrib/simpletest/simpletest/reporter.php
+++ b/contrib/simpletest/simpletest/reporter.php
@@ -3,13 +3,14 @@
* base include file for SimpleTest
* @package SimpleTest
* @subpackage UnitTester
- * @version $Id: reporter.php 1702 2008-03-25 00:08:04Z lastcraft $
+ * @version $Id: reporter.php 2005 2010-11-02 14:09:34Z lastcraft $
*/
/**#@+
* include other SimpleTest class files
*/
require_once(dirname(__FILE__) . '/scorer.php');
+//require_once(dirname(__FILE__) . '/arguments.php');
/**#@-*/
/**
@@ -19,7 +20,7 @@ require_once(dirname(__FILE__) . '/scorer.php');
* @subpackage UnitTester
*/
class HtmlReporter extends SimpleReporter {
- var $_character_set;
+ private $character_set;
/**
* Does nothing yet. The first output will
@@ -27,9 +28,9 @@ class HtmlReporter extends SimpleReporter {
* by a web browser.
* @access public
*/
- function HtmlReporter($character_set = 'ISO-8859-1') {
- $this->SimpleReporter();
- $this->_character_set = $character_set;
+ function __construct($character_set = 'ISO-8859-1') {
+ parent::__construct();
+ $this->character_set = $character_set;
}
/**
@@ -43,9 +44,9 @@ class HtmlReporter extends SimpleReporter {
print "";
print "\n
' . $this->_htmlEntities($message) . ''; + print '
' . $this->htmlEntities($message) . ''; } /** @@ -178,8 +177,8 @@ class HtmlReporter extends SimpleReporter { * @return string Browser readable message. * @access protected */ - function _htmlEntities($message) { - return htmlentities($message, ENT_COMPAT, $this->_character_set); + protected function htmlEntities($message) { + return htmlentities($message, ENT_COMPAT, $this->character_set); } } @@ -197,10 +196,9 @@ class TextReporter extends SimpleReporter { /** * Does nothing yet. The first output will * be sent on the first test start. - * @access public */ - function TextReporter() { - $this->SimpleReporter(); + function __construct() { + parent::__construct(); } /** @@ -283,7 +281,7 @@ class TextReporter extends SimpleReporter { print "\tin " . implode("\n\tin ", array_reverse($breadcrumb)); print "\n"; } - + /** * Prints the message for skipping tests. * @param string $message Text of skip condition. @@ -295,7 +293,7 @@ class TextReporter extends SimpleReporter { } /** - * Paints formatted text such as dumped variables. + * Paints formatted text such as dumped privateiables. * @param string $message Text to show. * @access public */ @@ -312,10 +310,10 @@ class TextReporter extends SimpleReporter { * @subpackage UnitTester */ class SelectiveReporter extends SimpleReporterDecorator { - var $_just_this_case = false; - var $_just_this_test = false; - var $_on; - + private $just_this_case = false; + private $just_this_test = false; + private $on; + /** * Selects the test case or group to be run, * and optionally a specific test. @@ -323,17 +321,17 @@ class SelectiveReporter extends SimpleReporterDecorator { * @param string $just_this_case Only this case or group will run. * @param string $just_this_test Only this test method will run. */ - function SelectiveReporter(&$reporter, $just_this_case = false, $just_this_test = false) { + function __construct($reporter, $just_this_case = false, $just_this_test = false) { if (isset($just_this_case) && $just_this_case) { - $this->_just_this_case = strtolower($just_this_case); - $this->_off(); + $this->just_this_case = strtolower($just_this_case); + $this->off(); } else { - $this->_on(); + $this->on(); } if (isset($just_this_test) && $just_this_test) { - $this->_just_this_test = strtolower($just_this_test); + $this->just_this_test = strtolower($just_this_test); } - $this->SimpleReporterDecorator($reporter); + parent::__construct($reporter); } /** @@ -342,8 +340,8 @@ class SelectiveReporter extends SimpleReporterDecorator { * @return boolean True if matched. * @access protected */ - function _matchesTestCase($test_case) { - return $this->_just_this_case == strtolower($test_case); + protected function matchesTestCase($test_case) { + return $this->just_this_case == strtolower($test_case); } /** @@ -354,40 +352,40 @@ class SelectiveReporter extends SimpleReporterDecorator { * @return boolean True if matched. * @access protected */ - function _shouldRunTest($test_case, $method) { - if ($this->_isOn() || $this->_matchesTestCase($test_case)) { - if ($this->_just_this_test) { - return $this->_just_this_test == strtolower($method); + protected function shouldRunTest($test_case, $method) { + if ($this->isOn() || $this->matchesTestCase($test_case)) { + if ($this->just_this_test) { + return $this->just_this_test == strtolower($method); } else { return true; } } return false; } - + /** * Switch on testing for the group or subgroup. * @access private */ - function _on() { - $this->_on = true; + protected function on() { + $this->on = true; } - + /** * Switch off testing for the group or subgroup. * @access private */ - function _off() { - $this->_on = false; + protected function off() { + $this->on = false; } - + /** * Is this group actually being tested? * @return boolean True if the current test group is active. * @access private */ - function _isOn() { - return $this->_on; + protected function isOn() { + return $this->on; } /** @@ -398,8 +396,8 @@ class SelectiveReporter extends SimpleReporterDecorator { * @access public */ function shouldInvoke($test_case, $method) { - if ($this->_shouldRunTest($test_case, $method)) { - return $this->_reporter->shouldInvoke($test_case, $method); + if ($this->shouldRunTest($test_case, $method)) { + return $this->reporter->shouldInvoke($test_case, $method); } return false; } @@ -411,10 +409,10 @@ class SelectiveReporter extends SimpleReporterDecorator { * @access public */ function paintGroupStart($test_case, $size) { - if ($this->_just_this_case && $this->_matchesTestCase($test_case)) { - $this->_on(); + if ($this->just_this_case && $this->matchesTestCase($test_case)) { + $this->on(); } - $this->_reporter->paintGroupStart($test_case, $size); + $this->reporter->paintGroupStart($test_case, $size); } /** @@ -423,9 +421,9 @@ class SelectiveReporter extends SimpleReporterDecorator { * @access public */ function paintGroupEnd($test_case) { - $this->_reporter->paintGroupEnd($test_case); - if ($this->_just_this_case && $this->_matchesTestCase($test_case)) { - $this->_off(); + $this->reporter->paintGroupEnd($test_case); + if ($this->just_this_case && $this->matchesTestCase($test_case)) { + $this->off(); } } } @@ -436,7 +434,7 @@ class SelectiveReporter extends SimpleReporterDecorator { * @subpackage UnitTester */ class NoSkipsReporter extends SimpleReporterDecorator { - + /** * Does nothing. * @param string $message Text of skip condition. diff --git a/contrib/simpletest/simpletest/scorer.php b/contrib/simpletest/simpletest/scorer.php index cc1331b8..27776f4b 100644 --- a/contrib/simpletest/simpletest/scorer.php +++ b/contrib/simpletest/simpletest/scorer.php @@ -3,7 +3,7 @@ * base include file for SimpleTest * @package SimpleTest * @subpackage UnitTester - * @version $Id: scorer.php 1723 2008-04-08 00:34:10Z lastcraft $ + * @version $Id: scorer.php 2011 2011-04-29 08:22:48Z pp11 $ */ /**#@+*/ @@ -19,20 +19,20 @@ require_once(dirname(__FILE__) . '/invoker.php'); * @abstract */ class SimpleScorer { - var $_passes; - var $_fails; - var $_exceptions; - var $_is_dry_run; + private $passes; + private $fails; + private $exceptions; + private $is_dry_run; /** * Starts the test run with no results. * @access public */ - function SimpleScorer() { - $this->_passes = 0; - $this->_fails = 0; - $this->_exceptions = 0; - $this->_is_dry_run = false; + function __construct() { + $this->passes = 0; + $this->fails = 0; + $this->exceptions = 0; + $this->is_dry_run = false; } /** @@ -43,7 +43,7 @@ class SimpleScorer { * @access public */ function makeDry($is_dry = true) { - $this->_is_dry_run = $is_dry; + $this->is_dry_run = $is_dry; } /** @@ -53,7 +53,7 @@ class SimpleScorer { * @access public */ function shouldInvoke($test_case_name, $method) { - return ! $this->_is_dry_run; + return ! $this->is_dry_run; } /** @@ -63,7 +63,7 @@ class SimpleScorer { * @return SimpleInvoker Wrapped test runner. * @access public */ - function &createInvoker(&$invoker) { + function createInvoker($invoker) { return $invoker; } @@ -75,7 +75,7 @@ class SimpleScorer { * @access public */ function getStatus() { - if ($this->_exceptions + $this->_fails > 0) { + if ($this->exceptions + $this->fails > 0) { return false; } return true; @@ -136,7 +136,7 @@ class SimpleScorer { * @access public */ function paintPass($message) { - $this->_passes++; + $this->passes++; } /** @@ -145,7 +145,7 @@ class SimpleScorer { * @access public */ function paintFail($message) { - $this->_fails++; + $this->fails++; } /** @@ -155,7 +155,7 @@ class SimpleScorer { * @access public */ function paintError($message) { - $this->_exceptions++; + $this->exceptions++; } /** @@ -164,9 +164,9 @@ class SimpleScorer { * @access public */ function paintException($exception) { - $this->_exceptions++; + $this->exceptions++; } - + /** * Prints the message for skipping tests. * @param string $message Text of skip condition. @@ -181,7 +181,7 @@ class SimpleScorer { * @access public */ function getPassCount() { - return $this->_passes; + return $this->passes; } /** @@ -190,7 +190,7 @@ class SimpleScorer { * @access public */ function getFailCount() { - return $this->_fails; + return $this->fails; } /** @@ -200,7 +200,7 @@ class SimpleScorer { * @access public */ function getExceptionCount() { - return $this->_exceptions; + return $this->exceptions; } /** @@ -213,7 +213,7 @@ class SimpleScorer { /** * Paints a formatted ASCII message such as a - * variable dump. + * privateiable dump. * @param string $message Text to display. * @access public */ @@ -239,24 +239,23 @@ class SimpleScorer { * @subpackage UnitTester */ class SimpleReporter extends SimpleScorer { - var $_test_stack; - var $_size; - var $_progress; + private $test_stack; + private $size; + private $progress; /** * Starts the display with no results in. * @access public */ - function SimpleReporter() { - $this->SimpleScorer(); - $this->_test_stack = array(); - $this->_size = null; - $this->_progress = 0; + function __construct() { + parent::__construct(); + $this->test_stack = array(); + $this->size = null; + $this->progress = 0; } - + /** - * Gets the formatter for variables and other small - * generic data items. + * Gets the formatter for small generic data items. * @return SimpleDumper Formatter. * @access public */ @@ -274,13 +273,13 @@ class SimpleReporter extends SimpleScorer { * @access public */ function paintGroupStart($test_name, $size) { - if (! isset($this->_size)) { - $this->_size = $size; + if (! isset($this->size)) { + $this->size = $size; } - if (count($this->_test_stack) == 0) { + if (count($this->test_stack) == 0) { $this->paintHeader($test_name); } - $this->_test_stack[] = $test_name; + $this->test_stack[] = $test_name; } /** @@ -291,8 +290,8 @@ class SimpleReporter extends SimpleScorer { * @access public */ function paintGroupEnd($test_name) { - array_pop($this->_test_stack); - if (count($this->_test_stack) == 0) { + array_pop($this->test_stack); + if (count($this->test_stack) == 0) { $this->paintFooter($test_name); } } @@ -306,13 +305,13 @@ class SimpleReporter extends SimpleScorer { * @access public */ function paintCaseStart($test_name) { - if (! isset($this->_size)) { - $this->_size = 1; + if (! isset($this->size)) { + $this->size = 1; } - if (count($this->_test_stack) == 0) { + if (count($this->test_stack) == 0) { $this->paintHeader($test_name); } - $this->_test_stack[] = $test_name; + $this->test_stack[] = $test_name; } /** @@ -322,9 +321,9 @@ class SimpleReporter extends SimpleScorer { * @access public */ function paintCaseEnd($test_name) { - $this->_progress++; - array_pop($this->_test_stack); - if (count($this->_test_stack) == 0) { + $this->progress++; + array_pop($this->test_stack); + if (count($this->test_stack) == 0) { $this->paintFooter($test_name); } } @@ -335,7 +334,7 @@ class SimpleReporter extends SimpleScorer { * @access public */ function paintMethodStart($test_name) { - $this->_test_stack[] = $test_name; + $this->test_stack[] = $test_name; } /** @@ -345,7 +344,7 @@ class SimpleReporter extends SimpleScorer { * @access public */ function paintMethodEnd($test_name) { - array_pop($this->_test_stack); + array_pop($this->test_stack); } /** @@ -375,7 +374,7 @@ class SimpleReporter extends SimpleScorer { * @access public */ function getTestList() { - return $this->_test_stack; + return $this->test_stack; } /** @@ -386,7 +385,7 @@ class SimpleReporter extends SimpleScorer { * @access public */ function getTestCaseCount() { - return $this->_size; + return $this->size; } /** @@ -396,16 +395,15 @@ class SimpleReporter extends SimpleScorer { * @access public */ function getTestCaseProgress() { - return $this->_progress; + return $this->progress; } /** * Static check for running in the comand line. * @return boolean True if CLI. * @access public - * @static */ - function inCli() { + static function inCli() { return php_sapi_name() == 'cli'; } } @@ -416,14 +414,14 @@ class SimpleReporter extends SimpleScorer { * @subpackage UnitTester */ class SimpleReporterDecorator { - var $_reporter; + protected $reporter; /** * Mediates between the reporter and the test case. * @param SimpleScorer $reporter Reporter to receive events. */ - function SimpleReporterDecorator(&$reporter) { - $this->_reporter = &$reporter; + function __construct($reporter) { + $this->reporter = $reporter; } /** @@ -434,7 +432,7 @@ class SimpleReporterDecorator { * @access public */ function makeDry($is_dry = true) { - $this->_reporter->makeDry($is_dry); + $this->reporter->makeDry($is_dry); } /** @@ -445,39 +443,53 @@ class SimpleReporterDecorator { * @access public */ function getStatus() { - return $this->_reporter->getStatus(); + return $this->reporter->getStatus(); + } + + /** + * The nesting of the test cases so far. Not + * all reporters have this facility. + * @return array Test list if accessible. + * @access public + */ + function getTestList() { + if (method_exists($this->reporter, 'getTestList')) { + return $this->reporter->getTestList(); + } else { + return array(); + } } /** * The reporter has a veto on what should be run. - * @param string $test_case_name name of test case. + * @param string $test_case_name Name of test case. * @param string $method Name of test method. * @return boolean True if test should be run. * @access public */ function shouldInvoke($test_case_name, $method) { - return $this->_reporter->shouldInvoke($test_case_name, $method); + return $this->reporter->shouldInvoke($test_case_name, $method); } /** - * Can wrap the invoker in preperation for running + * Can wrap the invoker in preparation for running * a test. * @param SimpleInvoker $invoker Individual test runner. * @return SimpleInvoker Wrapped test runner. * @access public */ - function &createInvoker(&$invoker) { - return $this->_reporter->createInvoker($invoker); + function createInvoker($invoker) { + return $this->reporter->createInvoker($invoker); } - + /** - * Gets the formatter for variables and other small + * Gets the formatter for privateiables and other small * generic data items. * @return SimpleDumper Formatter. * @access public */ function getDumper() { - return $this->_reporter->getDumper(); + return $this->reporter->getDumper(); } /** @@ -487,7 +499,7 @@ class SimpleReporterDecorator { * @access public */ function paintGroupStart($test_name, $size) { - $this->_reporter->paintGroupStart($test_name, $size); + $this->reporter->paintGroupStart($test_name, $size); } /** @@ -496,7 +508,7 @@ class SimpleReporterDecorator { * @access public */ function paintGroupEnd($test_name) { - $this->_reporter->paintGroupEnd($test_name); + $this->reporter->paintGroupEnd($test_name); } /** @@ -505,7 +517,7 @@ class SimpleReporterDecorator { * @access public */ function paintCaseStart($test_name) { - $this->_reporter->paintCaseStart($test_name); + $this->reporter->paintCaseStart($test_name); } /** @@ -514,7 +526,7 @@ class SimpleReporterDecorator { * @access public */ function paintCaseEnd($test_name) { - $this->_reporter->paintCaseEnd($test_name); + $this->reporter->paintCaseEnd($test_name); } /** @@ -523,7 +535,7 @@ class SimpleReporterDecorator { * @access public */ function paintMethodStart($test_name) { - $this->_reporter->paintMethodStart($test_name); + $this->reporter->paintMethodStart($test_name); } /** @@ -532,7 +544,7 @@ class SimpleReporterDecorator { * @access public */ function paintMethodEnd($test_name) { - $this->_reporter->paintMethodEnd($test_name); + $this->reporter->paintMethodEnd($test_name); } /** @@ -541,7 +553,7 @@ class SimpleReporterDecorator { * @access public */ function paintPass($message) { - $this->_reporter->paintPass($message); + $this->reporter->paintPass($message); } /** @@ -550,7 +562,7 @@ class SimpleReporterDecorator { * @access public */ function paintFail($message) { - $this->_reporter->paintFail($message); + $this->reporter->paintFail($message); } /** @@ -560,7 +572,7 @@ class SimpleReporterDecorator { * @access public */ function paintError($message) { - $this->_reporter->paintError($message); + $this->reporter->paintError($message); } /** @@ -569,16 +581,16 @@ class SimpleReporterDecorator { * @access public */ function paintException($exception) { - $this->_reporter->paintException($exception); + $this->reporter->paintException($exception); } - + /** * Prints the message for skipping tests. * @param string $message Text of skip condition. * @access public */ function paintSkip($message) { - $this->_reporter->paintSkip($message); + $this->reporter->paintSkip($message); } /** @@ -587,7 +599,7 @@ class SimpleReporterDecorator { * @access public */ function paintMessage($message) { - $this->_reporter->paintMessage($message); + $this->reporter->paintMessage($message); } /** @@ -596,7 +608,7 @@ class SimpleReporterDecorator { * @access public */ function paintFormattedMessage($message) { - $this->_reporter->paintFormattedMessage($message); + $this->reporter->paintFormattedMessage($message); } /** @@ -608,8 +620,8 @@ class SimpleReporterDecorator { * test suite. * @access public */ - function paintSignal($type, &$payload) { - $this->_reporter->paintSignal($type, $payload); + function paintSignal($type, $payload) { + $this->reporter->paintSignal($type, $payload); } } @@ -620,15 +632,15 @@ class SimpleReporterDecorator { * @subpackage UnitTester */ class MultipleReporter { - var $_reporters = array(); + private $reporters = array(); /** * Adds a reporter to the subscriber list. * @param SimpleScorer $reporter Reporter to receive events. * @access public */ - function attachReporter(&$reporter) { - $this->_reporters[] = &$reporter; + function attachReporter($reporter) { + $this->reporters[] = $reporter; } /** @@ -639,8 +651,8 @@ class MultipleReporter { * @access public */ function makeDry($is_dry = true) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->makeDry($is_dry); + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->makeDry($is_dry); } } @@ -653,8 +665,8 @@ class MultipleReporter { * @access public */ function getStatus() { - for ($i = 0; $i < count($this->_reporters); $i++) { - if (! $this->_reporters[$i]->getStatus()) { + for ($i = 0; $i < count($this->reporters); $i++) { + if (! $this->reporters[$i]->getStatus()) { return false; } } @@ -669,8 +681,8 @@ class MultipleReporter { * @access public */ function shouldInvoke($test_case_name, $method) { - for ($i = 0; $i < count($this->_reporters); $i++) { - if (! $this->_reporters[$i]->shouldInvoke($test_case_name, $method)) { + for ($i = 0; $i < count($this->reporters); $i++) { + if (! $this->reporters[$i]->shouldInvoke($test_case_name, $method)) { return false; } } @@ -683,15 +695,15 @@ class MultipleReporter { * @return SimpleInvoker Wrapped test runner. * @access public */ - function &createInvoker(&$invoker) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $invoker = &$this->_reporters[$i]->createInvoker($invoker); + function createInvoker($invoker) { + for ($i = 0; $i < count($this->reporters); $i++) { + $invoker = $this->reporters[$i]->createInvoker($invoker); } return $invoker; } - + /** - * Gets the formatter for variables and other small + * Gets the formatter for privateiables and other small * generic data items. * @return SimpleDumper Formatter. * @access public @@ -707,8 +719,8 @@ class MultipleReporter { * @access public */ function paintGroupStart($test_name, $size) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->paintGroupStart($test_name, $size); + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->paintGroupStart($test_name, $size); } } @@ -718,8 +730,8 @@ class MultipleReporter { * @access public */ function paintGroupEnd($test_name) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->paintGroupEnd($test_name); + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->paintGroupEnd($test_name); } } @@ -729,8 +741,8 @@ class MultipleReporter { * @access public */ function paintCaseStart($test_name) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->paintCaseStart($test_name); + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->paintCaseStart($test_name); } } @@ -740,8 +752,8 @@ class MultipleReporter { * @access public */ function paintCaseEnd($test_name) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->paintCaseEnd($test_name); + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->paintCaseEnd($test_name); } } @@ -751,8 +763,8 @@ class MultipleReporter { * @access public */ function paintMethodStart($test_name) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->paintMethodStart($test_name); + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->paintMethodStart($test_name); } } @@ -762,8 +774,8 @@ class MultipleReporter { * @access public */ function paintMethodEnd($test_name) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->paintMethodEnd($test_name); + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->paintMethodEnd($test_name); } } @@ -773,8 +785,8 @@ class MultipleReporter { * @access public */ function paintPass($message) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->paintPass($message); + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->paintPass($message); } } @@ -784,8 +796,8 @@ class MultipleReporter { * @access public */ function paintFail($message) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->paintFail($message); + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->paintFail($message); } } @@ -796,19 +808,19 @@ class MultipleReporter { * @access public */ function paintError($message) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->paintError($message); + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->paintError($message); } } - + /** * Chains to the wrapped reporter. * @param Exception $exception Exception to display. * @access public */ function paintException($exception) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->paintException($exception); + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->paintException($exception); } } @@ -818,8 +830,8 @@ class MultipleReporter { * @access public */ function paintSkip($message) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->paintSkip($message); + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->paintSkip($message); } } @@ -829,8 +841,8 @@ class MultipleReporter { * @access public */ function paintMessage($message) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->paintMessage($message); + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->paintMessage($message); } } @@ -840,8 +852,8 @@ class MultipleReporter { * @access public */ function paintFormattedMessage($message) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->paintFormattedMessage($message); + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->paintFormattedMessage($message); } } @@ -854,9 +866,9 @@ class MultipleReporter { * test suite. * @access public */ - function paintSignal($type, &$payload) { - for ($i = 0; $i < count($this->_reporters); $i++) { - $this->_reporters[$i]->paintSignal($type, $payload); + function paintSignal($type, $payload) { + for ($i = 0; $i < count($this->reporters); $i++) { + $this->reporters[$i]->paintSignal($type, $payload); } } } diff --git a/contrib/simpletest/simpletest/selector.php b/contrib/simpletest/simpletest/selector.php old mode 100644 new mode 100755 index de044b85..ba2fed31 --- a/contrib/simpletest/simpletest/selector.php +++ b/contrib/simpletest/simpletest/selector.php @@ -3,7 +3,7 @@ * Base include file for SimpleTest. * @package SimpleTest * @subpackage WebTester - * @version $Id: selector.php 1723 2008-04-08 00:34:10Z lastcraft $ + * @version $Id: selector.php 1786 2008-04-26 17:32:20Z pp11 $ */ /**#@+ @@ -20,18 +20,22 @@ require_once(dirname(__FILE__) . '/encoding.php'); * @subpackage WebTester */ class SimpleByName { - var $_name; + private $name; /** * Stashes the name for later comparison. * @param string $name Name attribute to match. */ - function SimpleByName($name) { - $this->_name = $name; + function __construct($name) { + $this->name = $name; } + /** + * Accessor for name. + * @returns string $name Name to match. + */ function getName() { - return $this->_name; + return $this->name; } /** @@ -40,7 +44,7 @@ class SimpleByName { * @access public */ function isMatch($widget) { - return ($widget->getName() == $this->_name); + return ($widget->getName() == $this->name); } } @@ -51,14 +55,14 @@ class SimpleByName { * @subpackage WebTester */ class SimpleByLabel { - var $_label; + private $label; /** * Stashes the name for later comparison. * @param string $label Visible text to match. */ - function SimpleByLabel($label) { - $this->_label = $label; + function __construct($label) { + $this->label = $label; } /** @@ -71,7 +75,7 @@ class SimpleByLabel { if (! method_exists($widget, 'isLabel')) { return false; } - return $widget->isLabel($this->_label); + return $widget->isLabel($this->label); } } @@ -82,14 +86,14 @@ class SimpleByLabel { * @subpackage WebTester */ class SimpleById { - var $_id; + private $id; /** * Stashes the name for later comparison. * @param string $id ID atribute to match. */ - function SimpleById($id) { - $this->_id = $id; + function __construct($id) { + $this->id = $id; } /** @@ -98,7 +102,7 @@ class SimpleById { * @access public */ function isMatch($widget) { - return $widget->isId($this->_id); + return $widget->isId($this->id); } } @@ -109,14 +113,14 @@ class SimpleById { * @subpackage WebTester */ class SimpleByLabelOrName { - var $_label; + private $label; /** * Stashes the name/label for later comparison. * @param string $label Visible text to match. */ - function SimpleByLabelOrName($label) { - $this->_label = $label; + function __construct($label) { + $this->label = $label; } /** @@ -127,11 +131,11 @@ class SimpleByLabelOrName { */ function isMatch($widget) { if (method_exists($widget, 'isLabel')) { - if ($widget->isLabel($this->_label)) { + if ($widget->isLabel($this->label)) { return true; } } - return ($widget->getName() == $this->_label); + return ($widget->getName() == $this->label); } } ?> \ No newline at end of file diff --git a/contrib/simpletest/simpletest/shell_tester.php b/contrib/simpletest/simpletest/shell_tester.php index 7b98869e..9a3bd389 100644 --- a/contrib/simpletest/simpletest/shell_tester.php +++ b/contrib/simpletest/simpletest/shell_tester.php @@ -3,7 +3,7 @@ * base include file for SimpleTest * @package SimpleTest * @subpackage UnitTester - * @version $Id: shell_tester.php 1723 2008-04-08 00:34:10Z lastcraft $ + * @version $Id: shell_tester.php 2011 2011-04-29 08:22:48Z pp11 $ */ /**#@+ @@ -18,14 +18,14 @@ require_once(dirname(__FILE__) . '/test_case.php'); * @subpackage UnitTester */ class SimpleShell { - var $_output; + private $output; /** * Executes the shell comand and stashes the output. * @access public */ - function SimpleShell() { - $this->_output = false; + function __construct() { + $this->output = false; } /** @@ -37,8 +37,8 @@ class SimpleShell { * @access public */ function execute($command) { - $this->_output = false; - exec($command, $this->_output, $ret); + $this->output = false; + exec($command, $this->output, $ret); return $ret; } @@ -48,7 +48,7 @@ class SimpleShell { * @access public */ function getOutput() { - return implode("\n", $this->_output); + return implode("\n", $this->output); } /** @@ -57,7 +57,7 @@ class SimpleShell { * @access public */ function getOutputAsList() { - return $this->_output; + return $this->output; } } @@ -69,9 +69,9 @@ class SimpleShell { * @subpackage UnitTester */ class ShellTestCase extends SimpleTestCase { - var $_current_shell; - var $_last_status; - var $_last_command; + private $current_shell; + private $last_status; + private $last_command; /** * Creates an empty test case. Should be subclassed @@ -80,11 +80,11 @@ class ShellTestCase extends SimpleTestCase { * the class name if none specified. * @access public */ - function ShellTestCase($label = false) { - $this->SimpleTestCase($label); - $this->_current_shell = &$this->_createShell(); - $this->_last_status = false; - $this->_last_command = ''; + function __construct($label = false) { + parent::__construct($label); + $this->current_shell = $this->createShell(); + $this->last_status = false; + $this->last_command = ''; } /** @@ -94,10 +94,10 @@ class ShellTestCase extends SimpleTestCase { * @access public */ function execute($command) { - $shell = &$this->_getShell(); - $this->_last_status = $shell->execute($command); - $this->_last_command = $command; - return ($this->_last_status === 0); + $shell = $this->getShell(); + $this->last_status = $shell->execute($command); + $this->last_command = $command; + return ($this->last_status === 0); } /** @@ -114,7 +114,7 @@ class ShellTestCase extends SimpleTestCase { * @access public */ function getOutput() { - $shell = &$this->_getShell(); + $shell = $this->getShell(); return $shell->getOutput(); } @@ -124,7 +124,7 @@ class ShellTestCase extends SimpleTestCase { * @access public */ function getOutputAsList() { - $shell = &$this->_getShell(); + $shell = $this->getShell(); return $shell->getOutputAsList(); } @@ -154,7 +154,7 @@ class ShellTestCase extends SimpleTestCase { function assertFalse($result, $message = '%s') { return $this->assert(new FalseExpectation(), $result, $message); } - + /** * Will trigger a pass if the two parameters have * the same value only. Otherwise a fail. This @@ -171,7 +171,7 @@ class ShellTestCase extends SimpleTestCase { $second, $message); } - + /** * Will trigger a pass if the two parameters have * a different value. Otherwise a fail. This @@ -199,9 +199,9 @@ class ShellTestCase extends SimpleTestCase { */ function assertExitCode($status, $message = "%s") { $message = sprintf($message, "Expected status code of [$status] from [" . - $this->_last_command . "], but got [" . - $this->_last_status . "]"); - return $this->assertTrue($status === $this->_last_status, $message); + $this->last_command . "], but got [" . + $this->last_status . "]"); + return $this->assertTrue($status === $this->last_status, $message); } /** @@ -213,7 +213,7 @@ class ShellTestCase extends SimpleTestCase { * @access public */ function assertOutput($expected, $message = "%s") { - $shell = &$this->_getShell(); + $shell = $this->getShell(); return $this->assert( new EqualExpectation($expected), $shell->getOutput(), @@ -229,7 +229,7 @@ class ShellTestCase extends SimpleTestCase { * @access public */ function assertOutputPattern($pattern, $message = "%s") { - $shell = &$this->_getShell(); + $shell = $this->getShell(); return $this->assert( new PatternExpectation($pattern), $shell->getOutput(), @@ -245,7 +245,7 @@ class ShellTestCase extends SimpleTestCase { * @access public */ function assertNoOutputPattern($pattern, $message = "%s") { - $shell = &$this->_getShell(); + $shell = $this->getShell(); return $this->assert( new NoPatternExpectation($pattern), $shell->getOutput(), @@ -286,7 +286,6 @@ class ShellTestCase extends SimpleTestCase { * @access public */ function assertFilePattern($pattern, $path, $message = "%s") { - $shell = &$this->_getShell(); return $this->assert( new PatternExpectation($pattern), implode('', file($path)), @@ -303,7 +302,6 @@ class ShellTestCase extends SimpleTestCase { * @access public */ function assertNoFilePattern($pattern, $path, $message = "%s") { - $shell = &$this->_getShell(); return $this->assert( new NoPatternExpectation($pattern), implode('', file($path)), @@ -316,8 +314,8 @@ class ShellTestCase extends SimpleTestCase { * @return Shell Current shell. * @access protected */ - function &_getShell() { - return $this->_current_shell; + protected function getShell() { + return $this->current_shell; } /** @@ -325,9 +323,8 @@ class ShellTestCase extends SimpleTestCase { * @return Shell New shell object. * @access protected */ - function &_createShell() { - $shell = &new SimpleShell(); - return $shell; + protected function createShell() { + return new SimpleShell(); } } -?> +?> \ No newline at end of file diff --git a/contrib/simpletest/simpletest/simpletest.php b/contrib/simpletest/simpletest/simpletest.php index bab2c1a6..425c869a 100644 --- a/contrib/simpletest/simpletest/simpletest.php +++ b/contrib/simpletest/simpletest/simpletest.php @@ -3,17 +3,13 @@ * Global state for SimpleTest and kicker script in future versions. * @package SimpleTest * @subpackage UnitTester - * @version $Id: simpletest.php 1723 2008-04-08 00:34:10Z lastcraft $ + * @version $Id: simpletest.php 2011 2011-04-29 08:22:48Z pp11 $ */ /**#@+ * include SimpleTest files */ -if (version_compare(phpversion(), '5') >= 0) { - require_once(dirname(__FILE__) . '/reflection_php5.php'); -} else { - require_once(dirname(__FILE__) . '/reflection_php4.php'); -} +require_once(dirname(__FILE__) . '/reflection_php5.php'); require_once(dirname(__FILE__) . '/default_reporter.php'); require_once(dirname(__FILE__) . '/compatibility.php'); /**#@-*/ @@ -29,10 +25,8 @@ class SimpleTest { /** * Reads the SimpleTest version from the release file. * @return string Version string. - * @static - * @access public */ - function getVersion() { + static function getVersion() { $content = file(dirname(__FILE__) . '/VERSION'); return trim($content[0]); } @@ -40,14 +34,10 @@ class SimpleTest { /** * Sets the name of a test case to ignore, usually * because the class is an abstract case that should - * not be run. Once PHP4 is dropped this will disappear - * as a public method and "abstract" will rule. * @param string $class Add a class to ignore. - * @static - * @access public */ - function ignore($class) { - $registry = &SimpleTest::_getRegistry(); + static function ignore($class) { + $registry = &SimpleTest::getRegistry(); $registry['IgnoreList'][strtolower($class)] = true; } @@ -63,11 +53,9 @@ class SimpleTest { * the ignore() calls. It's just nice to have the ignore() * calls at the top of the file before the actual declarations. * @param array $classes Class names of interest. - * @static - * @access public */ - function ignoreParentsIfIgnored($classes) { - $registry = &SimpleTest::_getRegistry(); + static function ignoreParentsIfIgnored($classes) { + $registry = &SimpleTest::getRegistry(); foreach ($classes as $class) { if (SimpleTest::isIgnored($class)) { $reflection = new SimpleReflection($class); @@ -83,13 +71,11 @@ class SimpleTest { * which can be retrieved with SimpleTest :: preferred() method. * Instances of the same class are overwritten. * @param object $object Preferred object - * @static - * @access public * @see preferred() */ - function prefer(&$object) { - $registry = &SimpleTest::_getRegistry(); - $registry['Preferred'][] = &$object; + static function prefer($object) { + $registry = &SimpleTest::getRegistry(); + $registry['Preferred'][] = $object; } /** @@ -97,16 +83,14 @@ class SimpleTest { * can be applied in order to retrieve the object of the specific * class * @param array|string $classes Allowed classes or interfaces. - * @static - * @access public * @return array|object|null * @see prefer() */ - function &preferred($classes) { + static function preferred($classes) { if (! is_array($classes)) { $classes = array($classes); } - $registry = &SimpleTest::_getRegistry(); + $registry = &SimpleTest::getRegistry(); for ($i = count($registry['Preferred']) - 1; $i >= 0; $i--) { foreach ($classes as $class) { if (SimpleTestCompatibility::isA($registry['Preferred'][$i], $class)) { @@ -125,30 +109,12 @@ class SimpleTest { * use it. * @param string $class Class name to test. * @return boolean True if should not be run. - * @access public - * @static */ - function isIgnored($class) { - $registry = &SimpleTest::_getRegistry(); + static function isIgnored($class) { + $registry = &SimpleTest::getRegistry(); return isset($registry['IgnoreList'][strtolower($class)]); } - /** - * @deprecated - */ - function setMockBaseClass($mock_base) { - $registry = &SimpleTest::_getRegistry(); - $registry['MockBaseClass'] = $mock_base; - } - - /** - * @deprecated - */ - function getMockBaseClass() { - $registry = &SimpleTest::_getRegistry(); - return $registry['MockBaseClass']; - } - /** * Sets proxy to use on all requests for when * testing from behind a firewall. Set host @@ -157,10 +123,9 @@ class SimpleTest { * @param string $proxy Proxy host as URL. * @param string $username Proxy username for authentication. * @param string $password Proxy password for authentication. - * @access public */ - function useProxy($proxy, $username = false, $password = false) { - $registry = &SimpleTest::_getRegistry(); + static function useProxy($proxy, $username = false, $password = false) { + $registry = &SimpleTest::getRegistry(); $registry['DefaultProxy'] = $proxy; $registry['DefaultProxyUsername'] = $username; $registry['DefaultProxyPassword'] = $password; @@ -169,43 +134,60 @@ class SimpleTest { /** * Accessor for default proxy host. * @return string Proxy URL. - * @access public */ - function getDefaultProxy() { - $registry = &SimpleTest::_getRegistry(); + static function getDefaultProxy() { + $registry = &SimpleTest::getRegistry(); return $registry['DefaultProxy']; } /** * Accessor for default proxy username. * @return string Proxy username for authentication. - * @access public */ - function getDefaultProxyUsername() { - $registry = &SimpleTest::_getRegistry(); + static function getDefaultProxyUsername() { + $registry = &SimpleTest::getRegistry(); return $registry['DefaultProxyUsername']; } /** * Accessor for default proxy password. * @return string Proxy password for authentication. - * @access public */ - function getDefaultProxyPassword() { - $registry = &SimpleTest::_getRegistry(); + static function getDefaultProxyPassword() { + $registry = &SimpleTest::getRegistry(); return $registry['DefaultProxyPassword']; } + /** + * Accessor for default HTML parsers. + * @return array List of parsers to try in + * order until one responds true + * to can(). + */ + static function getParsers() { + $registry = &SimpleTest::getRegistry(); + return $registry['Parsers']; + } + + /** + * Set the list of HTML parsers to attempt to use by default. + * @param array $parsers List of parsers to try in + * order until one responds true + * to can(). + */ + static function setParsers($parsers) { + $registry = &SimpleTest::getRegistry(); + $registry['Parsers'] = $parsers; + } + /** * Accessor for global registry of options. * @return hash All stored values. - * @access private - * @static */ - function &_getRegistry() { + protected static function &getRegistry() { static $registry = false; if (! $registry) { - $registry = SimpleTest::_getDefaults(); + $registry = SimpleTest::getDefaults(); } return $registry; } @@ -214,10 +196,8 @@ class SimpleTest { * Accessor for the context of the current * test run. * @return SimpleTestContext Current test run. - * @access public - * @static */ - function &getContext() { + static function getContext() { static $context = false; if (! $context) { $context = new SimpleTestContext(); @@ -228,12 +208,10 @@ class SimpleTest { /** * Constant default values. * @return hash All registry defaults. - * @access private - * @static */ - function _getDefaults() { + protected static function getDefaults() { return array( - 'StubBaseClass' => 'SimpleStub', + 'Parsers' => false, 'MockBaseClass' => 'SimpleMock', 'IgnoreList' => array(), 'DefaultProxy' => false, @@ -241,6 +219,22 @@ class SimpleTest { 'DefaultProxyPassword' => false, 'Preferred' => array(new HtmlReporter(), new TextReporter(), new XmlReporter())); } + + /** + * @deprecated + */ + static function setMockBaseClass($mock_base) { + $registry = &SimpleTest::getRegistry(); + $registry['MockBaseClass'] = $mock_base; + } + + /** + * @deprecated + */ + static function getMockBaseClass() { + $registry = &SimpleTest::getRegistry(); + return $registry['MockBaseClass']; + } } /** @@ -252,16 +246,16 @@ class SimpleTest { * @package SimpleTest */ class SimpleTestContext { - var $_test; - var $_reporter; - var $_resources; + private $test; + private $reporter; + private $resources; /** * Clears down the current context. * @access public */ function clear() { - $this->_resources = array(); + $this->resources = array(); } /** @@ -269,20 +263,18 @@ class SimpleTestContext { * global instance can be used by the mock objects * to send message to the test cases. * @param SimpleTestCase $test Test case to register. - * @access public */ - function setTest(&$test) { + function setTest($test) { $this->clear(); - $this->_test = &$test; + $this->test = $test; } /** * Accessor for currently running test case. * @return SimpleTestCase Current test. - * @access public */ - function &getTest() { - return $this->_test; + function getTest() { + return $this->test; } /** @@ -290,33 +282,29 @@ class SimpleTestContext { * global instance can be used by the mock objects * to send messages. * @param SimpleReporter $reporter Reporter to register. - * @access public */ - function setReporter(&$reporter) { + function setReporter($reporter) { $this->clear(); - $this->_reporter = &$reporter; + $this->reporter = $reporter; } /** * Accessor for current reporter. * @return SimpleReporter Current reporter. - * @access public */ - function &getReporter() { - return $this->_reporter; + function getReporter() { + return $this->reporter; } /** * Accessor for the Singleton resource. * @return object Global resource. - * @access public - * @static */ - function &get($resource) { - if (! isset($this->_resources[$resource])) { - $this->_resources[$resource] = &new $resource(); + function get($resource) { + if (! isset($this->resources[$resource])) { + $this->resources[$resource] = new $resource(); } - return $this->_resources[$resource]; + return $this->resources[$resource]; } } @@ -327,15 +315,15 @@ class SimpleTestContext { * @subpackage UnitTester */ class SimpleStackTrace { - var $_prefixes; + private $prefixes; /** * Stashes the list of target prefixes. * @param array $prefixes List of method prefixes * to search for. */ - function SimpleStackTrace($prefixes) { - $this->_prefixes = $prefixes; + function __construct($prefixes) { + $this->prefixes = $prefixes; } /** @@ -344,15 +332,14 @@ class SimpleStackTrace { * @param array $stack List of stack frames. * @return string Snippet of test report with line * number and file. - * @access public */ function traceMethod($stack = false) { - $stack = $stack ? $stack : $this->_captureTrace(); + $stack = $stack ? $stack : $this->captureTrace(); foreach ($stack as $frame) { - if ($this->_frameLiesWithinSimpleTestFolder($frame)) { + if ($this->frameLiesWithinSimpleTestFolder($frame)) { continue; } - if ($this->_frameMatchesPrefix($frame)) { + if ($this->frameMatchesPrefix($frame)) { return ' at [' . $frame['file'] . ' line ' . $frame['line'] . ']'; } } @@ -363,9 +350,8 @@ class SimpleStackTrace { * Test to see if error is generated by SimpleTest itself. * @param array $frame PHP stack frame. * @return boolean True if a SimpleTest file. - * @access private */ - function _frameLiesWithinSimpleTestFolder($frame) { + protected function frameLiesWithinSimpleTestFolder($frame) { if (isset($frame['file'])) { $path = substr(SIMPLE_TEST, 0, -1); if (strpos($frame['file'], $path) === 0) { @@ -381,10 +367,9 @@ class SimpleStackTrace { * Tries to determine if the method call is an assert, etc. * @param array $frame PHP stack frame. * @return boolean True if matches a target. - * @access private */ - function _frameMatchesPrefix($frame) { - foreach ($this->_prefixes as $prefix) { + protected function frameMatchesPrefix($frame) { + foreach ($this->prefixes as $prefix) { if (strncmp($frame['function'], $prefix, strlen($prefix)) == 0) { return true; } @@ -395,84 +380,12 @@ class SimpleStackTrace { /** * Grabs a current stack trace. * @return array Fulle trace. - * @access private */ - function _captureTrace() { + protected function captureTrace() { if (function_exists('debug_backtrace')) { return array_reverse(debug_backtrace()); } return array(); } } - -/** - * @package SimpleTest - * @subpackage UnitTester - * @deprecated - */ -class SimpleTestOptions extends SimpleTest { - - /** - * @deprecated - */ - function getVersion() { - return Simpletest::getVersion(); - } - - /** - * @deprecated - */ - function ignore($class) { - return Simpletest::ignore($class); - } - - /** - * @deprecated - */ - function isIgnored($class) { - return Simpletest::isIgnored($class); - } - - /** - * @deprecated - */ - function setMockBaseClass($mock_base) { - return Simpletest::setMockBaseClass($mock_base); - } - - /** - * @deprecated - */ - function getMockBaseClass() { - return Simpletest::getMockBaseClass(); - } - - /** - * @deprecated - */ - function useProxy($proxy, $username = false, $password = false) { - return Simpletest::useProxy($proxy, $username, $password); - } - - /** - * @deprecated - */ - function getDefaultProxy() { - return Simpletest::getDefaultProxy(); - } - - /** - * @deprecated - */ - function getDefaultProxyUsername() { - return Simpletest::getDefaultProxyUsername(); - } - - /** - * @deprecated - */ - function getDefaultProxyPassword() { - return Simpletest::getDefaultProxyPassword(); - } -} -?> +?> \ No newline at end of file diff --git a/contrib/simpletest/simpletest/socket.php b/contrib/simpletest/simpletest/socket.php old mode 100644 new mode 100755 index 3ad5a9ff..06e8ca62 --- a/contrib/simpletest/simpletest/socket.php +++ b/contrib/simpletest/simpletest/socket.php @@ -3,7 +3,7 @@ * base include file for SimpleTest * @package SimpleTest * @subpackage MockObjects - * @version $Id: socket.php 1723 2008-04-08 00:34:10Z lastcraft $ + * @version $Id: socket.php 1953 2009-09-20 01:26:25Z jsweat $ */ /**#@+ @@ -19,14 +19,14 @@ require_once(dirname(__FILE__) . '/compatibility.php'); * @subpackage WebTester */ class SimpleStickyError { - var $_error = 'Constructor not chained'; + private $error = 'Constructor not chained'; /** * Sets the error to empty. * @access public */ - function SimpleStickyError() { - $this->_clearError(); + function __construct() { + $this->clearError(); } /** @@ -35,7 +35,7 @@ class SimpleStickyError { * @access public */ function isError() { - return ($this->_error != ''); + return ($this->error != ''); } /** @@ -45,7 +45,7 @@ class SimpleStickyError { * @access public */ function getError() { - return $this->_error; + return $this->error; } /** @@ -53,16 +53,112 @@ class SimpleStickyError { * @param string Error message to stash. * @access protected */ - function _setError($error) { - $this->_error = $error; + function setError($error) { + $this->error = $error; } /** * Resets the error state to no error. * @access protected */ - function _clearError() { - $this->_setError(''); + function clearError() { + $this->setError(''); + } +} + +/** + * @package SimpleTest + * @subpackage WebTester + */ +class SimpleFileSocket extends SimpleStickyError { + private $handle; + private $is_open = false; + private $sent = ''; + private $block_size; + + /** + * Opens a socket for reading and writing. + * @param SimpleUrl $file Target URI to fetch. + * @param integer $block_size Size of chunk to read. + * @access public + */ + function __construct($file, $block_size = 1024) { + parent::__construct(); + if (! ($this->handle = $this->openFile($file, $error))) { + $file_string = $file->asString(); + $this->setError("Cannot open [$file_string] with [$error]"); + return; + } + $this->is_open = true; + $this->block_size = $block_size; + } + + /** + * Writes some data to the socket and saves alocal copy. + * @param string $message String to send to socket. + * @return boolean True if successful. + * @access public + */ + function write($message) { + return true; + } + + /** + * Reads data from the socket. The error suppresion + * is a workaround for PHP4 always throwing a warning + * with a secure socket. + * @return integer/boolean Incoming bytes. False + * on error. + * @access public + */ + function read() { + $raw = @fread($this->handle, $this->block_size); + if ($raw === false) { + $this->setError('Cannot read from socket'); + $this->close(); + } + return $raw; + } + + /** + * Accessor for socket open state. + * @return boolean True if open. + * @access public + */ + function isOpen() { + return $this->is_open; + } + + /** + * Closes the socket preventing further reads. + * Cannot be reopened once closed. + * @return boolean True if successful. + * @access public + */ + function close() { + if (!$this->is_open) return false; + $this->is_open = false; + return fclose($this->handle); + } + + /** + * Accessor for content so far. + * @return string Bytes sent only. + * @access public + */ + function getSent() { + return $this->sent; + } + + /** + * Actually opens the low level socket. + * @param SimpleUrl $file SimpleUrl file target. + * @param string $error Recipient of error message. + * @param integer $timeout Maximum time to wait for connection. + * @access protected + */ + protected function openFile($file, &$error) { + return @fopen($file->asString(), 'r'); } } @@ -72,10 +168,10 @@ class SimpleStickyError { * @subpackage WebTester */ class SimpleSocket extends SimpleStickyError { - var $_handle; - var $_is_open = false; - var $_sent = ''; - var $lock_size; + private $handle; + private $is_open = false; + private $sent = ''; + private $lock_size; /** * Opens a socket for reading and writing. @@ -85,15 +181,15 @@ class SimpleSocket extends SimpleStickyError { * @param integer $block_size Size of chunk to read. * @access public */ - function SimpleSocket($host, $port, $timeout, $block_size = 255) { - $this->SimpleStickyError(); - if (! ($this->_handle = $this->_openSocket($host, $port, $error_number, $error, $timeout))) { - $this->_setError("Cannot open [$host:$port] with [$error] within [$timeout] seconds"); + function __construct($host, $port, $timeout, $block_size = 255) { + parent::__construct(); + if (! ($this->handle = $this->openSocket($host, $port, $error_number, $error, $timeout))) { + $this->setError("Cannot open [$host:$port] with [$error] within [$timeout] seconds"); return; } - $this->_is_open = true; - $this->_block_size = $block_size; - SimpleTestCompatibility::setTimeout($this->_handle, $timeout); + $this->is_open = true; + $this->block_size = $block_size; + SimpleTestCompatibility::setTimeout($this->handle, $timeout); } /** @@ -106,16 +202,16 @@ class SimpleSocket extends SimpleStickyError { if ($this->isError() || ! $this->isOpen()) { return false; } - $count = fwrite($this->_handle, $message); + $count = fwrite($this->handle, $message); if (! $count) { if ($count === false) { - $this->_setError('Cannot write to socket'); + $this->setError('Cannot write to socket'); $this->close(); } return false; } - fflush($this->_handle); - $this->_sent .= $message; + fflush($this->handle); + $this->sent .= $message; return true; } @@ -131,9 +227,9 @@ class SimpleSocket extends SimpleStickyError { if ($this->isError() || ! $this->isOpen()) { return false; } - $raw = @fread($this->_handle, $this->_block_size); + $raw = @fread($this->handle, $this->block_size); if ($raw === false) { - $this->_setError('Cannot read from socket'); + $this->setError('Cannot read from socket'); $this->close(); } return $raw; @@ -145,7 +241,7 @@ class SimpleSocket extends SimpleStickyError { * @access public */ function isOpen() { - return $this->_is_open; + return $this->is_open; } /** @@ -155,8 +251,8 @@ class SimpleSocket extends SimpleStickyError { * @access public */ function close() { - $this->_is_open = false; - return fclose($this->_handle); + $this->is_open = false; + return fclose($this->handle); } /** @@ -165,7 +261,7 @@ class SimpleSocket extends SimpleStickyError { * @access public */ function getSent() { - return $this->_sent; + return $this->sent; } /** @@ -177,7 +273,7 @@ class SimpleSocket extends SimpleStickyError { * @param integer $timeout Maximum time to wait for connection. * @access protected */ - function _openSocket($host, $port, &$error_number, &$error, $timeout) { + protected function openSocket($host, $port, &$error_number, &$error, $timeout) { return @fsockopen($host, $port, $error_number, $error, $timeout); } } @@ -196,8 +292,8 @@ class SimpleSecureSocket extends SimpleSocket { * @param integer $timeout Connection timeout in seconds. * @access public */ - function SimpleSecureSocket($host, $port, $timeout) { - $this->SimpleSocket($host, $port, $timeout); + function __construct($host, $port, $timeout) { + parent::__construct($host, $port, $timeout); } /** @@ -209,8 +305,8 @@ class SimpleSecureSocket extends SimpleSocket { * @param integer $timeout Maximum time to wait for connection. * @access protected */ - function _openSocket($host, $port, &$error_number, &$error, $timeout) { - return parent::_openSocket("tls://$host", $port, $error_number, $error, $timeout); + function openSocket($host, $port, &$error_number, &$error, $timeout) { + return parent::openSocket("tls://$host", $port, $error_number, $error, $timeout); } } ?> \ No newline at end of file diff --git a/contrib/simpletest/simpletest/tag.php b/contrib/simpletest/simpletest/tag.php index 7bccae20..afe649ec 100644 --- a/contrib/simpletest/simpletest/tag.php +++ b/contrib/simpletest/simpletest/tag.php @@ -3,26 +3,121 @@ * Base include file for SimpleTest. * @package SimpleTest * @subpackage WebTester - * @version $Id: tag.php 1723 2008-04-08 00:34:10Z lastcraft $ + * @version $Id: tag.php 2011 2011-04-29 08:22:48Z pp11 $ */ - + /**#@+ * include SimpleTest files */ -require_once(dirname(__FILE__) . '/parser.php'); +require_once(dirname(__FILE__) . '/page.php'); require_once(dirname(__FILE__) . '/encoding.php'); /**#@-*/ +/** + * Creates tags and widgets given HTML tag + * attributes. + * @package SimpleTest + * @subpackage WebTester + */ +class SimpleTagBuilder { + + /** + * Factory for the tag objects. Creates the + * appropriate tag object for the incoming tag name + * and attributes. + * @param string $name HTML tag name. + * @param hash $attributes Element attributes. + * @return SimpleTag Tag object. + * @access public + */ + function createTag($name, $attributes) { + static $map = array( + 'a' => 'SimpleAnchorTag', + 'title' => 'SimpleTitleTag', + 'base' => 'SimpleBaseTag', + 'button' => 'SimpleButtonTag', + 'textarea' => 'SimpleTextAreaTag', + 'option' => 'SimpleOptionTag', + 'label' => 'SimpleLabelTag', + 'form' => 'SimpleFormTag', + 'frame' => 'SimpleFrameTag'); + $attributes = $this->keysToLowerCase($attributes); + if (array_key_exists($name, $map)) { + $tag_class = $map[$name]; + return new $tag_class($attributes); + } elseif ($name == 'select') { + return $this->createSelectionTag($attributes); + } elseif ($name == 'input') { + return $this->createInputTag($attributes); + } + return new SimpleTag($name, $attributes); + } + + /** + * Factory for selection fields. + * @param hash $attributes Element attributes. + * @return SimpleTag Tag object. + * @access protected + */ + protected function createSelectionTag($attributes) { + if (isset($attributes['multiple'])) { + return new MultipleSelectionTag($attributes); + } + return new SimpleSelectionTag($attributes); + } + + /** + * Factory for input tags. + * @param hash $attributes Element attributes. + * @return SimpleTag Tag object. + * @access protected + */ + protected function createInputTag($attributes) { + if (! isset($attributes['type'])) { + return new SimpleTextTag($attributes); + } + $type = strtolower(trim($attributes['type'])); + $map = array( + 'submit' => 'SimpleSubmitTag', + 'image' => 'SimpleImageSubmitTag', + 'checkbox' => 'SimpleCheckboxTag', + 'radio' => 'SimpleRadioButtonTag', + 'text' => 'SimpleTextTag', + 'hidden' => 'SimpleTextTag', + 'password' => 'SimpleTextTag', + 'file' => 'SimpleUploadTag'); + if (array_key_exists($type, $map)) { + $tag_class = $map[$type]; + return new $tag_class($attributes); + } + return false; + } + + /** + * Make the keys lower case for case insensitive look-ups. + * @param hash $map Hash to convert. + * @return hash Unchanged values, but keys lower case. + * @access private + */ + protected function keysToLowerCase($map) { + $lower = array(); + foreach ($map as $key => $value) { + $lower[strtolower($key)] = $value; + } + return $lower; + } +} + /** * HTML or XML tag. * @package SimpleTest * @subpackage WebTester */ class SimpleTag { - var $_name; - var $_attributes; - var $_content; - + private $name; + private $attributes; + private $content; + /** * Starts with a named tag with attributes only. * @param string $name Tag name. @@ -31,12 +126,12 @@ class SimpleTag { * the keys must have been * converted to lower case. */ - function SimpleTag($name, $attributes) { - $this->_name = strtolower(trim($name)); - $this->_attributes = $attributes; - $this->_content = ''; + function __construct($name, $attributes) { + $this->name = strtolower(trim($name)); + $this->attributes = $attributes; + $this->content = ''; } - + /** * Check to see if the tag can have both start and * end tags with content in between. @@ -46,7 +141,7 @@ class SimpleTag { function expectEndTag() { return true; } - + /** * The current tag should not swallow all content for * itself as it's searchable page content. Private @@ -66,26 +161,37 @@ class SimpleTag { * @access public */ function addContent($content) { - $this->_content .= (string)$content; + $this->content .= (string)$content; + return $this; } - + /** * Adds an enclosed tag to the content. * @param SimpleTag $tag New tag. * @access public */ - function addTag(&$tag) { + function addTag($tag) { } - + + /** + * Adds multiple enclosed tags to the content. + * @param array List of SimpleTag objects to be added. + */ + function addTags($tags) { + foreach ($tags as $tag) { + $this->addTag($tag); + } + } + /** * Accessor for tag name. * @return string Name of tag. * @access public */ function getTagName() { - return $this->_name; + return $this->name; } - + /** * List of legal child elements. * @return array List of element names. @@ -94,7 +200,7 @@ class SimpleTag { function getChildElements() { return array(); } - + /** * Accessor for an attribute. * @param string $label Attribute name. @@ -103,31 +209,31 @@ class SimpleTag { */ function getAttribute($label) { $label = strtolower($label); - if (! isset($this->_attributes[$label])) { + if (! isset($this->attributes[$label])) { return false; } - return (string)$this->_attributes[$label]; + return (string)$this->attributes[$label]; } - + /** * Sets an attribute. * @param string $label Attribute name. * @return string $value New attribute value. * @access protected */ - function _setAttribute($label, $value) { - $this->_attributes[strtolower($label)] = $value; + protected function setAttribute($label, $value) { + $this->attributes[strtolower($label)] = $value; } - + /** * Accessor for the whole content so far. * @return string Content as big raw string. * @access public */ function getContent() { - return $this->_content; + return $this->content; } - + /** * Accessor for content reduced to visible text. Acts * like a text mode browser, normalising space and @@ -136,9 +242,9 @@ class SimpleTag { * @access public */ function getText() { - return SimpleHtmlSaxParser::normalise($this->_content); + return SimplePage::normalise($this->content); } - + /** * Test to see if id attribute matches. * @param string $id ID to test against. @@ -156,14 +262,14 @@ class SimpleTag { * @subpackage WebTester */ class SimpleBaseTag extends SimpleTag { - + /** * Starts with a named tag with attributes only. * @param hash $attributes Attribute names and * string values. */ - function SimpleBaseTag($attributes) { - $this->SimpleTag('base', $attributes); + function __construct($attributes) { + parent::__construct('base', $attributes); } /** @@ -182,14 +288,14 @@ class SimpleBaseTag extends SimpleTag { * @subpackage WebTester */ class SimpleTitleTag extends SimpleTag { - + /** * Starts with a named tag with attributes only. * @param hash $attributes Attribute names and * string values. */ - function SimpleTitleTag($attributes) { - $this->SimpleTag('title', $attributes); + function __construct($attributes) { + parent::__construct('title', $attributes); } } @@ -199,16 +305,16 @@ class SimpleTitleTag extends SimpleTag { * @subpackage WebTester */ class SimpleAnchorTag extends SimpleTag { - + /** * Starts with a named tag with attributes only. * @param hash $attributes Attribute names and * string values. */ - function SimpleAnchorTag($attributes) { - $this->SimpleTag('a', $attributes); + function __construct($attributes) { + parent::__construct('a', $attributes); } - + /** * Accessor for URL as string. * @return string Coerced as string. @@ -229,33 +335,33 @@ class SimpleAnchorTag extends SimpleTag { * @subpackage WebTester */ class SimpleWidget extends SimpleTag { - var $_value; - var $_label; - var $_is_set; - + private $value; + private $label; + private $is_set; + /** * Starts with a named tag with attributes only. * @param string $name Tag name. * @param hash $attributes Attribute names and * string values. */ - function SimpleWidget($name, $attributes) { - $this->SimpleTag($name, $attributes); - $this->_value = false; - $this->_label = false; - $this->_is_set = false; + function __construct($name, $attributes) { + parent::__construct($name, $attributes); + $this->value = false; + $this->label = false; + $this->is_set = false; } - + /** * Accessor for name submitted as the key in - * GET/POST variables hash. + * GET/POST privateiables hash. * @return string Parsed value. * @access public */ function getName() { return $this->getAttribute('name'); } - + /** * Accessor for default value parsed with the tag. * @return string Parsed value. @@ -264,7 +370,7 @@ class SimpleWidget extends SimpleTag { function getDefault() { return $this->getAttribute('value'); } - + /** * Accessor for currently set value or default if * none. @@ -273,12 +379,12 @@ class SimpleWidget extends SimpleTag { * @access public */ function getValue() { - if (! $this->_is_set) { + if (! $this->is_set) { return $this->getDefault(); } - return $this->_value; + return $this->value; } - + /** * Sets the current form element value. * @param string $value New value. @@ -286,20 +392,20 @@ class SimpleWidget extends SimpleTag { * @access public */ function setValue($value) { - $this->_value = $value; - $this->_is_set = true; + $this->value = $value; + $this->is_set = true; return true; } - + /** * Resets the form element value back to the * default. * @access public */ function resetValue() { - $this->_is_set = false; + $this->is_set = false; } - + /** * Allows setting of a label externally, say by a * label tag. @@ -307,9 +413,10 @@ class SimpleWidget extends SimpleTag { * @access public */ function setLabel($label) { - $this->_label = trim($label); + $this->label = trim($label); + return $this; } - + /** * Reads external or internal label. * @param string $label Label to test. @@ -317,15 +424,15 @@ class SimpleWidget extends SimpleTag { * @access public */ function isLabel($label) { - return $this->_label == trim($label); + return $this->label == trim($label); } - + /** * Dispatches the value into the form encoded packet. * @param SimpleEncoding $encoding Form packet. * @access public */ - function write(&$encoding) { + function write($encoding) { if ($this->getName()) { $encoding->add($this->getName(), $this->getValue()); } @@ -338,19 +445,19 @@ class SimpleWidget extends SimpleTag { * @subpackage WebTester */ class SimpleTextTag extends SimpleWidget { - + /** * Starts with a named tag with attributes only. * @param hash $attributes Attribute names and * string values. */ - function SimpleTextTag($attributes) { - $this->SimpleWidget('input', $attributes); + function __construct($attributes) { + parent::__construct('input', $attributes); if ($this->getAttribute('value') === false) { - $this->_setAttribute('value', ''); + $this->setAttribute('value', ''); } } - + /** * Tag contains no content. * @return boolean False. @@ -359,7 +466,7 @@ class SimpleTextTag extends SimpleWidget { function expectEndTag() { return false; } - + /** * Sets the current form element value. Cannot * change the value of a hidden field. @@ -381,19 +488,19 @@ class SimpleTextTag extends SimpleWidget { * @subpackage WebTester */ class SimpleSubmitTag extends SimpleWidget { - + /** * Starts with a named tag with attributes only. * @param hash $attributes Attribute names and * string values. */ - function SimpleSubmitTag($attributes) { - $this->SimpleWidget('input', $attributes); + function __construct($attributes) { + parent::__construct('input', $attributes); if ($this->getAttribute('value') === false) { - $this->_setAttribute('value', 'Submit'); + $this->setAttribute('value', 'Submit'); } } - + /** * Tag contains no end element. * @return boolean False. @@ -402,7 +509,7 @@ class SimpleSubmitTag extends SimpleWidget { function expectEndTag() { return false; } - + /** * Disables the setting of the button value. * @param string $value Ignored. @@ -412,7 +519,7 @@ class SimpleSubmitTag extends SimpleWidget { function setValue($value) { return false; } - + /** * Value of browser visible text. * @return string Visible label. @@ -421,7 +528,7 @@ class SimpleSubmitTag extends SimpleWidget { function getLabel() { return $this->getValue(); } - + /** * Test for a label match when searching. * @param string $label Label to test. @@ -432,23 +539,23 @@ class SimpleSubmitTag extends SimpleWidget { return trim($label) == trim($this->getLabel()); } } - + /** * Image button as input tag. * @package SimpleTest * @subpackage WebTester */ class SimpleImageSubmitTag extends SimpleWidget { - + /** * Starts with a named tag with attributes only. * @param hash $attributes Attribute names and * string values. */ - function SimpleImageSubmitTag($attributes) { - $this->SimpleWidget('input', $attributes); + function __construct($attributes) { + parent::__construct('input', $attributes); } - + /** * Tag contains no end element. * @return boolean False. @@ -457,7 +564,7 @@ class SimpleImageSubmitTag extends SimpleWidget { function expectEndTag() { return false; } - + /** * Disables the setting of the button value. * @param string $value Ignored. @@ -467,7 +574,7 @@ class SimpleImageSubmitTag extends SimpleWidget { function setValue($value) { return false; } - + /** * Value of browser visible text. * @return string Visible label. @@ -479,7 +586,7 @@ class SimpleImageSubmitTag extends SimpleWidget { } return $this->getAttribute('alt'); } - + /** * Test for a label match when searching. * @param string $label Label to test. @@ -489,7 +596,7 @@ class SimpleImageSubmitTag extends SimpleWidget { function isLabel($label) { return trim($label) == trim($this->getLabel()); } - + /** * Dispatches the value into the form encoded packet. * @param SimpleEncoding $encoding Form packet. @@ -497,7 +604,7 @@ class SimpleImageSubmitTag extends SimpleWidget { * @param integer $y Y coordinate of click. * @access public */ - function write(&$encoding, $x, $y) { + function write($encoding, $x = 1, $y = 1) { if ($this->getName()) { $encoding->add($this->getName() . '.x', $x); $encoding->add($this->getName() . '.y', $y); @@ -507,24 +614,24 @@ class SimpleImageSubmitTag extends SimpleWidget { } } } - + /** * Submit button as button tag. * @package SimpleTest * @subpackage WebTester */ class SimpleButtonTag extends SimpleWidget { - + /** * Starts with a named tag with attributes only. * Defaults are very browser dependent. * @param hash $attributes Attribute names and * string values. */ - function SimpleButtonTag($attributes) { - $this->SimpleWidget('button', $attributes); + function __construct($attributes) { + parent::__construct('button', $attributes); } - + /** * Check to see if the tag can have both start and * end tags with content in between. @@ -534,7 +641,7 @@ class SimpleButtonTag extends SimpleWidget { function expectEndTag() { return true; } - + /** * Disables the setting of the button value. * @param string $value Ignored. @@ -544,7 +651,7 @@ class SimpleButtonTag extends SimpleWidget { function setValue($value) { return false; } - + /** * Value of browser visible text. * @return string Visible label. @@ -553,7 +660,7 @@ class SimpleButtonTag extends SimpleWidget { function getLabel() { return $this->getContent(); } - + /** * Test for a label match when searching. * @param string $label Label to test. @@ -571,25 +678,25 @@ class SimpleButtonTag extends SimpleWidget { * @subpackage WebTester */ class SimpleTextAreaTag extends SimpleWidget { - + /** * Starts with a named tag with attributes only. * @param hash $attributes Attribute names and * string values. */ - function SimpleTextAreaTag($attributes) { - $this->SimpleWidget('textarea', $attributes); + function __construct($attributes) { + parent::__construct('textarea', $attributes); } - + /** * Accessor for starting value. * @return string Parsed value. * @access public */ function getDefault() { - return $this->_wrap(SimpleHtmlSaxParser::decodeHtml($this->getContent())); + return $this->wrap(html_entity_decode($this->getContent(), ENT_QUOTES)); } - + /** * Applies word wrapping if needed. * @param string $value New value. @@ -597,15 +704,15 @@ class SimpleTextAreaTag extends SimpleWidget { * @access public */ function setValue($value) { - return parent::setValue($this->_wrap($value)); + return parent::setValue($this->wrap($value)); } - + /** * Test to see if text should be wrapped. * @return boolean True if wrapping on. * @access private */ - function _wrapIsEnabled() { + function wrapIsEnabled() { if ($this->getAttribute('cols')) { $wrap = $this->getAttribute('wrap'); if (($wrap == 'physical') || ($wrap == 'hard')) { @@ -614,7 +721,7 @@ class SimpleTextAreaTag extends SimpleWidget { } return false; } - + /** * Performs the formatting that is peculiar to * this tag. There is strange behaviour in this @@ -625,13 +732,13 @@ class SimpleTextAreaTag extends SimpleWidget { * returns and line feeds * @access private */ - function _wrap($text) { + protected function wrap($text) { $text = str_replace("\r\r\n", "\r\n", str_replace("\n", "\r\n", $text)); $text = str_replace("\r\n\n", "\r\n", str_replace("\r", "\r\n", $text)); if (strncmp($text, "\r\n", strlen("\r\n")) == 0) { $text = substr($text, strlen("\r\n")); } - if ($this->_wrapIsEnabled()) { + if ($this->wrapIsEnabled()) { return wordwrap( $text, (integer)$this->getAttribute('cols'), @@ -639,7 +746,7 @@ class SimpleTextAreaTag extends SimpleWidget { } return $text; } - + /** * The content of textarea is not part of the page. * @return boolean True. @@ -656,16 +763,16 @@ class SimpleTextAreaTag extends SimpleWidget { * @subpackage WebTester */ class SimpleUploadTag extends SimpleWidget { - + /** * Starts with attributes only. * @param hash $attributes Attribute names and * string values. */ - function SimpleUploadTag($attributes) { - $this->SimpleWidget('input', $attributes); + function __construct($attributes) { + parent::__construct('input', $attributes); } - + /** * Tag contains no content. * @return boolean False. @@ -674,13 +781,13 @@ class SimpleUploadTag extends SimpleWidget { function expectEndTag() { return false; } - + /** * Dispatches the value into the form encoded packet. * @param SimpleEncoding $encoding Form packet. * @access public */ - function write(&$encoding) { + function write($encoding) { if (! file_exists($this->getValue())) { return; } @@ -697,39 +804,40 @@ class SimpleUploadTag extends SimpleWidget { * @subpackage WebTester */ class SimpleSelectionTag extends SimpleWidget { - var $_options; - var $_choice; - + private $options; + private $choice; + /** * Starts with attributes only. * @param hash $attributes Attribute names and * string values. */ - function SimpleSelectionTag($attributes) { - $this->SimpleWidget('select', $attributes); - $this->_options = array(); - $this->_choice = false; + function __construct($attributes) { + parent::__construct('select', $attributes); + $this->options = array(); + $this->choice = false; } - + /** * Adds an option tag to a selection field. * @param SimpleOptionTag $tag New option. * @access public */ - function addTag(&$tag) { + function addTag($tag) { if ($tag->getTagName() == 'option') { - $this->_options[] = &$tag; + $this->options[] = $tag; } } - + /** * Text within the selection element is ignored. * @param string $content Ignored. * @access public */ function addContent($content) { + return $this; } - + /** * Scans options for defaults. If none, then * the first option is selected. @@ -737,17 +845,17 @@ class SimpleSelectionTag extends SimpleWidget { * @access public */ function getDefault() { - for ($i = 0, $count = count($this->_options); $i < $count; $i++) { - if ($this->_options[$i]->getAttribute('selected') !== false) { - return $this->_options[$i]->getDefault(); + for ($i = 0, $count = count($this->options); $i < $count; $i++) { + if ($this->options[$i]->getAttribute('selected') !== false) { + return $this->options[$i]->getDefault(); } } if ($count > 0) { - return $this->_options[0]->getDefault(); + return $this->options[0]->getDefault(); } return ''; } - + /** * Can only set allowed values. * @param string $value New choice. @@ -755,15 +863,15 @@ class SimpleSelectionTag extends SimpleWidget { * @access public */ function setValue($value) { - for ($i = 0, $count = count($this->_options); $i < $count; $i++) { - if ($this->_options[$i]->isValue($value)) { - $this->_choice = $i; + for ($i = 0, $count = count($this->options); $i < $count; $i++) { + if ($this->options[$i]->isValue($value)) { + $this->choice = $i; return true; } } return false; } - + /** * Accessor for current selection value. * @return string Value attribute or @@ -771,10 +879,10 @@ class SimpleSelectionTag extends SimpleWidget { * @access public */ function getValue() { - if ($this->_choice === false) { + if ($this->choice === false) { return $this->getDefault(); } - return $this->_options[$this->_choice]->getValue(); + return $this->options[$this->choice]->getValue(); } } @@ -784,39 +892,40 @@ class SimpleSelectionTag extends SimpleWidget { * @subpackage WebTester */ class MultipleSelectionTag extends SimpleWidget { - var $_options; - var $_values; - + private $options; + private $values; + /** * Starts with attributes only. * @param hash $attributes Attribute names and * string values. */ - function MultipleSelectionTag($attributes) { - $this->SimpleWidget('select', $attributes); - $this->_options = array(); - $this->_values = false; + function __construct($attributes) { + parent::__construct('select', $attributes); + $this->options = array(); + $this->values = false; } - + /** * Adds an option tag to a selection field. * @param SimpleOptionTag $tag New option. * @access public */ - function addTag(&$tag) { + function addTag($tag) { if ($tag->getTagName() == 'option') { - $this->_options[] = &$tag; + $this->options[] = &$tag; } } - + /** * Text within the selection element is ignored. * @param string $content Ignored. * @access public */ function addContent($content) { + return $this; } - + /** * Scans options for defaults to populate the * value array(). @@ -825,14 +934,14 @@ class MultipleSelectionTag extends SimpleWidget { */ function getDefault() { $default = array(); - for ($i = 0, $count = count($this->_options); $i < $count; $i++) { - if ($this->_options[$i]->getAttribute('selected') !== false) { - $default[] = $this->_options[$i]->getDefault(); + for ($i = 0, $count = count($this->options); $i < $count; $i++) { + if ($this->options[$i]->getAttribute('selected') !== false) { + $default[] = $this->options[$i]->getDefault(); } } return $default; } - + /** * Can only set allowed values. Any illegal value * will result in a failure, but all correct values @@ -845,9 +954,9 @@ class MultipleSelectionTag extends SimpleWidget { $achieved = array(); foreach ($desired as $value) { $success = false; - for ($i = 0, $count = count($this->_options); $i < $count; $i++) { - if ($this->_options[$i]->isValue($value)) { - $achieved[] = $this->_options[$i]->getValue(); + for ($i = 0, $count = count($this->options); $i < $count; $i++) { + if ($this->options[$i]->isValue($value)) { + $achieved[] = $this->options[$i]->getValue(); $success = true; break; } @@ -856,20 +965,20 @@ class MultipleSelectionTag extends SimpleWidget { return false; } } - $this->_values = $achieved; + $this->values = $achieved; return true; } - + /** * Accessor for current selection value. * @return array List of currently set options. * @access public */ function getValue() { - if ($this->_values === false) { + if ($this->values === false) { return $this->getDefault(); } - return $this->_values; + return $this->values; } } @@ -879,14 +988,14 @@ class MultipleSelectionTag extends SimpleWidget { * @subpackage WebTester */ class SimpleOptionTag extends SimpleWidget { - + /** * Stashes the attributes. */ - function SimpleOptionTag($attributes) { - $this->SimpleWidget('option', $attributes); + function __construct($attributes) { + parent::__construct('option', $attributes); } - + /** * Does nothing. * @param string $value Ignored. @@ -896,7 +1005,7 @@ class SimpleOptionTag extends SimpleWidget { function setValue($value) { return false; } - + /** * Test to see if a value matches the option. * @param string $compare Value to compare with. @@ -908,9 +1017,9 @@ class SimpleOptionTag extends SimpleWidget { if (trim($this->getValue()) == $compare) { return true; } - return trim($this->getContent()) == $compare; + return trim(strip_tags($this->getContent())) == $compare; } - + /** * Accessor for starting value. Will be set to * the option label if no value exists. @@ -919,11 +1028,11 @@ class SimpleOptionTag extends SimpleWidget { */ function getDefault() { if ($this->getAttribute('value') === false) { - return $this->getContent(); + return strip_tags($this->getContent()); } return $this->getAttribute('value'); } - + /** * The content of options is not part of the page. * @return boolean True. @@ -940,18 +1049,18 @@ class SimpleOptionTag extends SimpleWidget { * @subpackage WebTester */ class SimpleRadioButtonTag extends SimpleWidget { - + /** * Stashes the attributes. * @param array $attributes Hash of attributes. */ - function SimpleRadioButtonTag($attributes) { - $this->SimpleWidget('input', $attributes); + function __construct($attributes) { + parent::__construct('input', $attributes); if ($this->getAttribute('value') === false) { - $this->_setAttribute('value', 'on'); + $this->setAttribute('value', 'on'); } } - + /** * Tag contains no content. * @return boolean False. @@ -960,7 +1069,7 @@ class SimpleRadioButtonTag extends SimpleWidget { function expectEndTag() { return false; } - + /** * The only allowed value sn the one in the * "value" attribute. @@ -977,7 +1086,7 @@ class SimpleRadioButtonTag extends SimpleWidget { } return parent::setValue($value); } - + /** * Accessor for starting value. * @return string Parsed value. @@ -997,19 +1106,19 @@ class SimpleRadioButtonTag extends SimpleWidget { * @subpackage WebTester */ class SimpleCheckboxTag extends SimpleWidget { - + /** * Starts with attributes only. * @param hash $attributes Attribute names and * string values. */ - function SimpleCheckboxTag($attributes) { - $this->SimpleWidget('input', $attributes); + function __construct($attributes) { + parent::__construct('input', $attributes); if ($this->getAttribute('value') === false) { - $this->_setAttribute('value', 'on'); + $this->setAttribute('value', 'on'); } } - + /** * Tag contains no content. * @return boolean False. @@ -1018,7 +1127,7 @@ class SimpleCheckboxTag extends SimpleWidget { function expectEndTag() { return false; } - + /** * The only allowed value in the one in the * "value" attribute. The default for this @@ -1040,7 +1149,7 @@ class SimpleCheckboxTag extends SimpleWidget { } return parent::setValue($value); } - + /** * Accessor for starting value. The default * value is "on". @@ -1061,24 +1170,24 @@ class SimpleCheckboxTag extends SimpleWidget { * @subpackage WebTester */ class SimpleTagGroup { - var $_widgets = array(); + private $widgets = array(); /** * Adds a tag to the group. * @param SimpleWidget $widget * @access public */ - function addWidget(&$widget) { - $this->_widgets[] = &$widget; + function addWidget($widget) { + $this->widgets[] = $widget; } - + /** * Accessor to widget set. * @return array All widgets. * @access protected */ - function &_getWidgets() { - return $this->_widgets; + protected function &getWidgets() { + return $this->widgets; } /** @@ -1090,7 +1199,7 @@ class SimpleTagGroup { function getAttribute($label) { return false; } - + /** * Fetches the name for the widget from the first * member. @@ -1098,11 +1207,11 @@ class SimpleTagGroup { * @access public */ function getName() { - if (count($this->_widgets) > 0) { - return $this->_widgets[0]->getName(); + if (count($this->widgets) > 0) { + return $this->widgets[0]->getName(); } } - + /** * Scans the widgets for one with the appropriate * ID field. @@ -1111,14 +1220,14 @@ class SimpleTagGroup { * @access public */ function isId($id) { - for ($i = 0, $count = count($this->_widgets); $i < $count; $i++) { - if ($this->_widgets[$i]->isId($id)) { + for ($i = 0, $count = count($this->widgets); $i < $count; $i++) { + if ($this->widgets[$i]->isId($id)) { return true; } } return false; } - + /** * Scans the widgets for one with the appropriate * attached label. @@ -1127,20 +1236,20 @@ class SimpleTagGroup { * @access public */ function isLabel($label) { - for ($i = 0, $count = count($this->_widgets); $i < $count; $i++) { - if ($this->_widgets[$i]->isLabel($label)) { + for ($i = 0, $count = count($this->widgets); $i < $count; $i++) { + if ($this->widgets[$i]->isLabel($label)) { return true; } } return false; } - + /** * Dispatches the value into the form encoded packet. * @param SimpleEncoding $encoding Form packet. * @access public */ - function write(&$encoding) { + function write($encoding) { $encoding->add($this->getName(), $this->getValue()); } } @@ -1151,7 +1260,7 @@ class SimpleTagGroup { * @subpackage WebTester */ class SimpleCheckboxGroup extends SimpleTagGroup { - + /** * Accessor for current selected widget or false * if none. @@ -1160,15 +1269,15 @@ class SimpleCheckboxGroup extends SimpleTagGroup { */ function getValue() { $values = array(); - $widgets = &$this->_getWidgets(); + $widgets = $this->getWidgets(); for ($i = 0, $count = count($widgets); $i < $count; $i++) { if ($widgets[$i]->getValue() !== false) { $values[] = $widgets[$i]->getValue(); } } - return $this->_coerceValues($values); + return $this->coerceValues($values); } - + /** * Accessor for starting value that is active. * @return string/array Widget values or false if none. @@ -1176,15 +1285,15 @@ class SimpleCheckboxGroup extends SimpleTagGroup { */ function getDefault() { $values = array(); - $widgets = &$this->_getWidgets(); + $widgets = $this->getWidgets(); for ($i = 0, $count = count($widgets); $i < $count; $i++) { if ($widgets[$i]->getDefault() !== false) { $values[] = $widgets[$i]->getDefault(); } } - return $this->_coerceValues($values); + return $this->coerceValues($values); } - + /** * Accessor for current set values. * @param string/array/boolean $values Either a single string, a @@ -1193,11 +1302,11 @@ class SimpleCheckboxGroup extends SimpleTagGroup { * @access public */ function setValue($values) { - $values = $this->_makeArray($values); - if (! $this->_valuesArePossible($values)) { + $values = $this->makeArray($values); + if (! $this->valuesArePossible($values)) { return false; } - $widgets = &$this->_getWidgets(); + $widgets = $this->getWidgets(); for ($i = 0, $count = count($widgets); $i < $count; $i++) { $possible = $widgets[$i]->getAttribute('value'); if (in_array($widgets[$i]->getAttribute('value'), $values)) { @@ -1208,7 +1317,7 @@ class SimpleCheckboxGroup extends SimpleTagGroup { } return true; } - + /** * Tests to see if a possible value set is legal. * @param string/array/boolean $values Either a single string, a @@ -1217,9 +1326,9 @@ class SimpleCheckboxGroup extends SimpleTagGroup { * missing value. * @access private */ - function _valuesArePossible($values) { + protected function valuesArePossible($values) { $matches = array(); - $widgets = &$this->_getWidgets(); + $widgets = &$this->getWidgets(); for ($i = 0, $count = count($widgets); $i < $count; $i++) { $possible = $widgets[$i]->getAttribute('value'); if (in_array($possible, $values)) { @@ -1228,7 +1337,7 @@ class SimpleCheckboxGroup extends SimpleTagGroup { } return ($values == $matches); } - + /** * Converts the output to an appropriate format. This means * that no values is false, a single value is just that @@ -1237,7 +1346,7 @@ class SimpleCheckboxGroup extends SimpleTagGroup { * @return string/array/boolean Expected format for a tag. * @access private */ - function _coerceValues($values) { + protected function coerceValues($values) { if (count($values) == 0) { return false; } elseif (count($values) == 1) { @@ -1246,7 +1355,7 @@ class SimpleCheckboxGroup extends SimpleTagGroup { return $values; } } - + /** * Converts false or string into array. The opposite of * the coercian method. @@ -1256,7 +1365,7 @@ class SimpleCheckboxGroup extends SimpleTagGroup { * @return array List of values, possibly empty. * @access private */ - function _makeArray($value) { + protected function makeArray($value) { if ($value === false) { return array(); } @@ -1274,7 +1383,7 @@ class SimpleCheckboxGroup extends SimpleTagGroup { * @subpackage WebTester */ class SimpleRadioGroup extends SimpleTagGroup { - + /** * Each tag is tried in turn until one is * successfully set. The others will be @@ -1284,11 +1393,11 @@ class SimpleRadioGroup extends SimpleTagGroup { * @access public */ function setValue($value) { - if (! $this->_valueIsPossible($value)) { + if (! $this->valueIsPossible($value)) { return false; } $index = false; - $widgets = &$this->_getWidgets(); + $widgets = $this->getWidgets(); for ($i = 0, $count = count($widgets); $i < $count; $i++) { if (! $widgets[$i]->setValue($value)) { $widgets[$i]->setValue(false); @@ -1296,15 +1405,15 @@ class SimpleRadioGroup extends SimpleTagGroup { } return true; } - + /** * Tests to see if a value is allowed. * @param string Attempted value. * @return boolean True if a valid value. * @access private */ - function _valueIsPossible($value) { - $widgets = &$this->_getWidgets(); + protected function valueIsPossible($value) { + $widgets = $this->getWidgets(); for ($i = 0, $count = count($widgets); $i < $count; $i++) { if ($widgets[$i]->getAttribute('value') == $value) { return true; @@ -1312,7 +1421,7 @@ class SimpleRadioGroup extends SimpleTagGroup { } return false; } - + /** * Accessor for current selected widget or false * if none. @@ -1321,7 +1430,7 @@ class SimpleRadioGroup extends SimpleTagGroup { * @access public */ function getValue() { - $widgets = &$this->_getWidgets(); + $widgets = $this->getWidgets(); for ($i = 0, $count = count($widgets); $i < $count; $i++) { if ($widgets[$i]->getValue() !== false) { return $widgets[$i]->getValue(); @@ -1329,7 +1438,7 @@ class SimpleRadioGroup extends SimpleTagGroup { } return false; } - + /** * Accessor for starting value that is active. * @return string/boolean Value of first checked @@ -1337,7 +1446,7 @@ class SimpleRadioGroup extends SimpleTagGroup { * @access public */ function getDefault() { - $widgets = &$this->_getWidgets(); + $widgets = $this->getWidgets(); for ($i = 0, $count = count($widgets); $i < $count; $i++) { if ($widgets[$i]->getDefault() !== false) { return $widgets[$i]->getDefault(); @@ -1353,16 +1462,16 @@ class SimpleRadioGroup extends SimpleTagGroup { * @subpackage WebTester */ class SimpleLabelTag extends SimpleTag { - + /** * Starts with a named tag with attributes only. * @param hash $attributes Attribute names and * string values. */ - function SimpleLabelTag($attributes) { - $this->SimpleTag('label', $attributes); + function __construct($attributes) { + parent::__construct('label', $attributes); } - + /** * Access for the ID to attach the label to. * @return string For attribute. @@ -1379,14 +1488,14 @@ class SimpleLabelTag extends SimpleTag { * @subpackage WebTester */ class SimpleFormTag extends SimpleTag { - + /** * Starts with a named tag with attributes only. * @param hash $attributes Attribute names and * string values. */ - function SimpleFormTag($attributes) { - $this->SimpleTag('form', $attributes); + function __construct($attributes) { + parent::__construct('form', $attributes); } } @@ -1396,16 +1505,16 @@ class SimpleFormTag extends SimpleTag { * @subpackage WebTester */ class SimpleFrameTag extends SimpleTag { - + /** * Starts with a named tag with attributes only. * @param hash $attributes Attribute names and * string values. */ - function SimpleFrameTag($attributes) { - $this->SimpleTag('frame', $attributes); + function __construct($attributes) { + parent::__construct('frame', $attributes); } - + /** * Tag contains no content. * @return boolean False. diff --git a/contrib/simpletest/simpletest/test.zip b/contrib/simpletest/simpletest/test.zip deleted file mode 100644 index 46bccfbc..00000000 Binary files a/contrib/simpletest/simpletest/test.zip and /dev/null differ diff --git a/contrib/simpletest/simpletest/test_case.php b/contrib/simpletest/simpletest/test_case.php index e5b22983..ba023c3b 100644 --- a/contrib/simpletest/simpletest/test_case.php +++ b/contrib/simpletest/simpletest/test_case.php @@ -3,7 +3,7 @@ * Base include file for SimpleTest * @package SimpleTest * @subpackage UnitTester - * @version $Id: test_case.php 1726 2008-04-08 01:20:10Z lastcraft $ + * @version $Id: test_case.php 2012 2011-04-29 08:57:00Z pp11 $ */ /**#@+ @@ -17,19 +17,15 @@ require_once(dirname(__FILE__) . '/scorer.php'); require_once(dirname(__FILE__) . '/expectation.php'); require_once(dirname(__FILE__) . '/dumper.php'); require_once(dirname(__FILE__) . '/simpletest.php'); -if (version_compare(phpversion(), '5') >= 0) { - require_once(dirname(__FILE__) . '/exceptions.php'); - require_once(dirname(__FILE__) . '/reflection_php5.php'); -} else { - require_once(dirname(__FILE__) . '/reflection_php4.php'); -} +require_once(dirname(__FILE__) . '/exceptions.php'); +require_once(dirname(__FILE__) . '/reflection_php5.php'); +/**#@-*/ if (! defined('SIMPLE_TEST')) { /** * @ignore */ define('SIMPLE_TEST', dirname(__FILE__) . DIRECTORY_SEPARATOR); } -/**#@-*/ /** * Basic test case. This is the smallest unit of a test @@ -40,10 +36,10 @@ if (! defined('SIMPLE_TEST')) { * @subpackage UnitTester */ class SimpleTestCase { - var $_label = false; - var $_reporter; - var $_observers; - var $_should_skip = false; + private $label = false; + protected $reporter; + private $observers; + private $should_skip = false; /** * Sets up the test with no display. @@ -51,9 +47,9 @@ class SimpleTestCase { * the class name is used. * @access public */ - function SimpleTestCase($label = false) { + function __construct($label = false) { if ($label) { - $this->_label = $label; + $this->label = $label; } } @@ -63,7 +59,7 @@ class SimpleTestCase { * @access public */ function getLabel() { - return $this->_label ? $this->_label : get_class($this); + return $this->label ? $this->label : get_class($this); } /** @@ -83,13 +79,21 @@ class SimpleTestCase { * @access public */ function skipIf($should_skip, $message = '%s') { - if ($should_skip && ! $this->_should_skip) { - $this->_should_skip = true; + if ($should_skip && ! $this->should_skip) { + $this->should_skip = true; $message = sprintf($message, 'Skipping [' . get_class($this) . ']'); - $this->_reporter->paintSkip($message . $this->getAssertionLine()); + $this->reporter->paintSkip($message . $this->getAssertionLine()); } } + /** + * Accessor for the private variable $_shoud_skip + * @access public + */ + function shouldSkip() { + return $this->should_skip; + } + /** * Will issue a message to the reporter and tell the test * case to skip if the incoming flag is false. @@ -106,12 +110,9 @@ class SimpleTestCase { * @return SimpleInvoker Individual test runner. * @access public */ - function &createInvoker() { - $invoker = &new SimpleErrorTrappingInvoker(new SimpleInvoker($this)); - if (version_compare(phpversion(), '5') >= 0) { - $invoker = &new SimpleExceptionTrappingInvoker($invoker); - } - return $invoker; + function createInvoker() { + return new SimpleErrorTrappingInvoker( + new SimpleExceptionTrappingInvoker(new SimpleInvoker($this))); } /** @@ -122,23 +123,23 @@ class SimpleTestCase { * @return boolean True if all tests passed. * @access public */ - function run(&$reporter) { - $context = &SimpleTest::getContext(); + function run($reporter) { + $context = SimpleTest::getContext(); $context->setTest($this); $context->setReporter($reporter); - $this->_reporter = &$reporter; + $this->reporter = $reporter; $started = false; foreach ($this->getTests() as $method) { if ($reporter->shouldInvoke($this->getLabel(), $method)) { $this->skip(); - if ($this->_should_skip) { + if ($this->should_skip) { break; } if (! $started) { $reporter->paintCaseStart($this->getLabel()); $started = true; } - $invoker = &$this->_reporter->createInvoker($this->createInvoker()); + $invoker = $this->reporter->createInvoker($this->createInvoker()); $invoker->before($method); $invoker->invoke($method); $invoker->after($method); @@ -147,7 +148,8 @@ class SimpleTestCase { if ($started) { $reporter->paintCaseEnd($this->getLabel()); } - unset($this->_reporter); + unset($this->reporter); + $context->setTest(null); return $reporter->getStatus(); } @@ -162,7 +164,7 @@ class SimpleTestCase { function getTests() { $methods = array(); foreach (get_class_methods(get_class($this)) as $method) { - if ($this->_isTest($method)) { + if ($this->isTest($method)) { $methods[] = $method; } } @@ -177,7 +179,7 @@ class SimpleTestCase { * @return boolean True if test method. * @access protected */ - function _isTest($method) { + protected function isTest($method) { if (strtolower(substr($method, 0, 4)) == 'test') { return ! SimpleTestCompatibility::isA($this, strtolower($method)); } @@ -190,8 +192,8 @@ class SimpleTestCase { * @access public */ function before($method) { - $this->_reporter->paintMethodStart($method); - $this->_observers = array(); + $this->reporter->paintMethodStart($method); + $this->observers = array(); } /** @@ -217,10 +219,10 @@ class SimpleTestCase { * @access public */ function after($method) { - for ($i = 0; $i < count($this->_observers); $i++) { - $this->_observers[$i]->atTestEnd($method, $this); + for ($i = 0; $i < count($this->observers); $i++) { + $this->observers[$i]->atTestEnd($method, $this); } - $this->_reporter->paintMethodEnd($method); + $this->reporter->paintMethodEnd($method); } /** @@ -229,18 +231,18 @@ class SimpleTestCase { * method. * @access public */ - function tell(&$observer) { - $this->_observers[] = &$observer; + function tell($observer) { + $this->observers[] = &$observer; } /** * @deprecated */ function pass($message = "Pass") { - if (! isset($this->_reporter)) { + if (! isset($this->reporter)) { trigger_error('Can only make assertions within test methods'); } - $this->_reporter->paintPass( + $this->reporter->paintPass( $message . $this->getAssertionLine()); return true; } @@ -251,10 +253,10 @@ class SimpleTestCase { * @access public */ function fail($message = "Fail") { - if (! isset($this->_reporter)) { + if (! isset($this->reporter)) { trigger_error('Can only make assertions within test methods'); } - $this->_reporter->paintFail( + $this->reporter->paintFail( $message . $this->getAssertionLine()); return false; } @@ -269,10 +271,10 @@ class SimpleTestCase { * @access public */ function error($severity, $message, $file, $line) { - if (! isset($this->_reporter)) { + if (! isset($this->reporter)) { trigger_error('Can only make assertions within test methods'); } - $this->_reporter->paintError( + $this->reporter->paintError( "Unexpected PHP error [$message] severity [$severity] in [$file line $line]"); } @@ -283,17 +285,19 @@ class SimpleTestCase { * @access public */ function exception($exception) { - $this->_reporter->paintException($exception); + $this->reporter->paintException($exception); } /** - * @deprecated + * For user defined expansion of the available messages. + * @param string $type Tag for sorting the signals. + * @param mixed $payload Extra user specific information. */ - function signal($type, &$payload) { - if (! isset($this->_reporter)) { + function signal($type, $payload) { + if (! isset($this->reporter)) { trigger_error('Can only make assertions within test methods'); } - $this->_reporter->paintSignal($type, $payload); + $this->reporter->paintSignal($type, $payload); } /** @@ -305,25 +309,18 @@ class SimpleTestCase { * @return boolean True on pass * @access public */ - function assert(&$expectation, $compare, $message = '%s') { + function assert($expectation, $compare, $message = '%s') { if ($expectation->test($compare)) { return $this->pass(sprintf( $message, - $expectation->overlayMessage($compare, $this->_reporter->getDumper()))); + $expectation->overlayMessage($compare, $this->reporter->getDumper()))); } else { return $this->fail(sprintf( $message, - $expectation->overlayMessage($compare, $this->_reporter->getDumper()))); + $expectation->overlayMessage($compare, $this->reporter->getDumper()))); } } - /** - * @deprecated - */ - function assertExpectation(&$expectation, $compare, $message = '%s') { - return $this->assert($expectation, $compare, $message); - } - /** * Uses a stack trace to find the line of an assertion. * @return string Line number of first assert* @@ -345,27 +342,19 @@ class SimpleTestCase { * @access public */ function dump($variable, $message = false) { - $dumper = $this->_reporter->getDumper(); + $dumper = $this->reporter->getDumper(); $formatted = $dumper->dump($variable); if ($message) { $formatted = $message . "\n" . $formatted; } - $this->_reporter->paintFormattedMessage($formatted); + $this->reporter->paintFormattedMessage($formatted); return $variable; } - /** - * @deprecated - */ - function sendMessage($message) { - $this->_reporter->PaintMessage($message); - } - /** * Accessor for the number of subtests including myelf. * @return integer Number of test cases. * @access public - * @static */ function getSize() { return 1; @@ -374,6 +363,8 @@ class SimpleTestCase { /** * Helps to extract test cases automatically from a file. + * @package SimpleTest + * @subpackage UnitTester */ class SimpleFileLoader { @@ -385,34 +376,33 @@ class SimpleFileLoader { * @return TestSuite The new test suite. * @access public */ - function &load($test_file) { + function load($test_file) { $existing_classes = get_declared_classes(); $existing_globals = get_defined_vars(); include_once($test_file); $new_globals = get_defined_vars(); - $this->_makeFileVariablesGlobal($existing_globals, $new_globals); + $this->makeFileVariablesGlobal($existing_globals, $new_globals); $new_classes = array_diff(get_declared_classes(), $existing_classes); if (empty($new_classes)) { - $new_classes = $this->_scrapeClassesFromFile($test_file); + $new_classes = $this->scrapeClassesFromFile($test_file); } $classes = $this->selectRunnableTests($new_classes); - $suite = &$this->createSuiteFromClasses($test_file, $classes); - return $suite; + return $this->createSuiteFromClasses($test_file, $classes); } - + /** * Imports new variables into the global namespace. * @param hash $existing Variables before the file was loaded. * @param hash $new Variables after the file was loaded. * @access private */ - function _makeFileVariablesGlobal($existing, $new) { + protected function makeFileVariablesGlobal($existing, $new) { $globals = array_diff(array_keys($new), array_keys($existing)); foreach ($globals as $global) { - $_GLOBALS[$global] = $new[$global]; + $GLOBALS[$global] = $new[$global]; } } - + /** * Lookup classnames from file contents, in case the * file may have been included before. @@ -423,7 +413,7 @@ class SimpleFileLoader { * @param string $test_file File name with classes. * @access private */ - function _scrapeClassesFromFile($test_file) { + protected function scrapeClassesFromFile($test_file) { preg_match_all('~^\s*class\s+(\w+)(\s+(extends|implements)\s+\w+)*\s*\{~mi', file_get_contents($test_file), $matches ); @@ -461,16 +451,16 @@ class SimpleFileLoader { * test cases. * @access public */ - function &createSuiteFromClasses($title, $classes) { + function createSuiteFromClasses($title, $classes) { if (count($classes) == 0) { - $suite = &new BadTestSuite($title, "No runnable test cases in [$title]"); + $suite = new BadTestSuite($title, "No runnable test cases in [$title]"); return $suite; } SimpleTest::ignoreParentsIfIgnored($classes); - $suite = &new TestSuite($title); + $suite = new TestSuite($title); foreach ($classes as $class) { if (! SimpleTest::isIgnored($class)) { - $suite->addTestClass($class); + $suite->add($class); } } return $suite; @@ -485,8 +475,8 @@ class SimpleFileLoader { * @subpackage UnitTester */ class TestSuite { - var $_label; - var $_test_cases; + private $label; + private $test_cases; /** * Sets the name of the test suite. @@ -495,8 +485,8 @@ class TestSuite { * @access public */ function TestSuite($label = false) { - $this->_label = $label; - $this->_test_cases = array(); + $this->label = $label; + $this->test_cases = array(); } /** @@ -506,29 +496,11 @@ class TestSuite { * @access public */ function getLabel() { - if (! $this->_label) { + if (! $this->label) { return ($this->getSize() == 1) ? - get_class($this->_test_cases[0]) : get_class($this); + get_class($this->test_cases[0]) : get_class($this); } else { - return $this->_label; - } - } - - /** - * @deprecated - */ - function addTestCase(&$test_case) { - $this->_test_cases[] = &$test_case; - } - - /** - * @deprecated - */ - function addTestClass($class) { - if (TestSuite::getBaseTestCase($class) == 'testsuite') { - $this->_test_cases[] = &new $class(); - } else { - $this->_test_cases[] = $class; + return $this->label; } } @@ -540,23 +512,16 @@ class TestSuite { * runnable test interface. * @access public */ - function add(&$test_case) { + function add($test_case) { if (! is_string($test_case)) { - $this->_test_cases[] = &$test_case; - } elseif (TestSuite::getBaseTestCase($class) == 'testsuite') { - $this->_test_cases[] = &new $class(); + $this->test_cases[] = $test_case; + } elseif (TestSuite::getBaseTestCase($test_case) == 'testsuite') { + $this->test_cases[] = new $test_case(); } else { - $this->_test_cases[] = $class; + $this->test_cases[] = $test_case; } } - /** - * @deprecated - */ - function addTestFile($test_file) { - $this->addFile($test_file); - } - /** * Builds a test suite from a library of test cases. * The new suite is composed into this one. @@ -576,7 +541,7 @@ class TestSuite { * @param SimpleCollector $collector Directory scanner. * @access public */ - function collect($path, &$collector) { + function collect($path, $collector) { $collector->collect($this, $path); } @@ -586,16 +551,16 @@ class TestSuite { * @param SimpleReporter $reporter Current test reporter. * @access public */ - function run(&$reporter) { + function run($reporter) { $reporter->paintGroupStart($this->getLabel(), $this->getSize()); - for ($i = 0, $count = count($this->_test_cases); $i < $count; $i++) { - if (is_string($this->_test_cases[$i])) { - $class = $this->_test_cases[$i]; - $test = &new $class(); + for ($i = 0, $count = count($this->test_cases); $i < $count; $i++) { + if (is_string($this->test_cases[$i])) { + $class = $this->test_cases[$i]; + $test = new $class(); $test->run($reporter); unset($test); } else { - $this->_test_cases[$i]->run($reporter); + $this->test_cases[$i]->run($reporter); } } $reporter->paintGroupEnd($this->getLabel()); @@ -609,7 +574,7 @@ class TestSuite { */ function getSize() { $count = 0; - foreach ($this->_test_cases as $case) { + foreach ($this->test_cases as $case) { if (is_string($case)) { if (! SimpleTest::isIgnored($case)) { $count++; @@ -626,9 +591,8 @@ class TestSuite { * SimpleTestCase class. * @param string $class Class name. * @access public - * @static */ - function getBaseTestCase($class) { + static function getBaseTestCase($class) { while ($class = get_parent_class($class)) { $class = strtolower($class); if ($class == 'simpletestcase' || $class == 'testsuite') { @@ -639,13 +603,6 @@ class TestSuite { } } -/** - * @package SimpleTest - * @subpackage UnitTester - * @deprecated - */ -class GroupTest extends TestSuite { } - /** * This is a failing group test for when a test suite hasn't * loaded properly. @@ -653,8 +610,8 @@ class GroupTest extends TestSuite { } * @subpackage UnitTester */ class BadTestSuite { - var $_label; - var $_error; + private $label; + private $error; /** * Sets the name of the test suite and error message. @@ -663,8 +620,8 @@ class BadTestSuite { * @access public */ function BadTestSuite($label, $error) { - $this->_label = $label; - $this->_error = $error; + $this->label = $label; + $this->error = $error; } /** @@ -673,7 +630,7 @@ class BadTestSuite { * @access public */ function getLabel() { - return $this->_label; + return $this->label; } /** @@ -681,10 +638,10 @@ class BadTestSuite { * @param SimpleReporter $reporter Current test reporter. * @access public */ - function run(&$reporter) { + function run($reporter) { $reporter->paintGroupStart($this->getLabel(), $this->getSize()); $reporter->paintFail('Bad TestSuite [' . $this->getLabel() . - '] with error [' . $this->_error . ']'); + '] with error [' . $this->error . ']'); $reporter->paintGroupEnd($this->getLabel()); return $reporter->getStatus(); } @@ -698,11 +655,4 @@ class BadTestSuite { return 0; } } - -/** - * @package SimpleTest - * @subpackage UnitTester - * @deprecated - */ -class BadGroupTest extends BadTestSuite { } ?> diff --git a/contrib/simpletest/simpletest/tidy_parser.php b/contrib/simpletest/simpletest/tidy_parser.php new file mode 100755 index 00000000..3d8b4b2a --- /dev/null +++ b/contrib/simpletest/simpletest/tidy_parser.php @@ -0,0 +1,382 @@ +free(); + } + + /** + * Frees up any references so as to allow the PHP garbage + * collection from unset() to work. + */ + private function free() { + unset($this->page); + $this->forms = array(); + $this->labels = array(); + } + + /** + * This builder is only available if the 'tidy' extension is loaded. + * @return boolean True if available. + */ + function can() { + return extension_loaded('tidy'); + } + + /** + * Reads the raw content the page using HTML Tidy. + * @param $response SimpleHttpResponse Fetched response. + * @return SimplePage Newly parsed page. + */ + function parse($response) { + $this->page = new SimplePage($response); + $tidied = tidy_parse_string($input = $this->insertGuards($response->getContent()), + array('output-xml' => false, 'wrap' => '0', 'indent' => 'no'), + 'latin1'); + $this->walkTree($tidied->html()); + $this->attachLabels($this->widgets_by_id, $this->labels); + $this->page->setForms($this->forms); + $page = $this->page; + $this->free(); + return $page; + } + + /** + * Stops HTMLTidy stripping content that we wish to preserve. + * @param string The raw html. + * @return string The html with guard tags inserted. + */ + private function insertGuards($html) { + return $this->insertEmptyTagGuards($this->insertTextareaSimpleWhitespaceGuards($html)); + } + + /** + * Removes the extra content added during the parse stage + * in order to preserve content we don't want stripped + * out by HTMLTidy. + * @param string The raw html. + * @return string The html with guard tags removed. + */ + private function stripGuards($html) { + return $this->stripTextareaWhitespaceGuards($this->stripEmptyTagGuards($html)); + } + + /** + * HTML tidy strips out empty tags such as