diff options
Diffstat (limited to 'lib/htmlpurifier/tests/Debugger.php')
-rw-r--r-- | lib/htmlpurifier/tests/Debugger.php | 147 |
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 |