diff options
author | ctrlaltca <> | 2013-01-02 14:42:24 +0000 |
---|---|---|
committer | ctrlaltca <> | 2013-01-02 14:42:24 +0000 |
commit | edf2251aca60a970e822079d23933e5b70b26571 (patch) | |
tree | 366b6688efbb03f20f47268bea57859cea673c70 /buildscripts/PHPUnit2/Framework/TestSuite.php | |
parent | 8e5f2510bd577e15095e46afc7d0ba6808549bf8 (diff) |
backported all related changes up to 3229 to branch/3.2
Diffstat (limited to 'buildscripts/PHPUnit2/Framework/TestSuite.php')
-rw-r--r-- | buildscripts/PHPUnit2/Framework/TestSuite.php | 554 |
1 files changed, 0 insertions, 554 deletions
diff --git a/buildscripts/PHPUnit2/Framework/TestSuite.php b/buildscripts/PHPUnit2/Framework/TestSuite.php deleted file mode 100644 index 12c4ce5a..00000000 --- a/buildscripts/PHPUnit2/Framework/TestSuite.php +++ /dev/null @@ -1,554 +0,0 @@ -<?php -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * PHP Version 5 - * - * Copyright (c) 2002-2006, Sebastian Bergmann <sb@sebastian-bergmann.de>. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * * Neither the name of Sebastian Bergmann nor the names of his - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * @category Testing - * @package PHPUnit2 - * @author Sebastian Bergmann <sb@sebastian-bergmann.de> - * @copyright 2002-2006 Sebastian Bergmann <sb@sebastian-bergmann.de> - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version CVS: $Id: TestSuite.php,v 1.26.2.11 2005/12/17 16:04:56 sebastian Exp $ - * @link http://pear.php.net/package/PHPUnit2 - * @since File available since Release 2.0.0 - */ - -require_once 'PHPUnit2/Framework/Test.php'; -require_once 'PHPUnit2/Framework/TestCase.php'; -require_once 'PHPUnit2/Framework/TestResult.php'; -require_once 'PHPUnit2/Runner/BaseTestRunner.php'; -require_once 'PHPUnit2/Util/Fileloader.php'; - -/** - * A TestSuite is a composite of Tests. It runs a collection of test cases. - * - * Here is an example using the dynamic test definition. - * - * <code> - * <?php - * $suite = new PHPUnit2_Framework_TestSuite; - * $suite->addTest(new MathTest('testPass')); - * ?> - * </code> - * - * Alternatively, a TestSuite can extract the tests to be run automatically. - * To do so you pass a ReflectionClass instance for your - * PHPUnit2_Framework_TestCase class to the PHPUnit2_Framework_TestSuite - * constructor. - * - * <code> - * <?php - * $suite = new PHPUnit2_Framework_TestSuite( - * new ReflectionClass('MathTest') - * ); - * ?> - * </code> - * - * This constructor creates a suite with all the methods starting with - * "test" that take no arguments. - * - * @category Testing - * @package PHPUnit2 - * @author Sebastian Bergmann <sb@sebastian-bergmann.de> - * @copyright 2002-2006 Sebastian Bergmann <sb@sebastian-bergmann.de> - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: @package_version@ - * @link http://pear.php.net/package/PHPUnit2 - * @since Class available since Release 2.0.0 - */ -class PHPUnit2_Framework_TestSuite implements PHPUnit2_Framework_Test { - /** - * The name of the test suite. - * - * @var string - * @access private - */ - private $name = ''; - - /** - * The tests in the test suite. - * - * @var array - * @access private - */ - private $tests = array(); - - /** - * Constructs a new TestSuite: - * - * - PHPUnit2_Framework_TestSuite() constructs an empty TestSuite. - * - * - PHPUnit2_Framework_TestSuite(ReflectionClass) constructs a - * TestSuite from the given class. - * - * - PHPUnit2_Framework_TestSuite(ReflectionClass, String) - * constructs a TestSuite from the given class with the given - * name. - * - * - PHPUnit2_Framework_TestSuite(String) either constructs a - * TestSuite from the given class (if the passed string is the - * name of an existing class) or constructs an empty TestSuite - * with the given name. - * - * @param mixed $theClass - * @param string $name - * @throws Exception - * @access public - */ - public function __construct($theClass = '', $name = '') { - $argumentsValid = FALSE; - - if (is_object($theClass) && - $theClass instanceof ReflectionClass) { - $argumentsValid = TRUE; - } - - else if (is_string($theClass) && $theClass !== '' && class_exists($theClass)) { - $argumentsValid = TRUE; - - if ($name == '') { - $name = $theClass; - } - - $theClass = new ReflectionClass($theClass); - } - - else if (is_string($theClass)) { - $this->setName($theClass); - return; - } - - if (!$argumentsValid) { - throw new Exception; - } - - if ($name != '') { - $this->setName($name); - } else { - $this->setName($theClass->getName()); - } - - $constructor = $theClass->getConstructor(); - - if ($constructor === NULL || - !$constructor->isPublic()) { - $this->addTest( - self::warning( - sprintf( - 'Class %s has no public constructor', - - $theClass->getName() - ) - ) - ); - - return; - } - - $methods = $theClass->getMethods(); - $names = array(); - - foreach ($methods as $method) { - $this->addTestMethod($method, $names, $theClass); - } - - if (empty($this->tests)) { - $this->addTest( - self::warning( - sprintf( - 'No tests found in %s', - - $theClass->getName() - ) - ) - ); - } - } - - /** - * Returns a string representation of the test suite. - * - * @return string - * @access public - */ - public function toString() { - return $this->getName(); - } - - /** - * Adds a test to the suite. - * - * @param PHPUnit2_Framework_Test $test - * @access public - */ - public function addTest(PHPUnit2_Framework_Test $test) { - $this->tests[] = $test; - } - - /** - * Adds the tests from the given class to the suite. - * - * @param mixed $testClass - * @access public - */ - public function addTestSuite($testClass) { - if (is_string($testClass) && - class_exists($testClass)) { - $testClass = new ReflectionClass($testClass); - } - - if (is_object($testClass) && - $testClass instanceof ReflectionClass) { - $this->addTest(new PHPUnit2_Framework_TestSuite($testClass)); - } - } - - /** - * Wraps both <code>addTest()</code> and <code>addTestSuite</code> - * as well as the separate import statements for the user's convenience. - * - * If the named file cannot be read or there are no new tests that can be - * added, a <code>PHPUnit2_Framework_Warning</code> will be created instead, - * leaving the current test run untouched. - * - * @param string $filename - * @throws Exception - * @access public - * @since Method available since Release 2.3.0 - * @author Stefano F. Rausch <stefano@rausch-e.net> - */ - public function addTestFile($filename) { - if (!is_string($filename) || !file_exists($filename)) { - throw new Exception; - } - - $declaredClasses = get_declared_classes(); - - PHPUnit2_Util_Fileloader::checkAndLoad($filename); - - $newClasses = array_values( - array_diff(get_declared_classes(), $declaredClasses) - ); - - $testsFound = 0; - - foreach ($newClasses as $class) { - if (preg_match('"Tests?$"', $class)) { - try { - $suiteMethod = new ReflectionMethod( - $class, PHPUnit2_Runner_BaseTestRunner::SUITE_METHODNAME - ); - - $this->addTest($suiteMethod->invoke(NULL)); - } catch (ReflectionException $e) { - $this->addTestSuite(new ReflectionClass($class)); - } - - $testsFound++; - } - } - - if ($testsFound == 0) { - $this->addTest( - new PHPUnit2_Framework_Warning('No tests found in file ' . $filename) - ); - } - } - - /** - * Wrapper for addTestFile() that adds multiple test files. - * - * @param Array $filenames - * @throws Exception - * @access public - * @since Method available since Release 2.3.0 - */ - public function addTestFiles($filenames) { - foreach ($filenames as $filename) { - $this->addTestFile($filename); - } - } - - /** - * Counts the number of test cases that will be run by this test. - * - * @return integer - * @access public - */ - public function countTestCases() { - $count = 0; - - foreach ($this->tests as $test) { - $count += $test->countTestCases(); - } - - return $count; - } - - /** - * @param ReflectionClass $theClass - * @param string $name - * @return PHPUnit2_Framework_Test - * @access public - * @static - */ - public static function createTest(ReflectionClass $theClass, $name) { - if (!$theClass->isInstantiable()) { - return self::warning( - sprintf( - 'Cannot instantiate test case %s.', - $theClass->getName() - ) - ); - } - - $constructor = $theClass->getConstructor(); - - if ($constructor !== NULL) { - $parameters = $constructor->getParameters(); - - if (sizeof($parameters) == 0) { - $test = $theClass->newInstance(); - - if ($test instanceof PHPUnit2_Framework_TestCase) { - $test->setName($name); - } - } - - else if (sizeof($parameters) == 1 && - $parameters[0]->getClass() === NULL) { - $test = $theClass->newInstance($name); - } - - else { - return self::warning( - sprintf( - 'Constructor of class %s is not TestCase($name) or TestCase().', - $theClass->getName() - ) - ); - } - } - - return $test; - } - - /** - * Creates a default TestResult object. - * - * @return PHPUnit2_Framework_TestResult - * @access protected - */ - protected function createResult() { - return new PHPUnit2_Framework_TestResult; - } - - /** - * Returns the name of the suite. - * - * @return string - * @access public - */ - public function getName() { - return $this->name; - } - - /** - * Runs the tests and collects their result in a TestResult. - * - * @param PHPUnit2_Framework_TestResult $result - * @return PHPUnit2_Framework_TestResult - * @throws Exception - * @access public - */ - public function run($result = NULL) { - if ($result === NULL) { - $result = $this->createResult(); - } - - // XXX: Workaround for missing ability to declare type-hinted parameters as optional. - else if (!($result instanceof PHPUnit2_Framework_TestResult)) { - throw new Exception( - 'Argument 1 must be an instance of PHPUnit2_Framework_TestResult.' - ); - } - - $result->startTestSuite($this); - - foreach ($this->tests as $test) { - if ($result->shouldStop()) { - break; - } - - $this->runTest($test, $result); - } - - $result->endTestSuite($this); - - return $result; - } - - /** - * Runs a test. - * - * @param PHPUnit2_Framework_Test $test - * @param PHPUnit2_Framework_TestResult $testResult - * @access public - */ - public function runTest(PHPUnit2_Framework_Test $test, PHPUnit2_Framework_TestResult $result) { - $test->run($result); - } - - /** - * Sets the name of the suite. - * - * @param string - * @access public - */ - public function setName($name) { - $this->name = $name; - } - - /** - * Returns the test at the given index. - * - * @param integer - * @return PHPUnit2_Framework_Test - * @access public - */ - public function testAt($index) { - if (isset($this->tests[$index])) { - return $this->tests[$index]; - } else { - return FALSE; - } - } - - /** - * Returns the number of tests in this suite. - * - * @return integer - * @access public - */ - public function testCount() { - return sizeof($this->tests); - } - - /** - * Returns the tests as an enumeration. - * - * @return array - * @access public - */ - public function tests() { - return $this->tests; - } - - /** - * @param ReflectionMethod $method - * @param array $names - * @param ReflectionClass $theClass - * @access private - */ - private function addTestMethod(ReflectionMethod $method, &$names, ReflectionClass $theClass) { - $name = $method->getName(); - - if (in_array($name, $names)) { - return; - } - - if ($this->isPublicTestMethod($method)) { - $names[] = $name; - - $this->addTest( - self::createTest( - $theClass, - $name - ) - ); - } - - else if ($this->isTestMethod($method)) { - $this->addTest( - self::warning( - sprintf( - 'Test method is not public: %s', - - $name - ) - ) - ); - } - } - - /** - * @param ReflectionMethod $method - * @return boolean - * @access private - */ - private function isPublicTestMethod(ReflectionMethod $method) { - return ($this->isTestMethod($method) && - $method->isPublic()); - } - - /** - * @param ReflectionMethod $method - * @return boolean - * @access private - */ - private function isTestMethod(ReflectionMethod $method) { - return (substr($method->name, 0, 4) == 'test'); - } - - /** - * @param string $message - * @return PHPUnit2_Framework_Warning - * @access private - */ - private static function warning($message) { - require_once 'PHPUnit2/Framework/Warning.php'; - return new PHPUnit2_Framework_Warning($message); - } -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * c-hanging-comment-ender-p: nil - * End: - */ -?> |