139 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * General-purpose test-harness that makes testing functions that require
 | |
|  * configuration and context objects easier when those two parameters are
 | |
|  * meaningless.  See HTMLPurifier_ChildDefTest for a good example of usage.
 | |
|  */
 | |
| class HTMLPurifier_ComplexHarness extends HTMLPurifier_Harness
 | |
| {
 | |
| 
 | |
|     /**
 | |
|      * Instance of the object that will execute the method.
 | |
|      * @type object
 | |
|      */
 | |
|     protected $obj;
 | |
| 
 | |
|     /**
 | |
|      * Name of the function to be executed.
 | |
|      * @type string
 | |
|      */
 | |
|     protected $func;
 | |
| 
 | |
|     /**
 | |
|      * Whether or not the method deals in tokens.
 | |
|      * If set to true, assertResult()
 | |
|      * will transparently convert HTML to and back from tokens.
 | |
|      * @type bool
 | |
|      */
 | |
|     protected $to_tokens = false;
 | |
| 
 | |
|     /**
 | |
|      * Whether or not the method deals in a node list.
 | |
|      * If set to true, assertResult() will transparently convert HTML
 | |
|      * to and back from node.
 | |
|      * @type bool
 | |
|      */
 | |
|     protected $to_node_list = false;
 | |
| 
 | |
|     /**
 | |
|      * Whether or not to convert tokens back into HTML before performing
 | |
|      * equality check, has no effect on bools.
 | |
|      * @type bool
 | |
|      */
 | |
|     protected $to_html = false;
 | |
| 
 | |
|     /**
 | |
|      * Instance of an HTMLPurifier_Lexer implementation.
 | |
|      * @type HTMLPurifier_Lexer
 | |
|      */
 | |
|     protected $lexer;
 | |
| 
 | |
|     public function __construct()
 | |
|     {
 | |
|         $this->lexer     = new HTMLPurifier_Lexer_DirectLex();
 | |
|         parent::__construct();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Asserts a specific result from a one parameter + config/context function
 | |
|      * @param string $input Input parameter
 | |
|      * @param bool|string $expect Expectation
 | |
|      */
 | |
|     protected function assertResult($input, $expect = true)
 | |
|     {
 | |
|         // $func may cause $input to change, so "clone" another copy
 | |
|         // to sacrifice
 | |
|         if ($this->to_node_list && is_string($input)) {
 | |
|             $input = HTMLPurifier_Arborize::arborize($this->tokenize($temp = $input), $this->config, $this->context)->children;
 | |
|             $input_c = HTMLPurifier_Arborize::arborize($this->tokenize($temp), $this->config, $this->context)->children;
 | |
|         } elseif ($this->to_tokens && is_string($input)) {
 | |
|             $input   = $this->tokenize($temp = $input);
 | |
|             $input_c = $this->tokenize($temp);
 | |
|         } else {
 | |
|             $input_c = $input;
 | |
|         }
 | |
| 
 | |
|         // call the function
 | |
|         $func = $this->func;
 | |
|         $result = $this->obj->$func($input_c, $this->config, $this->context);
 | |
| 
 | |
|         // test a bool result
 | |
|         if (is_bool($result)) {
 | |
|             $this->assertIdentical($expect, $result);
 | |
|             return;
 | |
|         } elseif (is_bool($expect)) {
 | |
|             $expect = $input;
 | |
|         }
 | |
| 
 | |
|         if ($this->to_html) {
 | |
|             if ($this->to_node_list) {
 | |
|                 $result = $this->generateTokens($result);
 | |
|                 if (is_array($expect) && !empty($expect) && $expect[0] instanceof HTMLPurifier_Node) {
 | |
|                     $expect = $this->generateTokens($expect);
 | |
|                 }
 | |
|             }
 | |
|             $result = $this->generate($result);
 | |
|             if (is_array($expect)) {
 | |
|                 $expect = $this->generate($expect);
 | |
|             }
 | |
|         }
 | |
|         $this->assertIdentical($expect, $result);
 | |
| 
 | |
|         if ($expect !== $result) {
 | |
|             echo '<pre>' . var_dump($result) . '</pre>';
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Tokenize HTML into tokens, uses member variables for common variables
 | |
|      */
 | |
|     protected function tokenize($html)
 | |
|     {
 | |
|         return $this->lexer->tokenizeHTML($html, $this->config, $this->context);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Generate textual HTML from tokens
 | |
|      */
 | |
|     protected function generate($tokens)
 | |
|     {
 | |
|         $generator = new HTMLPurifier_Generator($this->config, $this->context);
 | |
|         return $generator->generateFromTokens($tokens);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Generate tokens from node list
 | |
|      */
 | |
|     protected function generateTokens($children)
 | |
|     {
 | |
|         $dummy = new HTMLPurifier_Node_Element("dummy");
 | |
|         $dummy->children = $children;
 | |
|         return HTMLPurifier_Arborize::flatten($dummy, $this->context, $this->config);
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| // vim: et sw=4 sts=4
 | 
