xml.php

来自「一款可以和GOOGLE媲美的开源统计系统,运用AJAX.功能强大. 无色提示:」· PHP 代码 · 共 648 行 · 第 1/2 页

PHP
648
字号
        /**         *    Accessor for attributes.         *    @return hash        All attributes.         *    @access protected         */        function _getAttributes() {            return $this->_attributes;        }    }    /**     *    Accumulator for incoming method tag. Holds the     *    incoming test structure information for     *    later dispatch to the reporter.	 *	  @package SimpleTest	 *	  @subpackage UnitTester     */    class NestingMethodTag extends NestingXmlTag {        /**         *    Sets the basic test information except         *    the name.         *    @param hash $attributes   Name value pairs.         *    @access public         */        function NestingMethodTag($attributes) {            $this->NestingXmlTag($attributes);        }        /**         *    Signals the appropriate start event on the         *    listener.         *    @param SimpleReporter $listener    Target for events.         *    @access public         */        function paintStart(&$listener) {            $listener->paintMethodStart($this->getName());        }        /**         *    Signals the appropriate end event on the         *    listener.         *    @param SimpleReporter $listener    Target for events.         *    @access public         */        function paintEnd(&$listener) {            $listener->paintMethodEnd($this->getName());        }    }    /**     *    Accumulator for incoming case tag. Holds the     *    incoming test structure information for     *    later dispatch to the reporter.	 *	  @package SimpleTest	 *	  @subpackage UnitTester     */    class NestingCaseTag extends NestingXmlTag {        /**         *    Sets the basic test information except         *    the name.         *    @param hash $attributes   Name value pairs.         *    @access public         */        function NestingCaseTag($attributes) {            $this->NestingXmlTag($attributes);        }        /**         *    Signals the appropriate start event on the         *    listener.         *    @param SimpleReporter $listener    Target for events.         *    @access public         */        function paintStart(&$listener) {            $listener->paintCaseStart($this->getName());        }        /**         *    Signals the appropriate end event on the         *    listener.         *    @param SimpleReporter $listener    Target for events.         *    @access public         */        function paintEnd(&$listener) {            $listener->paintCaseEnd($this->getName());        }    }    /**     *    Accumulator for incoming group tag. Holds the     *    incoming test structure information for     *    later dispatch to the reporter.	 *	  @package SimpleTest	 *	  @subpackage UnitTester     */    class NestingGroupTag extends NestingXmlTag {        /**         *    Sets the basic test information except         *    the name.         *    @param hash $attributes   Name value pairs.         *    @access public         */        function NestingGroupTag($attributes) {            $this->NestingXmlTag($attributes);        }        /**         *    Signals the appropriate start event on the         *    listener.         *    @param SimpleReporter $listener    Target for events.         *    @access public         */        function paintStart(&$listener) {            $listener->paintGroupStart($this->getName(), $this->getSize());        }        /**         *    Signals the appropriate end event on the         *    listener.         *    @param SimpleReporter $listener    Target for events.         *    @access public         */        function paintEnd(&$listener) {            $listener->paintGroupEnd($this->getName());        }        /**         *    The size in the attributes.         *    @return integer     Value of size attribute or zero.         *    @access public         */        function getSize() {            $attributes = $this->_getAttributes();            if (isset($attributes['SIZE'])) {                return (integer)$attributes['SIZE'];            }            return 0;        }    }    /**     *    Parser for importing the output of the XmlReporter.     *    Dispatches that output to another reporter.	 *	  @package SimpleTest	 *	  @subpackage UnitTester     */    class SimpleTestXmlParser {        var $_listener;        var $_expat;        var $_tag_stack;        var $_in_content_tag;        var $_content;        var $_attributes;        /**         *    Loads a listener with the SimpleReporter         *    interface.         *    @param SimpleReporter $listener   Listener of tag events.         *    @access public         */        function SimpleTestXmlParser(&$listener) {            $this->_listener = &$listener;            $this->_expat = &$this->_createParser();            $this->_tag_stack = array();            $this->_in_content_tag = false;            $this->_content = '';            $this->_attributes = array();        }        /**         *    Parses a block of XML sending the results to         *    the listener.         *    @param string $chunk        Block of text to read.         *    @return boolean             True if valid XML.         *    @access public         */        function parse($chunk) {            if (! xml_parse($this->_expat, $chunk)) {                trigger_error('XML parse error with ' .                        xml_error_string(xml_get_error_code($this->_expat)));                return false;            }            return true;        }        /**         *    Sets up expat as the XML parser.         *    @return resource        Expat handle.         *    @access protected         */        function &_createParser() {            $expat = xml_parser_create();            xml_set_object($expat, $this);            xml_set_element_handler($expat, '_startElement', '_endElement');            xml_set_character_data_handler($expat, '_addContent');            xml_set_default_handler($expat, '_default');            return $expat;        }        /**         *    Opens a new test nesting level.         *    @return NestedXmlTag     The group, case or method tag         *                             to start.         *    @access private         */        function _pushNestingTag($nested) {            array_unshift($this->_tag_stack, $nested);        }        /**         *    Accessor for current test structure tag.         *    @return NestedXmlTag     The group, case or method tag         *                             being parsed.         *    @access private         */        function &_getCurrentNestingTag() {            return $this->_tag_stack[0];        }        /**         *    Ends a nesting tag.         *    @return NestedXmlTag     The group, case or method tag         *                             just finished.         *    @access private         */        function _popNestingTag() {            return array_shift($this->_tag_stack);        }        /**         *    Test if tag is a leaf node with only text content.         *    @param string $tag        XML tag name.         *    @return @boolean          True if leaf, false if nesting.         *    @private         */        function _isLeaf($tag) {            return in_array($tag, array(                    'NAME', 'PASS', 'FAIL', 'EXCEPTION', 'SKIP', 'MESSAGE', 'FORMATTED', 'SIGNAL'));        }        /**         *    Handler for start of event element.         *    @param resource $expat     Parser handle.         *    @param string $tag         Element name.         *    @param hash $attributes    Name value pairs.         *                               Attributes without content         *                               are marked as true.         *    @access protected         */        function _startElement($expat, $tag, $attributes) {            $this->_attributes = $attributes;            if ($tag == 'GROUP') {                $this->_pushNestingTag(new NestingGroupTag($attributes));            } elseif ($tag == 'CASE') {                $this->_pushNestingTag(new NestingCaseTag($attributes));            } elseif ($tag == 'TEST') {                $this->_pushNestingTag(new NestingMethodTag($attributes));            } elseif ($this->_isLeaf($tag)) {                $this->_in_content_tag = true;                $this->_content = '';            }        }        /**         *    End of element event.         *    @param resource $expat     Parser handle.         *    @param string $tag         Element name.         *    @access protected         */        function _endElement($expat, $tag) {            $this->_in_content_tag = false;            if (in_array($tag, array('GROUP', 'CASE', 'TEST'))) {                $nesting_tag = $this->_popNestingTag();                $nesting_tag->paintEnd($this->_listener);            } elseif ($tag == 'NAME') {                $nesting_tag = &$this->_getCurrentNestingTag();                $nesting_tag->setName($this->_content);                $nesting_tag->paintStart($this->_listener);            } elseif ($tag == 'PASS') {                $this->_listener->paintPass($this->_content);            } elseif ($tag == 'FAIL') {                $this->_listener->paintFail($this->_content);            } elseif ($tag == 'EXCEPTION') {                $this->_listener->paintError($this->_content);            } elseif ($tag == 'SKIP') {                $this->_listener->paintSkip($this->_content);            } elseif ($tag == 'SIGNAL') {                $this->_listener->paintSignal(                        $this->_attributes['TYPE'],                        unserialize($this->_content));            } elseif ($tag == 'MESSAGE') {                $this->_listener->paintMessage($this->_content);            } elseif ($tag == 'FORMATTED') {                $this->_listener->paintFormattedMessage($this->_content);            }        }        /**         *    Content between start and end elements.         *    @param resource $expat     Parser handle.         *    @param string $text        Usually output messages.         *    @access protected         */        function _addContent($expat, $text) {            if ($this->_in_content_tag) {                $this->_content .= $text;            }            return true;        }        /**         *    XML and Doctype handler. Discards all such content.         *    @param resource $expat     Parser handle.         *    @param string $default     Text of default content.         *    @access protected         */        function _default($expat, $default) {        }    }?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?