diff options
author | Anika Henke <anika@selfthinker.org> | 2012-06-29 17:51:09 +0100 |
---|---|---|
committer | Anika Henke <anika@selfthinker.org> | 2012-06-29 17:51:09 +0100 |
commit | 0c06a181819249c6a4a2a6c60e13f739df1f2253 (patch) | |
tree | 859377c572d0acbfc520b02304ef515bf3aebbe0 /_test/lib | |
parent | ef7e36e4fd2a168977754f0aac1d855fb651f104 (diff) | |
parent | 5d0aaf958325f500ce69cfb79e69eb0d8f83fdeb (diff) | |
download | rpg-0c06a181819249c6a4a2a6c60e13f739df1f2253.tar.gz rpg-0c06a181819249c6a4a2a6c60e13f739df1f2253.tar.bz2 |
Merge branch 'master' of github.com:splitbrain/dokuwiki into frontend_improvements
Conflicts:
lib/tpl/dokuwiki/css/basic.css
Diffstat (limited to '_test/lib')
-rw-r--r-- | _test/lib/cli_reporter.php | 114 | ||||
-rw-r--r-- | _test/lib/mock_functions.php | 519 | ||||
-rw-r--r-- | _test/lib/rss_writer_class.php | 369 | ||||
-rw-r--r-- | _test/lib/testmanager.php | 579 | ||||
-rw-r--r-- | _test/lib/unittest.php | 5 | ||||
-rw-r--r-- | _test/lib/web.inc.php | 47 | ||||
-rw-r--r-- | _test/lib/xml_writer_class.php | 292 |
7 files changed, 0 insertions, 1925 deletions
diff --git a/_test/lib/cli_reporter.php b/_test/lib/cli_reporter.php deleted file mode 100644 index 3ad88119d..000000000 --- a/_test/lib/cli_reporter.php +++ /dev/null @@ -1,114 +0,0 @@ -<?php // -*- fill-column: 80; tab-width: 4; c-basic-offset: 4 -*- - -if (! defined('ST_FAILDETAIL_SEPARATOR')) { - define('ST_FAILDETAIL_SEPARATOR', "->"); -} - -if (! defined('ST_FAILS_RETURN_CODE')) { - define('ST_FAILS_RETURN_CODE', 1); -} - -if (version_compare(phpversion(), '4.3.0', '<') || - php_sapi_name() == 'cgi') { - define('STDOUT', fopen('php://stdout', 'w')); - define('STDERR', fopen('php://stderr', 'w')); - register_shutdown_function( - create_function('', 'fclose(STDOUT); fclose(STDERR); return true;')); -} - -/** - * Minimal command line test displayer. Writes fail details to STDERR. Returns 0 - * to the shell if all tests pass, ST_FAILS_RETURN_CODE if any test fails. - */ -class CLIReporter extends SimpleReporter { - - var $faildetail_separator = ST_FAILDETAIL_SEPARATOR; - var $_failinfo; - - function CLIReporter($faildetail_separator = NULL) { - $this->SimpleReporter(); - if (! is_null($faildetail_separator)) { - $this->setFailDetailSeparator($faildetail_separator); - } - } - - function setFailDetailSeparator($separator) { - $this->faildetail_separator = $separator; - } - - /** - * Return a formatted faildetail for printing. - */ - function &_paintTestFailDetail(&$message) { - $buffer = ''; - $faildetail = $this->getTestList(); - array_shift($faildetail); - $buffer .= implode($this->faildetail_separator, $faildetail); - $buffer .= $this->faildetail_separator . "$message\n"; - return $buffer; - } - - /** - * Paint fail faildetail to STDERR. - */ - function paintFail($message) { - parent::paintFail($message); - fwrite(STDERR, 'FAIL' . $this->faildetail_separator . - $this->_paintTestFailDetail($message)); - if($this->_failinfo){ - fwrite(STDERR, ' additional info was: '.$this->_failinfo."\n"); - $this->_failinfo = ''; - } - } - - /** - * reset failinfo - */ - function paintPass($message) { - parent::paintPass($message); - $this->_failinfo = ''; - } - - /** - * Paint exception faildetail to STDERR. - */ - function paintException($message) { - parent::paintException($message); - fwrite(STDERR, 'EXCEPTION' . $this->faildetail_separator . - $this->_paintTestFailDetail($message)); - } - - /** - * Handle failinfo message - */ - function paintSignal($type,$message) { - parent::paintSignal($type,$message); - if($type = 'failinfo') $this->_failinfo = $message; - } - - - - /** - * Paint a footer with test case name, timestamp, counts of fails and - * exceptions. - */ - function paintFooter($test_name) { - $buffer = $this->getTestCaseProgress() . '/' . - $this->getTestCaseCount() . ' test cases complete: '; - - if (0 < ($this->getFailCount() + $this->getExceptionCount())) { - $buffer .= $this->getPassCount() . " passes"; - if (0 < $this->getFailCount()) { - $buffer .= ", " . $this->getFailCount() . " fails"; - } - if (0 < $this->getExceptionCount()) { - $buffer .= ", " . $this->getExceptionCount() . " exceptions"; - } - $buffer .= ".\n"; - fwrite(STDOUT, $buffer); - exit(ST_FAILS_RETURN_CODE); - } else { - fwrite(STDOUT, $buffer . $this->getPassCount() . " passes.\n"); - } - } -} diff --git a/_test/lib/mock_functions.php b/_test/lib/mock_functions.php deleted file mode 100644 index 9ef5b7b8f..000000000 --- a/_test/lib/mock_functions.php +++ /dev/null @@ -1,519 +0,0 @@ -<?php - /** - * base include file for SimpleTest - * @package SimpleTest - * @subpackage MockFunctions - * @version $Id: mock_objects.php,v 1.86 2005/09/10 23:01:56 lastcraft Exp $ - */ - - /** - * Generates a mock version of a function. - * Note that all public methods in this class should be called - * statically - * Note that you must call the restore method yourself, to remove - * a mock function implementation after associated tests are - * complete - * @package SimpleTest - * @subpackage MockFunctions - */ - class MockFunction { - - /** - * Raises an error if you construct MockFunction - * @access private - */ - function MockFunction() { - trigger_error('MockFunction only provides static methods', - E_USER_ERROR); - } - - /** - * Generates a mock function - * @param string $function Function name to mock - * @access public - * @return SimpleMockFunction - * @static - */ - function & generate($function) { - $mock = & MockFunction::_instance($function, TRUE); - $mock->deploy(); - return $mock; - } - - /** - * Removes the mock function implementation and restores - * the real implementation (if one existed) - * @TODO Would be good to have this called automatically - * @param string $function Function name - * @access public - * @static - */ - function restore($function) { - $mock = & MockFunction::_instance($function); - $mock->restore(); - } - - /** - * Fetch a singleton instance of SimpleMockFunction - * @param string $function Function name - * @param boolean $fresh Force a fresh instance - * @access private - * @static - */ - function &_instance($function, $fresh = FALSE) { - static $singleton = array(); - - $function = strtolower($function); - - if ( $fresh ) { - if ( isset($singleton[$function]) ) { - unset($singleton[$function]); - } - } - - if ( !isset($singleton[$function]) ) { - // TODO: case sensitivity issues - $class = $function."MockFunction"; - MockFunction::_generateSubClass($class, $function); - $singleton[$function] = new $class($function); - } - - return $singleton[$function]; - } - - /** - * Required for strict mode and SimpleMock - * @TODO Should perhaps be placed in SimpleFunctionGenerator - * @param string $class subclass name - * @param string $method method name - * @access private - * @static - */ - function _generateSubClass($class, $method) { - if ( class_exists($class) ) { - return; - } - $code = "class $class extends SimpleMockFunction {\n"; - $code .= " function $method () {}\n"; - $code .= "}\n"; - eval($code); - } - - /** - * Changes the default wildcard object. - * @param string $function Function name wildcard applies to - * @param mixed $wildcard Parameter matching wildcard. - * @access public - * @static - */ - function setWildcard($function, $wildcard) { - $mock = & MockFunction::_instance($function); - $mock->setWildcard($wildcard); - } - - /** - * Fetches the call count of a function so far. - * @param string $function Function name called. - * @return Number of calls so far. - * @access public - * @static - */ - function getCallCount($function) { - $mock = & MockFunction::_instance($function); - return $mock->getCallCount($function); - } - - /** - * Sets a return for a parameter list that will - * be passed by value for all calls to this function. - * @param string $function Function name. - * @param mixed $value Result of call passed by value. - * @param array $args List of parameters to match - * including wildcards. - * @access public - * @static - */ - function setReturnValue($function, $value, $args = false) { - $mock = & MockFunction::_instance($function); - $mock->setReturnValue($function, $value, $args); - } - - /** - * Sets a return for a parameter list that will - * be passed by value only when the required call count - * is reached. - * @param integer $timing Number of calls in the future - * to which the result applies. If - * not set then all calls will return - * the value. - * @param string $function Function name. - * @param mixed $value Result of call passed by value. - * @param array $args List of parameters to match - * including wildcards. - * @access public - * @static - */ - function setReturnValueAt($timing, $function, $value, $args = false) { - $mock = & MockFunction::_instance($function); - $mock->setReturnValueAt($timing, $function, $value, $args); - } - - /** - * Sets a return for a parameter list that will - * be passed by reference for all calls. - * @param string $function Function name. - * @param mixed $reference Result of the call will be this object. - * @param array $args List of parameters to match - * including wildcards. - * @access public - * @static - */ - function setReturnReference($function, &$reference, $args = false) { - $mock = & MockFunction::_instance($function); - $mock->setReturnReference($function, $reference, $args); - } - - /** - * Sets a return for a parameter list that will - * be passed by value only when the required call count - * is reached. - * @param integer $timing Number of calls in the future - * to which the result applies. If - * not set then all calls will return - * the value. - * @param string $function Function name. - * @param mixed $reference Result of the call will be this object. - * @param array $args List of parameters to match - * including wildcards. - * @access public - * @static - */ - function setReturnReferenceAt($timing, $function, &$reference, $args = false) { - $mock = & MockFunction::_instance($function); - $mock->setReturnReferenceAt($timing, $function, $reference, $args); - } - - /** - * Sets up an expected call with a set of - * expected parameters in that call. All - * calls will be compared to these expectations - * regardless of when the call is made. - * @param string $function Function call to test. - * @param array $args Expected parameters for the call - * including wildcards. - * @param string $message Overridden message. - * @access public - * @static - */ - function expectArguments($function, $args, $message = '%s') { - $mock = & MockFunction::_instance($function); - $mock->expectArguments($function, $args, $message); - } - - /** - * Sets up an expected call with a set of - * expected parameters in that call. The - * expected call count will be adjusted if it - * is set too low to reach this call. - * @param integer $timing Number of calls in the future at - * which to test. Next call is 0. - * @param string $function Function call to test. - * @param array $args Expected parameters for the call - * including wildcards. - * @param string $message Overridden message. - * @access public - * @static - */ - function expectArgumentsAt($timing, $function, $args, $message = '%s') { - $mock = & MockFunction::_instance($function); - $mock->expectArgumentsAt($timing, $function, $args, $message); - } - - /** - * Sets an expectation for the number of times - * a function will be called. - * @param string $function Function call to test. - * @param integer $count Number of times it should - * have been called at tally. - * @param string $message Overridden message. - * @access public - * @static - */ - function expectCallCount($function, $count, $message = '%s') { - $mock = & MockFunction::_instance($function); - $mock->expectCallCount($function, $count, $message); - } - - /** - * Sets the number of times a function may be called - * before a test failure is triggered. - * @param string $function Function call to test. - * @param integer $count Most number of times it should - * have been called. - * @param string $message Overridden message. - * @access public - * @static - */ - function expectMaximumCallCount($function, $count, $message = '%s') { - $mock = & MockFunction::_instance($function); - $mock->expectMaximumCallCount($function, $count, $message); - } - - /** - * Sets the minimum number of times the function must be called - * otherwise a test failure is triggered - * @param string $function Function call to test. - * @param integer $count Least number of times it should - * have been called. - * @param string $message Overridden message. - * @access public - * @static - */ - function expectMinimumCallCount($function, $count, $message = '%s') { - $mock = & MockFunction::_instance($function); - $mock->expectMinimumCallCount($function, $count, $message); - } - - /** - * Convenience method for barring a function - * call. - * @param string $function Function call to ban. - * @param string $message Overridden message. - * @access public - * @static - */ - function expectNever($function, $message = '%s') { - $mock = & MockFunction::_instance($function); - $mock->expectNever($function, $message); - } - - /** - * Convenience method for a single function - * call. - * @param string $function Function call to track. - * @param array $args Expected argument list or - * false for any arguments. - * @param string $message Overridden message. - * @access public - * @static - */ - function expectOnce($function, $args = false, $message = '%s') { - $mock = & MockFunction::_instance($function); - $mock->expectOnce($function, $args, $message); - } - - /** - * Convenience method for requiring a function - * call. - * @param string $function Function call to track. - * @param array $args Expected argument list or - * false for any arguments. - * @param string $message Overridden message. - * @access public - * @static - */ - function expectAtLeastOnce($function, $args = false, $message = '%s') { - $mock = & MockFunction::_instance($function); - $mock->expectAtLeastOnce($function, $args, $message); - } - - function atTestEnd($function) { - $mock = & MockFunction::_instance($function); - $mock->atTestEnd($function); - } - - } - - /** - * Represents a single, mocked function, tracking calls made to it - * @package SimpleTest - * @subpackage MockFunctions - */ - class SimpleMockFunction extends SimpleMock { - - var $_is_mocked = FALSE; - var $_generator; - - /** - * Sets up the mock, creating a generator depending on whether - * the function is already declared - * @param string $function Name of function being mocked - */ - function SimpleMockFunction($function) { - - SimpleMock :: SimpleMock(); - - if ( function_exists($function) ) { - $this->_generator = new SimpleDeclaredFunctionGenerator($function); - } else { - $this->_generator = new SimpleUndeclaredFunctionGenerator($function); - } - - } - - /** - * Deploys the mock function implementation into PHP's function - * table, replacing any existing implementation - * @access public - */ - function deploy() { - - if ( !$this->_is_mocked ) { - - $this->_is_mocked = TRUE; - $this->_generator->deploy(); - - } - - } - - /** - * Restores the state of PHP's function table to that before - * the mock function was deployed. Removes the mock function - * implementation and restores any existing implementation of - * that function - * @access public - */ - function restore() { - - if ( $this->_is_mocked ) { - - $this->_is_mocked = FALSE; - $this->_generator->restore(); - - } - - } - - } - - /** - * Base class for deploying and restoring from mock functions - * @package SimpleTest - * @subpackage MockFunctions - * @abstract - */ - class SimpleFunctionGenerator { - - var $_function; - - /** - * @TODO Validate the function name (as it's being used in eval) - * @TODO Add list of illegal functions (ones which must not be mocked - * as they will break SimpleTest, which uses them) - * @param string $function Name of function being mocked - */ - function SimpleFunctionGenerator($function) { - $this->_function = $function; - } - - /** - * Generates the mock function implementation, using eval - * @access private - */ - function _generateMockFunction() { - $code = "function " . $this->_function . "() {\n"; - $code .= " \$args = func_get_args();\n"; - $code .= " \$mock = & MockFunction::_instance('".$this->_function."');\n"; - $code .= " \$result = &\$mock->_invoke(\"".$this->_function."\", \$args);\n"; - $code .= " return \$result;\n"; - $code .= "}\n"; - eval($code); - } - } - - /** - * Mock function generator for functions which have already been declared - * @package SimpleTest - * @subpackage MockFunctions - */ - class SimpleDeclaredFunctionGenerator extends SimpleFunctionGenerator { - - var $_tmp_function = NULL; - - /** - * Invokes the _generateTmpFnFname - * @param string $function Name of function being mocked - */ - function SimpleDeclaredFunctionGenerator($function) { - - SimpleFunctionGenerator::SimpleFunctionGenerator($function); - $this->_generateTmpFnFname(); - - } - - /** - * Generates a temporary name for the declared function implementation - * which is will be renamed to while the mock function is in use - * @access private - */ - function _generateTmpFnFname() { - static $count = 1; - $this->_tmp_function = 'tmp_'.md5(time().$this->_function.$count); - $count++; - } - - /** - * Deploys the mock function implementation - * @access public - */ - function deploy() { - - runkit_function_rename( - $this->_function, - $this->_tmp_function - ) or - trigger_error('Error archiving real function implementation', - E_USER_ERROR); - - $this->_generateMockFunction(); - } - - /** - * Removes the mock function implementation and restores - * the previously declared implementation - * @access public - */ - function restore() { - - runkit_function_remove($this->_function) or - trigger_error('Error removing mock function', - E_USER_ERROR); - - runkit_function_rename( - $this->_tmp_function, - $this->_function - ) or - trigger_error('Error restoring real function', - E_USER_ERROR); - } - } - - /** - * Mock function generator for functions which have not - * already been declared - * @package SimpleTest - * @subpackage MockFunctions - */ - class SimpleUndeclaredFunctionGenerator extends SimpleFunctionGenerator { - - /** - * Deploys the mock function implementation - * @access public - */ - function deploy() { - $this->_generateMockFunction(); - } - - /** - * Removes the mock function implementation - * @access public - */ - function restore() { - runkit_function_remove($this->_function) or - trigger_error('Error removing mock function', - E_USER_ERROR); - } - - } - diff --git a/_test/lib/rss_writer_class.php b/_test/lib/rss_writer_class.php deleted file mode 100644 index 684acfcfa..000000000 --- a/_test/lib/rss_writer_class.php +++ /dev/null @@ -1,369 +0,0 @@ -<?php -if(!defined("METAL_LIBRARY_XML_RSS_WRITER_CLASS")) -{ - define("METAL_LIBRARY_XML_RSS_WRITER_CLASS",1); - -/* - * - * Copyright � (C) Manuel Lemos 2002 - * - * @(#) $Id: rss_writer_class.php,v 1.5 2005/08/20 09:46:06 pachanga Exp $ - * - */ - -class rss_writer_class extends xml_writer_class -{ - /* - * Protected variables - * - */ - var $root=""; - var $channel=""; - var $image=""; - var $textinput=""; - var $items=0; - var $itemsequence=""; - - /* - * Public variables - * - */ - var $specification="1.0"; - var $about=""; - var $rssnamespaces=array(); - var $allownoitems=0; - var $generatedcomment="Generated by: http://www.phpclasses.org/rsswriter"; - - - /* - * Protected functions - * - */ - Function addrssproperties(&$properties,$parent,&$required,&$optional,$scope) - { - $noattributes=array(); - $required_properties=0; - Reset($properties); - $end=(GetType($property=Key($properties))!="string"); - for(;!$end;) - { - if(IsSet($required[$property])) - { - if($required[$property]) - { - $this->error=("required ".$scope." property \"".$property."\" is already set"); - return 0; - } - $required[$property]=1; - $required_properties++; - } - else - { - if(IsSet($optional[$property])) - { - if($optional[$property]) - { - $this->error=("optional ".$scope." property \"".$property."\" is already set"); - return 0; - } - $optional[$property]=1; - } - else - { - if(GetType($colon=strpos($property,":",0))=="integer") - { - $namespace=substr($property,0,$colon); - if(!(!strcmp($namespace,"rdf") || IsSet($this->rssnamespaces[$namespace]))) - $this->error=("the name space of property \"".$property."\" was not declared"); - } - else - $this->error=("\"".$property."\" is not a supported ".$scope." property"); - } - } - if(!($this->adddatatag($property,$noattributes,$properties[$property],$parent,$path))) - return 0; - Next($properties); - $end=(GetType($property=Key($properties))!="string"); - } - if($required_properties<count($required)) - { - Reset($required); - $end=(GetType($property=Key($required))!="string"); - for(;!$end;) - { - if(!($required[$property])) - { - $this->error=("it was not specified the required ".$scope." property \"".$property."\""); - return 0; - } - Next($required); - $end=(GetType($property=Key($required))!="string"); - } - } - return 1; - } - - /* - * Public functions - * - */ - Function addchannel(&$properties) - { - if(strcmp($this->error,"")) - return 0; - if(strcmp($this->channel,"")) - { - $this->error="a channel was already added"; - return 0; - } - $channel_attributes=array(); - switch($this->specification) - { - case "0.9": - $root="rdf:RDF"; - $attributes=array("xmlns:rdf"=>"http://www.w3.org/1999/02/22-rdf-syntax-ns#","xmlns"=>"http://my.netscape.com/rdf/simple/0.9/"); - $required=array("description"=>0,"link"=>0,"title"=>0); - $optional=array(); - break; - case "0.91": - $root="rss"; - $attributes=array("version"=>$this->specification); - $required=array("description"=>0,"language"=>0,"link"=>0,"title"=>0); - $optional=array("copyright"=>0,"docs"=>0,"lastBuildDate"=>0,"managingEditor"=>0,"pubDate"=>0,"rating"=>0,"webMaster"=>0); - break; - case "1.0": - if(!strcmp($this->about,"")) - { - $this->error="it was not specified the about URL attribute"; - return 0; - } - $root="rdf:RDF"; - $attributes=array("xmlns:rdf"=>"http://www.w3.org/1999/02/22-rdf-syntax-ns#","xmlns"=>"http://purl.org/rss/1.0/"); - Reset($this->rssnamespaces); - $end=(GetType($namespace=Key($this->rssnamespaces))!="string"); - for(;!$end;) - { - if(!strcmp($namespace,"rdf")) - { - $this->error="the rdf namespace is being redeclared"; - return 0; - } - $attributes[("xmlns:".$namespace)]=$this->rssnamespaces[$namespace]; - Next($this->rssnamespaces); - $end=(GetType($namespace=Key($this->rssnamespaces))!="string"); - } - $channel_attributes=array("rdf:about"=>$this->about); - $required=array("description"=>0,"link"=>0,"title"=>0); - $optional=array(); - break; - default: - $this->error="it was not specified a supported RSS specification version"; - return 0; - } - $this->addtag($root,$attributes,"",$path,1); - $this->root=$path; - if(!($this->addtag("channel",$channel_attributes,$this->root,$path,1))) - return 0; - if(!($this->addrssproperties($properties,$path,$required,$optional,"channel"))) - return 0; - $this->channel=$path; - return 1; - } - - Function additem(&$properties) - { - if(strcmp($this->error,"")) - return 0; - if(!strcmp($this->channel,"")) - { - $this->error="the channel was not yet added"; - return 0; - } - if(strcmp($this->textinput,"")) - { - $this->error="items can not be added to the channel after defining the textinput"; - return 0; - } - $attributes=array(); - switch($this->specification) - { - case "0.9": - $parent=$this->root; - break; - case "0.91": - $parent=$this->channel; - break; - case "1.0": - if(IsSet($properties["link"])) - $attributes["rdf:about"]=$properties["link"]; - $parent=$this->root; - break; - default: - $this->error="it was not specified a supported RSS specification version"; - return 0; - } - if(!($this->addtag("item",$attributes,$parent,$path,1))) - return 0; - $required=array("link"=>0,"title"=>0); - $optional=array("description"=>0); - if(!($this->addrssproperties($properties,$path,$required,$optional,"item"))) - return 0; - if(!strcmp($this->specification,"1.0")) - { - if(!strcmp($this->itemsequence,"")) - { - $attributes=array(); - if(!($this->addtag("items",$attributes,$this->channel,$path,1) && $this->addtag("rdf:Seq",$attributes,$path,$path,1))) - return 0; - $this->itemsequence=$path; - } - $attributes=array("rdf:resource"=>$properties["link"]); - if(!($this->addtag("rdf:li",$attributes,$this->itemsequence,$path,0))) - return 0; - } - $this->items++; - return 1; - } - - Function addimage(&$properties) - { - if(strcmp($this->error,"")) - return 0; - if(!strcmp($this->channel,"")) - { - $this->error="the channel was not yet added"; - return 0; - } - if(strcmp($this->image,"")) - { - $this->error="the channel image was already associated"; - return 0; - } - if($this->items!=0) - { - $this->error="the image can only be defined before adding the channel items"; - return 0; - } - $attributes=array(); - switch($this->specification) - { - case "0.9": - $parent=$this->root; - break; - case "0.91": - $parent=$this->channel; - break; - case "1.0": - if(IsSet($properties["url"])) - $attributes["rdf:about"]=$properties["url"]; - $parent=$this->root; - break; - default: - $this->error="it was not specified a supported RSS specification version"; - return 0; - } - if(!($this->addtag("image",$attributes,$parent,$path,1))) - return 0; - $this->image=$path; - $required=array("link"=>0,"title"=>0,"url"=>0); - $optional=array("description"=>0,"width"=>0,"height"=>0); - if(!($this->addrssproperties($properties,$this->image,$required,$optional,"image"))) - return 0; - if(!strcmp($this->specification,"1.0")) - { - $attributes=array("rdf:resource"=>$properties["url"]); - return $this->addtag("image",$attributes,$this->channel,$path,0); - } - return 1; - } - - Function addtextinput(&$properties) - { - if(strcmp($this->error,"")) - return 0; - if(!strcmp($this->channel,"")) - { - $this->error="the channel was not yet added"; - return 0; - } - if(strcmp($this->textinput,"")) - { - $this->error="the channel text input was already associated"; - return 0; - } - if($this->items==0 && !$this->allownoitems) - { - $this->error="it were not specified any items before defining the channel text input"; - return 0; - } - $attributes=array(); - switch($this->specification) - { - case "0.9": - $parent=$this->root; - break; - case "0.91": - $parent=$this->channel; - break; - case "1.0": - if(IsSet($properties["link"])) - $attributes["rdf:about"]=$properties["link"]; - $parent=$this->root; - break; - default: - $this->error="it was not specified a supported RSS specification version"; - return 0; - } - if(!($this->addtag("textinput",$attributes,$parent,$path,1))) - return 0; - $this->textinput=$path; - $required=array("description"=>0,"link"=>0,"name"=>0,"title"=>0); - $optional=array(); - if(!($this->addrssproperties($properties,$this->textinput,$required,$optional,"textinput"))) - return 0; - if(!strcmp($this->specification,"1.0")) - { - $attributes=array("rdf:resource"=>$properties["link"]); - return $this->addtag("textinput",$attributes,$this->channel,$path,0); - } - return 1; - } - - Function writerss(&$output) - { - if(strcmp($this->error,"")) - return 0; - if(!strcmp($this->channel,"")) - { - $this->error="it was not defined the RSS channel"; - return 0; - } - if($this->items==0 && !$this->allownoitems) - { - $this->error="it were not defined any RSS channel items"; - return 0; - } - switch($this->specification) - { - case "0.9": - $this->dtdtype="PUBLIC"; - $this->dtddefinition="-//Netscape Communications//DTD RSS 0.9//EN"; - $this->dtdurl="http://my.netscape.com/publish/formats/rss-0.9.dtd"; - break; - case "0.91": - $this->dtdtype="PUBLIC"; - $this->dtddefinition="-//Netscape Communications//DTD RSS 0.91//EN"; - $this->dtdurl="http://my.netscape.com/publish/formats/rss-0.91.dtd"; - break; - case "1.0": - $this->dtdtype=""; - break; - default: - $this->error="it was not specified a supported RSS specification version"; - return 0; - } - return $this->write($output); - } -}; - -} diff --git a/_test/lib/testmanager.php b/_test/lib/testmanager.php deleted file mode 100644 index 06efd2694..000000000 --- a/_test/lib/testmanager.php +++ /dev/null @@ -1,579 +0,0 @@ -<?php // -*- fill-column: 80; tab-width: 4; c-basic-offset: 4 -*- -/** -* Lots TODO here... -*/ - -define('TEST_GROUPS',realpath(dirname(__FILE__).'/../cases')); -define('TEST_CASES',realpath(dirname(__FILE__).'/../cases')); -define('TEST_PLUGINS',realpath(dirname(__FILE__).'/../../lib/plugins')); - -// try to load runkit extension -if (!extension_loaded('runkit') && function_exists('dl')) { - if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) { - @dl('php_runkit.dll'); - } else { - @dl('runkit.so'); - } -} - -class TestManager { - var $_testcase_extension = '.test.php'; - var $_grouptest_extension = '.group.php'; - - function setup() { - $ini_file = realpath(dirname(__FILE__).'/../tests.ini'); - - if (! file_exists($ini_file)) { - trigger_error("Missing configuration file {$ini_file}", - E_USER_ERROR); - } - $config = parse_ini_file($ini_file); - foreach ($config as $key => $value) { - define($key, $value); - } - TestManager::_installSimpleTest(); - - list($version) = file(SIMPLE_TEST.'VERSION'); - $version = trim($version); - if(!version_compare('1.0.1alpha',$version,'<')){ - echo "At least SimpleTest Version 1.0.1alpha is required."; - echo " Yours is $version\n"; - exit; - } - } - - function _installSimpleTest() { - require_once SIMPLE_TEST . 'unit_tester.php'; - require_once SIMPLE_TEST . 'web_tester.php'; - require_once SIMPLE_TEST . 'mock_objects.php'; - require_once 'web.inc.php'; - require_once 'mock_functions.php'; - } - - function runAllTests(&$reporter) { - $manager = new TestManager(); - $test_cases =& $manager->_getTestFileList(); - $test = new GroupTest('All Tests'); - foreach ($test_cases as $test_case) { - $test->addTestFile($test_case); - } - $test->run($reporter); - } - - function runAllPluginTests(&$reporter) { - $manager = new TestManager(); - $test_cases =& $manager->_getTestFileList(TEST_PLUGINS); - $test = new GroupTest('All Plugin Tests'); - foreach ($test_cases as $test_case) { - $test->addTestFile($test_case); - } - $test->run($reporter); - } - - - function runTestCase($testcase_name, $test_case_directory, &$reporter) { - $manager = new TestManager(); - - $testcase_name = preg_replace('/[^a-zA-Z0-9_:]/','',$testcase_name); - $testcase_name = str_replace(':',DIRECTORY_SEPARATOR,$testcase_name); - - $testcase_file = $test_case_directory . DIRECTORY_SEPARATOR . - strtolower($testcase_name) . $manager->_testcase_extension; - - if (! file_exists($testcase_file)) { - trigger_error("Test case {$testcase_file} cannot be found", - E_USER_ERROR); - } - - $test = new GroupTest("Individual test case: " . $testcase_name); - $test->addTestFile($testcase_file); - $test->run($reporter); - } - - function runTestFile($testcase_file, &$reporter) { - $manager = new TestManager(); - - if (! file_exists($testcase_file)) { - trigger_error("Test case {$testcase_file} cannot be found", - E_USER_ERROR); - } - - $test = new GroupTest("Individual test case: " . $testcase_file); - $test->addTestFile($testcase_file); - $test->run($reporter); - } - - function runGroupTest($group_test_name, $group_test_directory, &$reporter) { - $manager = new TestManager(); - $group_test_name = preg_replace('/[^a-zA-Z0-9_:]/','',$group_test_name); - $group_test_name = str_replace(':',DIRECTORY_SEPARATOR,$group_test_name); - $file_path = $group_test_directory . DIRECTORY_SEPARATOR . - strtolower($group_test_name) . $manager->_grouptest_extension; - - if (! file_exists($file_path)) { - trigger_error("Group test {$group_test_name} cannot be found at {$file_path}", - E_USER_ERROR); - } - - require_once $file_path; - $test = new GroupTest($group_test_name . ' group test'); - foreach ($manager->_getGroupTestClassNames($file_path) as $group_test) { - $test->addTestCase(new $group_test()); - } - $test->run($reporter); - } - - function addTestCasesFromDirectory(&$group_test, $directory = '.') { - $manager = new TestManager(); - $test_cases =& $manager->_getTestFileList($directory); - foreach ($test_cases as $test_case) { - $group_test->addTestFile($test_case); - } - } - - function &getTestCaseList($directory = '.') { - $manager = new TestManager(); - return $manager->_getTestCaseList($directory); - } - - function &_getTestCaseList($directory = '.') { - $file_list =& $this->_getTestFileList($directory); - $testcases = array(); - foreach ($file_list as $testcase_file) { - $case = str_replace($this->_testcase_extension, '',$testcase_file); - $case = str_replace(TEST_GROUPS . DIRECTORY_SEPARATOR, '', $case); - $case = str_replace(TEST_PLUGINS . DIRECTORY_SEPARATOR, '', $case); - $case = str_replace(DIRECTORY_SEPARATOR, ':', $case); - $testcases[$testcase_file] = $case; - } - return $testcases; - } - - function &_getTestFileList($directory = '.') { - return $this->_getRecursiveFileList($directory, - array(&$this, '_isTestCaseFile')); - } - - function &getPluginTestCaseList($directory = '.') { - $manager = new TestManager(); - return $manager->_getTestCaseList($directory); - } - - function &getPluginGroupTestList($directory = '.') { - $manager = new TestManager(); - return $manager->_getTestGroupList($directory); - } - - function &getGroupTestList($directory = '.') { - $manager = new TestManager(); - return $manager->_getTestGroupList($directory); - } - - function &_getTestGroupFileList($directory = '.') { - return $this->_getRecursiveFileList($directory, - array(&$this, '_isTestGroupFile')); - } - - function &_getTestGroupList($directory = '.') { - $file_list =& $this->_getTestGroupFileList($directory); - $grouptests = array(); - foreach ($file_list as $grouptest_file) { - $group = str_replace($this->_grouptest_extension, '',$grouptest_file); - $group = str_replace(TEST_GROUPS . DIRECTORY_SEPARATOR, '', $group); - $group = str_replace(TEST_PLUGINS . DIRECTORY_SEPARATOR, '', $group); - $group = str_replace(DIRECTORY_SEPARATOR, ':', $group); - $grouptests[$grouptest_file] = $group; - } - sort($grouptests); - return $grouptests; - } - - function &_getGroupTestClassNames($grouptest_file) { - $file = implode("\n", file($grouptest_file)); - preg_match("~lass\s+?(.*)\s+?extends .*?GroupTest~", $file, $matches); - if (! empty($matches)) { - unset($matches[0]); - return $matches; - } else { - return array(); - } - } - - function &_getRecursiveFileList($directory = '.', $file_test_function) { - $dh = opendir($directory); - if (! is_resource($dh)) { - trigger_error("Couldn't open {$directory}", E_USER_ERROR); - } - - $file_list = array(); - while ($file = readdir($dh)) { - $file_path = $directory . DIRECTORY_SEPARATOR . $file; - - if (0 === strpos($file, '.')) continue; - - if (is_dir($file_path)) { - $file_list = - array_merge($file_list, - $this->_getRecursiveFileList($file_path, - $file_test_function)); - } - if ($file_test_function[0]->$file_test_function[1]($file)) { - $file_list[] = $file_path; - } - } - closedir($dh); - return $file_list; - } - - function _isTestCaseFile($file) { - return $this->_hasExpectedExtension($file, $this->_testcase_extension); - } - - function _isTestGroupFile($file) { - return $this->_hasExpectedExtension($file, $this->_grouptest_extension); - } - - function _hasExpectedExtension($file, $extension) { - return $extension == - strtolower(substr($file, (0 - strlen($extension)))); - } -} - -/** -* @package WACT_TESTS -*/ -class CLITestManager extends TestManager { - function &getGroupTestList($directory = '.') { - $manager = new CLITestManager(); - $group_tests =& $manager->_getTestGroupList($directory); - - $buffer = "Available grouptests:\n"; - foreach ($group_tests as $group_test) { - $buffer .= " " . $group_test . "\n"; - } - return $buffer . "\n"; - } - - function &getTestCaseList($directory = '.') { - $manager = new CLITestManager(); - $test_cases =& $manager->_getTestCaseList($directory); - - $buffer = "Available test cases:\n"; - foreach ($test_cases as $test_case) { - $buffer .= " " . $test_case . "\n"; - } - return $buffer . "\n"; - } - - function &getPluginTestCaseList($directory = '.') { - $manager = new CLITestManager(); - $test_cases =& $manager->_getTestCaseList($directory); - - $buffer = "Available test cases:\n"; - foreach ($test_cases as $test_case) { - $buffer .= " " . $test_case . "\n"; - } - return $buffer . "\n"; - } - - function &getPluginGroupTestList($directory = '.') { - $manager = new CLITestManager(); - $test_cases =& $manager->_getTestGroupList($directory); - - $buffer = "Available test cases:\n"; - foreach ($test_cases as $test_case) { - $buffer .= " " . $test_case . "\n"; - } - return $buffer . "\n"; - } - -} - -class HTMLTestManager extends TestManager { - var $_url; - - function HTMLTestManager() { - $this->_url = $_SERVER['PHP_SELF']; - } - - function getBaseURL() { - return $this->_url; - } - - function &getGroupTestList($directory = '.') { - $manager = new HTMLTestManager(); - $group_tests =& $manager->_getTestGroupList($directory); - if (1 > count($group_tests)) { - return "<p>No test groups set up!</p>"; - } - $buffer = "<p>Available test groups:</p>\n<ul>"; - $buffer .= "<li><a href='" . $manager->getBaseURL() . "?group=all'>All tests</a></li>\n"; - foreach ($group_tests as $group_test) { - $buffer .= "<li><a href='" . $manager->getBaseURL() . "?group={$group_test}'>" . - $group_test . "</a></li>\n"; - } - - $buffer .= "</ul>\n"; - return $buffer; - } - - function &getTestCaseList($directory = '.') { - $manager = new HTMLTestManager(); - $testcases =& $manager->_getTestCaseList($directory); - - if (1 > count($testcases)) { - return "<p>No test cases set up!</p>"; - } - $buffer = "<p>Available test cases:</p>\n<ul>"; - foreach ($testcases as $testcase) { - $buffer .= "<li><a href='" . $manager->getBaseURL() . - "?case=" . urlencode($testcase) . "'>" . - $testcase . "</a></li>\n"; - } - - $buffer .= "</ul>\n"; - return $buffer; - } - - function &getPluginTestCaseList($directory = '.') { - $manager = new HTMLTestManager(); - $testcases =& $manager->_getTestCaseList($directory); - - if (1 > count($testcases)) { - return "<p>No plugin test cases set up!</p>"; - } - $buffer = "<p>Available plugin test cases:</p>\n<ul>"; - foreach ($testcases as $testcase) { - $buffer .= "<li><a href='" . $manager->getBaseURL() . - "?plugin_case=" . urlencode($testcase) . "'>" . - $testcase . "</a></li>\n"; - } - - $buffer .= "</ul>\n"; - return $buffer; - } - - function &getPluginGroupTestList($directory = '.') { - $manager = new HTMLTestManager(); - $group_tests =& $manager->_getTestGroupList($directory); - if (1 > count($group_tests)) { - return "<p>No plugin test groups set up!</p>"; - } - $buffer = "<p>Available plugin groups:</p>\n<ul>"; - $buffer .= "<li><a href='" . $manager->getBaseURL() . "?plugin_group=all'>All tests</a></li>\n"; - foreach ($group_tests as $group_test) { - $buffer .= "<li><a href='" . $manager->getBaseURL() . "?plugin_group={$group_test}'>" . - $group_test . "</a></li>\n"; - } - - $buffer .= "</ul>\n"; - return $buffer; - } - -} - -/** -* @package WACT_TESTS -*/ -class XMLTestManager extends HTMLTestManager { - - function XMLTestManager() { - parent::HTMLTestManager(); - } - - function &getGroupTestList($directory = '.') { - - $manager = new XMLTestManager(); - $group_tests =& $manager->_getTestGroupList($directory); - - $rss = & $manager->_getRssWriter(); - - if (1 > count($group_tests)) { - $rss->writeRss($output); - return $output; - } - - $properties["title"]="All Tests"; - $properties["description"]="All Tests"; - $properties["link"]='http://'.$_SERVER['SERVER_NAME']. - $manager->getBaseURL()."?group=all&output=xml"; - - $rss->additem($properties); - - foreach ($group_tests as $group_test) { - $properties["title"]=$group_test; - $properties["description"]=$group_test; - $properties["link"]='http://'.$_SERVER['SERVER_NAME']. - $manager->getBaseURL(). - "?group={$group_test}&output=xml"; - - $rss->additem($properties); - } - if ( !$rss->writeRss($output) ) { - die ( $rss->error ); - } - return $output; - - } - - function &getTestCaseList($directory = '.') { - - $manager = new XMLTestManager(); - $testcases =& $manager->_getTestCaseList($directory); - - $rss = & $manager->_getRssWriter(); - - if (1 > count($testcases)) { - $rss->writeRss($output); - return $output; - } - - foreach ($testcases as $testfile => $testcase) { - $properties["title"]=$testcase; - $properties["description"]=$testcase; - $properties["link"]='http://'.$_SERVER['SERVER_NAME']. - $manager->getBaseURL()."?case=" . - urlencode($testcase) . "&output=xml"; - - // Comment this out for performance? - $properties["dc:date"]=gmdate("Y-m-d\TH:i:sO",filemtime($testfile)); - - $rss->additem($properties); - } - - $rss->writeRss($output); - return $output; - } - - function &_getRssWriter() { - - $url = 'http://'.$_SERVER['SERVER_NAME'].str_replace('index.php','',$_SERVER['PHP_SELF']); - - require_once TEST_ROOT . '/lib/xml_writer_class.php'; - require_once TEST_ROOT . '/lib/rss_writer_class.php'; - - $rss_writer_object= new rss_writer_class(); - $rss_writer_object->specification="1.0"; - $rss_writer_object->about=$url."index.php?output=xml"; - $rss_writer_object->stylesheet=$url."rss2html.xsl"; - $rss_writer_object->rssnamespaces["dc"]="http://purl.org/dc/elements/1.1/"; - - // Channel Properties - $properties=array(); - $properties["title"]="Dokuwiki Unit Test Cases"; - $properties["description"]="Dokuwiki Unit Test Cases"; - $properties["link"]="http://wiki.splitbrain.org/"; - $properties["dc:date"]=gmdate("Y-m-d\TH:i:sO"); - $rss_writer_object->addchannel($properties); - - // Logo like this (if we had one) - /* - $properties=array(); - - $properties["link"]="http://www.phpclasses.org/"; - $properties["title"]="PHP Classes repository logo"; - $properties["description"]="Repository of components and other resources for PHP developers"; - $rss_writer_object->addimage($properties); - */ - - return $rss_writer_object; - } - -} - -/** -* @package WACT_TESTS -*/ -class RemoteTestManager extends TestManager { - - function RemoteTestManager() { - RemoteTestManager::_installSimpleTest(); - } - - function _installSimpleTest() { - require_once SIMPLE_TEST . 'remote.php'; - } - - function runAllTests(&$reporter, $url = FALSE) { - $groups = RemoteTestManager::getGroupTestList($url); - $T = new RemoteTestCase($groups['All Tests']); - $T->run($reporter); - } - - function runTestUrl($case_url,& $reporter, $url = FALSE) { - RemoteTestManager::_installSimpleTest(); - $T = new RemoteTestCase($case_url); - $T->run($reporter); - } - - function runTestCase($case_id,& $reporter, $url = FALSE) { - $cases = RemoteTestManager::getTestCaseList($url); - if ( !array_key_exists($case_id, $cases) ) { - trigger_error("Unknown test id $case_id\n",E_USER_ERROR); - } - $T = new RemoteTestCase($cases[$case_id]); - $T->run($reporter); - } - - function runGroupTest($group_name, &$reporter, $url = FALSE) { - $groups = RemoteTestManager::getGroupTestList($url); - if ( !array_key_exists($group_name, $groups) ) { - trigger_error("Unknown group $group_name\n",E_USER_ERROR); - } - $T = new RemoteTestCase($groups[$group_name]); - $T->run($reporter); - } - - function & getGroupTestList($url = FALSE) { - - if ( !$url ) { - $url = REMOTE_TEST_URL; - } - - $url .= '?output=xml'; - - $manager = new RemoteTestManager(); - $rss = & $manager->_getRssReader($url); - - $groupList = array(); - - foreach ($rss->getItems() as $item) { - $groupList[$item['title']] = $item['link']; - } - - return $groupList; - } - - function &getTestCaseList($url = FALSE) { - if ( !$url ) { - $url = REMOTE_TEST_URL; - } - - $url .= '?show=cases&output=xml'; - $manager = new RemoteTestManager(); - $rss = & $manager->_getRssReader($url); - - $caseList = array(); - - foreach ($rss->getItems() as $item) { - $caseList[$item['title']] = $item['link']; - } - - return $caseList; - } - - function &_getRssReader($url) { - require_once "XML/RSS.php"; - - $rss_reader = new XML_RSS($url); - - $status = $rss_reader->parse(); - - if (PEAR::isError($status) ) { - trigger_error($status->getMessage(),E_USER_WARNING); - } - - return $rss_reader; - } - -} diff --git a/_test/lib/unittest.php b/_test/lib/unittest.php deleted file mode 100644 index 220aa6c1b..000000000 --- a/_test/lib/unittest.php +++ /dev/null @@ -1,5 +0,0 @@ -<?php -class Doku_UnitTestCase extends UnitTestCase { -} -class Doku_GroupTest extends GroupTest { -} diff --git a/_test/lib/web.inc.php b/_test/lib/web.inc.php deleted file mode 100644 index 7ca70f204..000000000 --- a/_test/lib/web.inc.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php -/** -* @package WACT_TESTS -* @version $Id: web.inc.php,v 1.6 2005/08/20 09:46:06 pachanga Exp $ -*/ - -SimpleTestOptions::ignore('DWWebTestCase'); - -class DWWebTestCase extends WebTestCase { - - function assertNormalPage() { - $this->assertResponse(array(200)); - $this->assertNoUnwantedPattern('/Warning:/i'); - $this->assertNoUnwantedPattern('/Error:/i'); - $this->assertNoUnwantedPattern('/Fatal error/i'); - } - - function assertWantedLiteral($str) { - $this->assertWantedPattern('/' . preg_quote($str, '/'). '/'); - } - - function assertNoUnWantedLiteral($str) { - $this->assertNoUnWantedPattern('/' . preg_quote($str, '/'). '/'); - } - - function &_fileToPattern($file) { - $file_as_array = file($file); - $pattern = '#^'; - foreach ($file_as_array as $line) { - /* strip trailing newline */ - if ($line[strlen($line) - 1] == "\n") { - $line = substr($line, 0, strlen($line) - 1); - } - $line = preg_quote($line, '#'); - - /* replace paths with wildcard */ - $line = preg_replace("#'/[^']*#", "'.*", $line); - - $pattern .= $line . '\n'; - } - /* strip final newline */ - $pattern = substr($pattern, 0, strlen($pattern) - 2); - $pattern .= '$#i'; - return $pattern; - } - -} diff --git a/_test/lib/xml_writer_class.php b/_test/lib/xml_writer_class.php deleted file mode 100644 index 97fb1bee0..000000000 --- a/_test/lib/xml_writer_class.php +++ /dev/null @@ -1,292 +0,0 @@ -<?php -if(!defined("METAL_LIBRARY_XML_XML_WRITER_CLASS")) -{ - define("METAL_LIBRARY_XML_XML_WRITER_CLASS",1); - -/* - * - * Copyright � (C) Manuel Lemos 2001-2002 - * - * @(#) $Id: xml_writer_class.php,v 1.5 2005/08/20 09:46:06 pachanga Exp $ - * - */ - -class xml_writer_class -{ - /* - * Protected variables - * - */ - var $structure=array(); - var $nodes=array(); - - /* - * Public variables - * - */ - var $stylesheet=""; - var $stylesheettype="text/xsl"; - var $dtdtype=""; - var $dtddefinition=""; - var $dtdurl=""; - var $outputencoding="utf-8"; - var $inputencoding="iso-8859-1"; - var $linebreak="\n"; - var $indenttext=" "; - var $generatedcomment="Generated by: http://www.phpclasses.org/xmlwriter"; - var $error=""; - - - /* - * Protected functions - * - */ - Function escapedata($data) - { - $position=0; - $length=strlen($data); - $escapeddata=""; - for(;$position<$length;) - { - $character=substr($data,$position,1); - $code=Ord($character); - switch($code) - { - case 34: - $character="""; - break; - case 38: - $character="&"; - break; - case 39: - $character="'"; - break; - case 60: - $character="<"; - break; - case 62: - $character=">"; - break; - default: - if($code<32) - $character=("&#".strval($code).";"); - break; - } - $escapeddata.=$character; - $position++; - } - return $escapeddata; - } - - Function encodedata($data,&$encodeddata) - { - if(!strcmp($this->inputencoding,$this->outputencoding)) - $encodeddata=$this->escapedata($data); - else - { - switch(strtolower($this->outputencoding)) - { - case "utf-8": - if(!strcmp(strtolower($this->inputencoding),"iso-8859-1")) - { - $encoded_data=utf8_encode($this->escapedata($data)); - $encodeddata=$encoded_data; - } - else - { - $this->error=("can not encode iso-8859-1 data in ".$this->outputencoding); - return 0; - } - break; - case "iso-8859-1": - if(!strcmp(strtolower($this->inputencoding),"utf-8")) - { - $decoded=utf8_decode($data); - $encodeddata=$this->escapedata($decoded); - } - else - { - $this->error=("can not encode utf-8 data in ".$this->outputencoding); - return 0; - } - break; - default: - $this->error=("can not encode data in ".$this->inputencoding); - return 0; - } - } - return 1; - } - - Function writetag(&$output,$path,$indent) - { - $tag=$this->structure[$path]["Tag"]; - $output.=("<".$tag); - $attributecount=count($this->structure[$path]["Attributes"]); - if($attributecount>0) - { - $attributes=$this->structure[$path]["Attributes"]; - Reset($attributes); - $end=(GetType($key=Key($attributes))!="string"); - for(;!$end;) - { - $output.=(" ".$key."=\"".$attributes[$key]."\""); - Next($attributes); - $end=(GetType($key=Key($attributes))!="string"); - } - } - $elements=$this->structure[$path]["Elements"]; - if($elements>0) - { - $output.=">"; - $doindent=$this->structure[$path]["Indent"]; - $elementindent=(($doindent) ? $this->linebreak.$indent.$this->indenttext : ""); - $element=0; - for(;$element<$elements;) - { - $elementpath=($path.",".strval($element)); - $output.=$elementindent; - if(IsSet($this->nodes[$elementpath])) - { - if(!($this->writetag($output,$elementpath,$indent.$this->indenttext))) - return 0; - } - else - $output.=$this->structure[$elementpath]; - $element++; - } - $output.=((($doindent) ? $this->linebreak.$indent : "")."</".$tag.">"); - } - else - $output.="/>"; - return 1; - } - - /* - * Public functions - * - */ - Function write(&$output) - { - if(strcmp($this->error,"")) - return 0; - if(!(IsSet($this->structure["0"]))) - { - $this->error="XML document structure is empty"; - return 0; - } - $output=("<?xml version=\"1.0\" encoding=\"".$this->outputencoding."\"?>".$this->linebreak); - if(strcmp($this->dtdtype,"")) - { - $output.=("<!DOCTYPE ".$this->structure["0"]["Tag"]." "); - switch($this->dtdtype) - { - case "INTERNAL": - if(!strcmp($this->dtddefinition,"")) - { - $this->error="it was not specified a valid internal DTD definition"; - return 0; - } - $output.=("[".$this->linebreak.$this->dtddefinition.$this->linebreak."]"); - break; - case "SYSTEM": - if(!strcmp($this->dtdurl,"")) - { - $this->error="it was not specified a valid system DTD url"; - return 0; - } - $output.="SYSTEM"; - if(strcmp($this->dtddefinition,"")) - $output.=(" \"".$this->dtddefinition."\""); - $output.=(" \"".$this->dtdurl."\""); - break; - case "PUBLIC": - if(!strcmp($this->dtddefinition,"")) - { - $this->error="it was not specified a valid public DTD definition"; - return 0; - } - $output.=("PUBLIC \"".$this->dtddefinition."\""); - if(strcmp($this->dtdurl,"")) - $output.=(" \"".$this->dtdurl."\""); - break; - default: - $this->error="it was not specified a valid DTD type"; - return 0; - } - $output.=(">".$this->linebreak); - } - if(strcmp($this->stylesheet,"")) - { - if(!strcmp($this->stylesheettype,"")) - { - $this->error="it was not specified a valid stylesheet type"; - return 0; - } - $output.=("<?xml-stylesheet type=\"".$this->stylesheettype."\" href=\"".$this->stylesheet."\"?>".$this->linebreak); - } - if(strcmp($this->generatedcomment,"")) - $output.=("<!-- ".$this->generatedcomment." -->".$this->linebreak); - return $this->writetag($output,"0",""); - } - - Function addtag($tag,&$attributes,$parent,&$path,$indent) - { - if(strcmp($this->error,"")) - return 0; - $path=((!strcmp($parent,"")) ? "0" : ($parent.",".strval($this->structure[$parent]["Elements"]))); - if(IsSet($this->structure[$path])) - { - $this->error=("tag with path ".$path." is already defined"); - return 0; - } - $encodedattributes=array(); - Reset($attributes); - $end=(GetType($attribute_name=Key($attributes))!="string"); - for(;!$end;) - { - $encodedattributes[$attribute_name]=""; - if(!($this->encodedata($attributes[$attribute_name],$encoded_data))) - return 0; - $encodedattributes[$attribute_name]=$encoded_data; - Next($attributes); - $end=(GetType($attribute_name=Key($attributes))!="string"); - } - $this->structure[$path]=array( - "Tag"=>$tag, - "Attributes"=>$encodedattributes, - "Elements"=>0, - "Indent"=>$indent - ); - $this->nodes[$path]=1; - if(strcmp($parent,"")) - $this->structure[$parent]["Elements"]=($this->structure[$parent]["Elements"]+1); - return 1; - } - - Function adddata($data,$parent,&$path) - { - if(strcmp($this->error,"")) - return 0; - if(!(IsSet($this->structure[$parent]))) - { - $this->error=("the parent tag path".$path."is not defined"); - return 0; - } - if(!strcmp($data,"")) - return 1; - $path=($parent.",".strval($this->structure[$parent]["Elements"])); - if(!($this->encodedata($data,$encoded_data))) - return 0; - $this->structure[$path]=$encoded_data; - $this->structure[$parent]["Elements"]=($this->structure[$parent]["Elements"]+1); - return 1; - } - - Function adddatatag($tag,&$attributes,$data,$parent,&$path) - { - return $this->addtag($tag,$attributes,$parent,$path,0) && $this->adddata($data,$path,$datapath); - } -}; - -} |