<?php
    /**
     *	base include file for SimpleTest
     *	@package	SimpleTest
     *	@subpackage	UnitTester
     *	@version	$Id$
     */

    /**
     *    Version specific reflection API.
	 *	  @package SimpleTest
	 *	  @subpackage UnitTester
     */
    class SimpleReflection {
        var $_interface;

        /**
         *    Stashes the class/interface.
         *    @param string $interface    Class or interface
         *                                to inspect.
         */
        function SimpleReflection($interface) {
            $this->_interface = $interface;
        }

        /**
         *    Checks that a class has been declared.
         *    @return boolean        True if defined.
         *    @access public
         */
        function classExists() {
            return class_exists($this->_interface);
        }

        /**
         *    Needed to kill the autoload feature in PHP5
         *    for classes created dynamically.
         *    @return boolean        True if defined.
         *    @access public
         */
        function classExistsSansAutoload() {
            return class_exists($this->_interface);
        }

        /**
         *    Checks that a class or interface has been
         *    declared.
         *    @return boolean        True if defined.
         *    @access public
         */
        function classOrInterfaceExists() {
            return class_exists($this->_interface);
        }

        /**
         *    Needed to kill the autoload feature in PHP5
         *    for classes created dynamically.
         *    @return boolean        True if defined.
         *    @access public
         */
        function classOrInterfaceExistsSansAutoload() {
            return class_exists($this->_interface);
        }

        /**
         *    Gets the list of methods on a class or
         *    interface.
         *    @returns array          List of method names.
         *    @access public
         */
        function getMethods() {
            return get_class_methods($this->_interface);
        }

        /**
         *    Gets the list of interfaces from a class. If the
         *	  class name is actually an interface then just that
         *	  interface is returned.
         *    @returns array          List of interfaces.
         *    @access public
         */
        function getInterfaces() {
            return array();
        }

        /**
         *    Finds the parent class name.
         *    @returns string      Parent class name.
         *    @access public
         */
        function getParent() {
            return strtolower(get_parent_class($this->_interface));
        }

        /**
         *    Determines if the class is abstract, which for PHP 4
         *    will never be the case.
         *    @returns boolean      True if abstract.
         *    @access public
         */
        function isAbstract() {
            return false;
        }

        /**
         *	  Gets the source code matching the declaration
         *	  of a method.
         * 	  @param string $method		  Method name.
         *    @access public
         */
        function getSignature($method) {
        	return "function &$method()";
        }
    }
?>