mirror of
https://github.com/ezyang/htmlpurifier.git
synced 2024-11-09 15:28:40 +00:00
[1.2.0] Commit initial implementation of Context object, we will be migrating all systems over to it next commit.
git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@482 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
parent
d660b9018b
commit
f432a40f50
2
NEWS
2
NEWS
@ -9,7 +9,7 @@ NEWS ( CHANGELOG and HISTORY ) HTMLPurifier
|
|||||||
==========================
|
==========================
|
||||||
|
|
||||||
1.2.0, unknown projected release date
|
1.2.0, unknown projected release date
|
||||||
(feature release)
|
. Switched to purify()-wide Context object registry
|
||||||
|
|
||||||
1.1.3, unknown projected release date
|
1.1.3, unknown projected release date
|
||||||
(bugfix release, may be dropped if no major bugs are found before features)
|
(bugfix release, may be dropped if no major bugs are found before features)
|
||||||
|
57
library/HTMLPurifier/Context.php
Normal file
57
library/HTMLPurifier/Context.php
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registry object that contains information about the current context.
|
||||||
|
*/
|
||||||
|
class HTMLPurifier_Context
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private array that stores the references.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
var $_storage = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a variable into the context.
|
||||||
|
* @param $name String name
|
||||||
|
* @param $ref Variable to be registered
|
||||||
|
*/
|
||||||
|
function register($name, &$ref) {
|
||||||
|
if (isset($this->_storage[$name])) {
|
||||||
|
trigger_error('Name collision, cannot re-register',
|
||||||
|
E_USER_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$this->_storage[$name] =& $ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a variable reference from the context.
|
||||||
|
* @param $name String name
|
||||||
|
*/
|
||||||
|
function &get($name) {
|
||||||
|
if (!isset($this->_storage[$name])) {
|
||||||
|
trigger_error('Attempted to retrieve non-existent variable',
|
||||||
|
E_USER_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return $this->_storage[$name];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destorys a variable in the context.
|
||||||
|
* @param $name String name
|
||||||
|
*/
|
||||||
|
function destroy($name) {
|
||||||
|
if (!isset($this->_storage[$name])) {
|
||||||
|
trigger_error('Attempted to destroy non-existent variable',
|
||||||
|
E_USER_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
unset($this->_storage[$name]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
58
tests/HTMLPurifier/ContextTest.php
Normal file
58
tests/HTMLPurifier/ContextTest.php
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once 'HTMLPurifier/Context.php';
|
||||||
|
|
||||||
|
// mocks
|
||||||
|
require_once 'HTMLPurifier/IDAccumulator.php';
|
||||||
|
|
||||||
|
class HTMLPurifier_ContextTest extends UnitTestCase
|
||||||
|
{
|
||||||
|
|
||||||
|
var $context;
|
||||||
|
|
||||||
|
function setUp() {
|
||||||
|
$this->context = new HTMLPurifier_Context();
|
||||||
|
}
|
||||||
|
|
||||||
|
function testStandardUsage() {
|
||||||
|
|
||||||
|
generate_mock_once('HTMLPurifier_IDAccumulator');
|
||||||
|
|
||||||
|
$accumulator =& new HTMLPurifier_IDAccumulatorMock($this);
|
||||||
|
$this->context->register('IDAccumulator', $accumulator);
|
||||||
|
// ...
|
||||||
|
$accumulator_2 =& $this->context->get('IDAccumulator');
|
||||||
|
$this->assertReference($accumulator, $accumulator_2);
|
||||||
|
|
||||||
|
$this->context->destroy('IDAccumulator');
|
||||||
|
$accumulator_3 =& $this->context->get('IDAccumulator');
|
||||||
|
$this->assertError('Attempted to retrieve non-existent variable');
|
||||||
|
$this->assertNull($accumulator_3);
|
||||||
|
$this->swallowErrors();
|
||||||
|
|
||||||
|
$this->context->destroy('IDAccumulator');
|
||||||
|
$this->assertError('Attempted to destroy non-existent variable');
|
||||||
|
$this->swallowErrors();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function testReRegister() {
|
||||||
|
|
||||||
|
$var = true;
|
||||||
|
$this->context->register('OnceOnly', $var);
|
||||||
|
$this->assertNoErrors();
|
||||||
|
|
||||||
|
$this->context->register('OnceOnly', $var);
|
||||||
|
$this->assertError('Name collision, cannot re-register');
|
||||||
|
$this->swallowErrors();
|
||||||
|
|
||||||
|
// destroy it, now registration is okay
|
||||||
|
$this->context->destroy('OnceOnly');
|
||||||
|
$this->context->register('OnceOnly', $var);
|
||||||
|
$this->assertNoErrors();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -89,6 +89,7 @@ $test_files[] = 'URISchemeTest.php';
|
|||||||
$test_files[] = 'EncoderTest.php';
|
$test_files[] = 'EncoderTest.php';
|
||||||
$test_files[] = 'EntityParserTest.php';
|
$test_files[] = 'EntityParserTest.php';
|
||||||
$test_files[] = 'Test.php';
|
$test_files[] = 'Test.php';
|
||||||
|
$test_files[] = 'ContextTest.php';
|
||||||
|
|
||||||
if (version_compare(PHP_VERSION, '5', '>=')) {
|
if (version_compare(PHP_VERSION, '5', '>=')) {
|
||||||
$test_files[] = 'TokenFactoryTest.php';
|
$test_files[] = 'TokenFactoryTest.php';
|
||||||
|
Loading…
Reference in New Issue
Block a user