0
0
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:
Edward Z. Yang 2006-10-01 18:14:08 +00:00
parent d660b9018b
commit f432a40f50
4 changed files with 117 additions and 1 deletions

2
NEWS
View File

@ -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)

View 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]);
}
}
?>

View 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();
}
}
?>

View File

@ -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';