first commit
This commit is contained in:
138
htmlpurifier-4.10.0/tests/HTMLPurifier/ComplexHarness.php
Executable file
138
htmlpurifier-4.10.0/tests/HTMLPurifier/ComplexHarness.php
Executable file
@ -0,0 +1,138 @@
|
||||
<?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
|
Reference in New Issue
Block a user