From f432a40f50a9ca9d8973df788f98e4a2bf42497f Mon Sep 17 00:00:00 2001 From: "Edward Z. Yang" Date: Sun, 1 Oct 2006 18:14:08 +0000 Subject: [PATCH] [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 --- NEWS | 2 +- library/HTMLPurifier/Context.php | 57 +++++++++++++++++++++++++++++ tests/HTMLPurifier/ContextTest.php | 58 ++++++++++++++++++++++++++++++ tests/index.php | 1 + 4 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 library/HTMLPurifier/Context.php create mode 100644 tests/HTMLPurifier/ContextTest.php diff --git a/NEWS b/NEWS index c3cc766c..c5988571 100644 --- a/NEWS +++ b/NEWS @@ -9,7 +9,7 @@ NEWS ( CHANGELOG and HISTORY ) HTMLPurifier ========================== 1.2.0, unknown projected release date -(feature release) +. Switched to purify()-wide Context object registry 1.1.3, unknown projected release date (bugfix release, may be dropped if no major bugs are found before features) diff --git a/library/HTMLPurifier/Context.php b/library/HTMLPurifier/Context.php new file mode 100644 index 00000000..1f58671e --- /dev/null +++ b/library/HTMLPurifier/Context.php @@ -0,0 +1,57 @@ +_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]); + } + +} + +?> \ No newline at end of file diff --git a/tests/HTMLPurifier/ContextTest.php b/tests/HTMLPurifier/ContextTest.php new file mode 100644 index 00000000..b8f5014f --- /dev/null +++ b/tests/HTMLPurifier/ContextTest.php @@ -0,0 +1,58 @@ +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(); + + } + +} + +?> \ No newline at end of file diff --git a/tests/index.php b/tests/index.php index cdb87ec0..0c898af1 100644 --- a/tests/index.php +++ b/tests/index.php @@ -89,6 +89,7 @@ $test_files[] = 'URISchemeTest.php'; $test_files[] = 'EncoderTest.php'; $test_files[] = 'EntityParserTest.php'; $test_files[] = 'Test.php'; +$test_files[] = 'ContextTest.php'; if (version_compare(PHP_VERSION, '5', '>=')) { $test_files[] = 'TokenFactoryTest.php';