aboutsummaryrefslogtreecommitdiffstats
path: root/lib/htmlpurifier/tests/HTMLPurifier/ComplexHarness.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/htmlpurifier/tests/HTMLPurifier/ComplexHarness.php')
-rw-r--r--lib/htmlpurifier/tests/HTMLPurifier/ComplexHarness.php106
1 files changed, 106 insertions, 0 deletions
diff --git a/lib/htmlpurifier/tests/HTMLPurifier/ComplexHarness.php b/lib/htmlpurifier/tests/HTMLPurifier/ComplexHarness.php
new file mode 100644
index 000000000..8e806c63c
--- /dev/null
+++ b/lib/htmlpurifier/tests/HTMLPurifier/ComplexHarness.php
@@ -0,0 +1,106 @@
+<?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
+ */
+ protected $obj;
+
+ /**
+ * Name of the function to be executed
+ */
+ protected $func;
+
+ /**
+ * Whether or not the method deals in tokens. If set to true, assertResult()
+ * will transparently convert HTML to and back from tokens.
+ */
+ protected $to_tokens = false;
+
+ /**
+ * Whether or not to convert tokens back into HTML before performing
+ * equality check, has no effect on bools.
+ */
+ protected $to_html = false;
+
+ /**
+ * Instance of an HTMLPurifier_Lexer implementation.
+ */
+ 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 $input Input parameter
+ * @param $expect Expectation
+ * @param $config Configuration array in form of Ns.Directive => Value.
+ * Has no effect if $this->config is set.
+ * @param $context_array Context array in form of Key => Value or an actual
+ * context object.
+ */
+ protected function assertResult($input, $expect = true) {
+
+ if ($this->to_tokens && is_string($input)) {
+ // $func may cause $input to change, so "clone" another copy
+ // to sacrifice
+ $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) {
+ $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);
+ }
+
+}
+
+// vim: et sw=4 sts=4