home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2008 February / PCWFEB08.iso / Software / Resources / Developers / XAMPP 1.5.4 / Windows installer / xampp-win32-1.5.4-installer.exe / xampp / php / pear / PHPUnit / TestSuite.php < prev   
Encoding:
PHP Script  |  2005-12-02  |  6.7 KB  |  263 lines

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  3.  
  4. /**
  5.  * PHP Version 4
  6.  *
  7.  * Copyright (c) 2002-2005, Sebastian Bergmann <sb@sebastian-bergmann.de>.
  8.  * All rights reserved.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  *
  14.  *   * Redistributions of source code must retain the above copyright
  15.  *     notice, this list of conditions and the following disclaimer.
  16.  * 
  17.  *   * Redistributions in binary form must reproduce the above copyright
  18.  *     notice, this list of conditions and the following disclaimer in
  19.  *     the documentation and/or other materials provided with the
  20.  *     distribution.
  21.  *
  22.  *   * Neither the name of Sebastian Bergmann nor the names of his
  23.  *     contributors may be used to endorse or promote products derived
  24.  *     from this software without specific prior written permission.
  25.  *
  26.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  27.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  28.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  29.  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  30.  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  31.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  32.  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  33.  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  34.  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
  35.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  36.  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  37.  * POSSIBILITY OF SUCH DAMAGE.
  38.  *
  39.  * @category   Testing
  40.  * @package    PHPUnit
  41.  * @author     Sebastian Bergmann <sb@sebastian-bergmann.de>
  42.  * @copyright  2002-2005 Sebastian Bergmann <sb@sebastian-bergmann.de>
  43.  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
  44.  * @version    CVS: $Id: TestSuite.php,v 1.17 2005/11/10 09:47:15 sebastian Exp $
  45.  * @link       http://pear.php.net/package/PHPUnit
  46.  * @since      File available since Release 1.0.0
  47.  */
  48.  
  49. require_once 'PHPUnit/TestCase.php';
  50.  
  51. /**
  52.  * A TestSuite is a Composite of Tests. It runs a collection of test cases.
  53.  *
  54.  * Here is an example using the dynamic test definition.
  55.  *
  56.  * <code>
  57.  * <?php
  58.  * $suite = new PHPUnit_TestSuite();
  59.  * $suite->addTest(new MathTest('testPass'));
  60.  * ?>
  61.  * </code>
  62.  *
  63.  * Alternatively, a TestSuite can extract the tests to be run automatically.
  64.  * To do so you pass the classname of your TestCase class to the TestSuite
  65.  * constructor.
  66.  *
  67.  * <code>
  68.  * <?php
  69.  * $suite = new TestSuite('classname');
  70.  * ?>
  71.  * </code>
  72.  *
  73.  * This constructor creates a suite with all the methods starting with
  74.  * "test" that take no arguments.
  75.  *
  76.  * @category   Testing
  77.  * @package    PHPUnit
  78.  * @author     Sebastian Bergmann <sb@sebastian-bergmann.de>
  79.  * @copyright  2002-2005 Sebastian Bergmann <sb@sebastian-bergmann.de>
  80.  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
  81.  * @version    Release: 1.3.2
  82.  * @link       http://pear.php.net/package/PHPUnit
  83.  * @since      Class available since Release 1.0.0
  84.  */
  85. class PHPUnit_TestSuite {
  86.     /**
  87.      * The name of the test suite.
  88.      *
  89.      * @var    string
  90.      * @access private
  91.      */
  92.     var $_name = '';
  93.  
  94.     /**
  95.      * The tests in the test suite.
  96.      *
  97.      * @var    array
  98.      * @access private
  99.      */
  100.     var $_tests = array();
  101.  
  102.     /**
  103.      * Constructs a TestSuite.
  104.      *
  105.      * @param  mixed
  106.      * @access public
  107.      */
  108.     function PHPUnit_TestSuite($test = FALSE) {
  109.         if ($test !== FALSE) {
  110.             $this->setName($test);
  111.             $this->addTestSuite($test);
  112.         }
  113.     }
  114.  
  115.     /**
  116.      * Adds a test to the suite.
  117.      *
  118.      * @param  object
  119.      * @access public
  120.      */
  121.     function addTest(&$test) {
  122.         $this->_tests[] = &$test;
  123.     }
  124.  
  125.     /**
  126.      * Adds the tests from the given class to the suite.
  127.      *
  128.      * @param  string
  129.      * @access public
  130.      */
  131.     function addTestSuite($testClass) {
  132.         if (class_exists($testClass)) {
  133.             $methods       = get_class_methods($testClass);
  134.             $parentClasses = array(strtolower($testClass));
  135.             $parentClass   = $testClass;
  136.  
  137.             while(is_string($parentClass = get_parent_class($parentClass))) {
  138.                 $parentClasses[] = $parentClass;
  139.             }
  140.  
  141.             foreach ($methods as $method) {
  142.                 if (substr($method, 0, 4) == 'test' &&
  143.                     !in_array($method, $parentClasses)) {
  144.                     $this->addTest(new $testClass($method));
  145.                 }
  146.             }
  147.         }
  148.     }
  149.  
  150.     /**
  151.      * Counts the number of test cases that will be run by this test.
  152.      *
  153.      * @return integer
  154.      * @access public
  155.      */
  156.     function countTestCases() {
  157.         $count = 0;
  158.  
  159.         foreach ($this->_tests as $test) {
  160.             $count += $test->countTestCases();
  161.         }
  162.  
  163.         return $count;
  164.     }
  165.  
  166.     /**
  167.      * Returns the name of the suite.
  168.      *
  169.      * @return string
  170.      * @access public
  171.      */
  172.     function getName() {
  173.         return $this->_name;
  174.     }
  175.  
  176.     /**
  177.      * Runs the tests and collects their result in a TestResult.
  178.      *
  179.      * @param  object
  180.      * @access public
  181.      */
  182.     function run(&$result) {
  183.         for ($i = 0; $i < sizeof($this->_tests) && !$result->shouldStop(); $i++) {
  184.             $this->_tests[$i]->run($result);
  185.         }
  186.     }
  187.  
  188.     /**
  189.      * Runs a test.
  190.      *
  191.      * @param  object
  192.      * @param  object
  193.      * @access public
  194.      */
  195.     function runTest(&$test, &$result) {
  196.         $test->run($result);
  197.     }
  198.  
  199.     /**
  200.      * Sets the name of the suite.
  201.      *
  202.      * @param  string
  203.      * @access public
  204.      */
  205.     function setName($name) {
  206.         $this->_name = $name;
  207.     }
  208.  
  209.     /**
  210.      * Returns the test at the given index.
  211.      *
  212.      * @param  integer
  213.      * @return object
  214.      * @access public
  215.      */
  216.     function &testAt($index) {
  217.         if (isset($this->_tests[$index])) {
  218.             return $this->_tests[$index];
  219.         } else {
  220.             return FALSE;
  221.         }
  222.     }
  223.  
  224.     /**
  225.      * Returns the number of tests in this suite.
  226.      *
  227.      * @return integer
  228.      * @access public
  229.      */
  230.     function testCount() {
  231.         return sizeof($this->_tests);
  232.     }
  233.  
  234.     /**
  235.      * Returns the tests as an enumeration.
  236.      *
  237.      * @return array
  238.      * @access public
  239.      */
  240.     function &tests() {
  241.         return $this->_tests;
  242.     }
  243.  
  244.     /**
  245.      * Returns a string representation of the test suite.
  246.      *
  247.      * @return string
  248.      * @access public
  249.      */
  250.     function toString() {
  251.         return '';
  252.     }
  253. }
  254.  
  255. /*
  256.  * Local variables:
  257.  * tab-width: 4
  258.  * c-basic-offset: 4
  259.  * c-hanging-comment-ender-p: nil
  260.  * End:
  261.  */
  262. ?>
  263.