aboutsummaryrefslogtreecommitdiffstats
path: root/lib/htmlpurifier/tests/Debugger.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/htmlpurifier/tests/Debugger.php')
-rw-r--r--lib/htmlpurifier/tests/Debugger.php147
1 files changed, 147 insertions, 0 deletions
diff --git a/lib/htmlpurifier/tests/Debugger.php b/lib/htmlpurifier/tests/Debugger.php
new file mode 100644
index 000000000..45e107f44
--- /dev/null
+++ b/lib/htmlpurifier/tests/Debugger.php
@@ -0,0 +1,147 @@
+<?php
+
+/**
+ * Debugging tools.
+ *
+ * This file gives a developer a set of tools useful for performing code
+ * consistency checks. This includes scoping code blocks to ensure that
+ * only the interesting iteration of a loop gets outputted, a paint()
+ * function that acts like var_dump() with pre tags, and conditional
+ * printing.
+ */
+
+/*
+TODO
+ * Integrate into SimpleTest so it tells us whether or not there were any
+ not cleaned up debug calls.
+ * Custom var_dump() that ignores blacklisted properties
+ * DEPRECATE AND REMOVE ALL CALLS!
+*/
+
+/**#@+
+ * Convenience global functions. Corresponds to method on Debugger.
+ */
+function paint($mixed) {
+ $Debugger =& Debugger::instance();
+ return $Debugger->paint($mixed);
+}
+function paintIf($mixed, $conditional) {
+ $Debugger =& Debugger::instance();
+ return $Debugger->paintIf($mixed, $conditional);
+}
+function paintWhen($mixed, $scopes = array()) {
+ $Debugger =& Debugger::instance();
+ return $Debugger->paintWhen($mixed, $scopes);
+}
+function paintIfWhen($mixed, $conditional, $scopes = array()) {
+ $Debugger =& Debugger::instance();
+ return $Debugger->paintIfWhen($mixed, $conditional, $scopes);
+}
+function addScope($id = false) {
+ $Debugger =& Debugger::instance();
+ return $Debugger->addScope($id);
+}
+function removeScope($id) {
+ $Debugger =& Debugger::instance();
+ return $Debugger->removeScope($id);
+}
+function resetScopes() {
+ $Debugger =& Debugger::instance();
+ return $Debugger->resetScopes();
+}
+function isInScopes($array = array()) {
+ $Debugger =& Debugger::instance();
+ return $Debugger->isInScopes($array);
+}
+/**#@-*/
+
+
+/**
+ * The debugging singleton. Most interesting stuff happens here.
+ */
+class Debugger
+{
+
+ public $shouldPaint = false;
+ public $paints = 0;
+ public $current_scopes = array();
+ public $scope_nextID = 1;
+ public $add_pre = true;
+
+ public function Debugger() {
+ $this->add_pre = !extension_loaded('xdebug');
+ }
+
+ public static function &instance() {
+ static $soleInstance = false;
+ if (!$soleInstance) $soleInstance = new Debugger();
+ return $soleInstance;
+ }
+
+ public function paintIf($mixed, $conditional) {
+ if (!$conditional) return;
+ $this->paint($mixed);
+ }
+
+ public function paintWhen($mixed, $scopes = array()) {
+ if (!$this->isInScopes($scopes)) return;
+ $this->paint($mixed);
+ }
+
+ public function paintIfWhen($mixed, $conditional, $scopes = array()) {
+ if (!$conditional) return;
+ if (!$this->isInScopes($scopes)) return;
+ $this->paint($mixed);
+ }
+
+ public function paint($mixed) {
+ $this->paints++;
+ if($this->add_pre) echo '<pre>';
+ var_dump($mixed);
+ if($this->add_pre) echo '</pre>';
+ }
+
+ public function addScope($id = false) {
+ if ($id == false) {
+ $id = $this->scope_nextID++;
+ }
+ $this->current_scopes[$id] = true;
+ }
+
+ public function removeScope($id) {
+ if (isset($this->current_scopes[$id])) unset($this->current_scopes[$id]);
+ }
+
+ public function resetScopes() {
+ $this->current_scopes = array();
+ $this->scope_nextID = 1;
+ }
+
+ public function isInScopes($scopes = array()) {
+ if (empty($this->current_scopes)) {
+ return false;
+ }
+ if (!is_array($scopes)) {
+ $scopes = array($scopes);
+ }
+ foreach ($scopes as $scope_id) {
+ if (empty($this->current_scopes[$scope_id])) {
+ return false;
+ }
+ }
+ if (empty($scopes)) {
+ if ($this->scope_nextID == 1) {
+ return false;
+ }
+ for($i = 1; $i < $this->scope_nextID; $i++) {
+ if (empty($this->current_scopes[$i])) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+}
+
+// vim: et sw=4 sts=4