From 9b7ad89ab5d8cf529f539433e3ec857af24d1f9a Mon Sep 17 00:00:00 2001 From: "Edward Z. Yang" Date: Sat, 29 Jul 2006 17:38:28 +0000 Subject: [PATCH] - Added Composite and Core strategies. - Added generate_mock() function for testing - Factored out inputs/output tests to StrategyAbstractTest git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@124 48356398-32a2-884e-a903-53898d9a118a --- library/HTMLPurifier/Strategy/Composite.php | 23 +++++++ library/HTMLPurifier/Strategy/Core.php | 20 ++++++ tests/HTMLPurifier/Strategy/CompositeTest.php | 66 +++++++++++++++++++ tests/HTMLPurifier/Strategy/CoreTest.php | 39 +++++++++++ .../HTMLPurifier/Strategy/FixNestingTest.php | 8 +-- .../Strategy/MakeWellFormedTest.php | 9 +-- .../Strategy/RemoveForeignElementsTest.php | 9 +-- tests/HTMLPurifier/StrategyAbstractTest.php | 10 +++ tests/index.php | 10 +++ 9 files changed, 171 insertions(+), 23 deletions(-) create mode 100644 library/HTMLPurifier/Strategy/Composite.php create mode 100644 library/HTMLPurifier/Strategy/Core.php create mode 100644 tests/HTMLPurifier/Strategy/CompositeTest.php create mode 100644 tests/HTMLPurifier/Strategy/CoreTest.php diff --git a/library/HTMLPurifier/Strategy/Composite.php b/library/HTMLPurifier/Strategy/Composite.php new file mode 100644 index 00000000..9ddaaac6 --- /dev/null +++ b/library/HTMLPurifier/Strategy/Composite.php @@ -0,0 +1,23 @@ +strategies as $strategy) { + $tokens = $strategy->execute($tokens); + } + return $tokens; + } + +} + +?> \ No newline at end of file diff --git a/library/HTMLPurifier/Strategy/Core.php b/library/HTMLPurifier/Strategy/Core.php new file mode 100644 index 00000000..f4df65d7 --- /dev/null +++ b/library/HTMLPurifier/Strategy/Core.php @@ -0,0 +1,20 @@ +strategies[] = new HTMLPurifier_Strategy_RemoveForeignElements(); + $this->strategies[] = new HTMLPurifier_Strategy_MakeWellFormed(); + $this->strategies[] = new HTMLPurifier_Strategy_FixNesting(); + } + +} + +?> \ No newline at end of file diff --git a/tests/HTMLPurifier/Strategy/CompositeTest.php b/tests/HTMLPurifier/Strategy/CompositeTest.php new file mode 100644 index 00000000..b2ef7a06 --- /dev/null +++ b/tests/HTMLPurifier/Strategy/CompositeTest.php @@ -0,0 +1,66 @@ +strategies =& $strategies; + } + +} + +// doesn't use Strategy harness +class HTMLPurifier_Strategy_CompositeTest extends UnitTestCase +{ + + function test() { + + generate_mock_once('HTMLPurifier_Strategy'); + + // setup a bunch of mock strategies to inject into our composite test + + $mock_1 = new HTMLPurifier_StrategyMock($this); + $mock_2 = new HTMLPurifier_StrategyMock($this); + $mock_3 = new HTMLPurifier_StrategyMock($this); + + // setup the object + + $strategies = array($mock_1, $mock_2, $mock_3); + $composite = new HTMLPurifier_Strategy_Composite_Test($strategies); + + // setup expectations + + $input_1 = 'This is raw data'; + $input_2 = 'Processed by 1'; + $input_3 = 'Processed by 1 and 2'; + $input_4 = 'Processed by 1, 2 and 3'; // expected output + + $mock_1->expectOnce('execute', array($input_1)); + $mock_1->setReturnValue('execute', $input_2, array($input_1)); + + $mock_2->expectOnce('execute', array($input_2)); + $mock_2->setReturnValue('execute', $input_3, array($input_2)); + + $mock_3->expectOnce('execute', array($input_3)); + $mock_3->setReturnValue('execute', $input_4, array($input_3)); + + // perform test + + $output = $composite->execute($input_1); + $this->assertIdentical($input_4, $output); + + // tally the calls + + $mock_1->tally(); + $mock_2->tally(); + $mock_3->tally(); + + } + +} + +?> \ No newline at end of file diff --git a/tests/HTMLPurifier/Strategy/CoreTest.php b/tests/HTMLPurifier/Strategy/CoreTest.php new file mode 100644 index 00000000..da29743c --- /dev/null +++ b/tests/HTMLPurifier/Strategy/CoreTest.php @@ -0,0 +1,39 @@ +Make well formed.'; + $expect[1] = 'Make well formed.'; + + // behavior may change + $inputs[2] = '
Fix nesting.
'; + $expect[2] = '<div>Fix nesting.</div>'; + + // behavior may change + $inputs[3] = 'Foreign element removal.'; + $expect[3] = '<asdf>Foreign element removal.</asdf>'; + + // behavior may change + $inputs[4] = '
All three.
'; + $expect[4] = '<foo><div>All three.</div>'; + + $this->assertStrategyWorks($strategy, $inputs, $expect); + } + +} + +?> \ No newline at end of file diff --git a/tests/HTMLPurifier/Strategy/FixNestingTest.php b/tests/HTMLPurifier/Strategy/FixNestingTest.php index 39297935..2b2d95b7 100644 --- a/tests/HTMLPurifier/Strategy/FixNestingTest.php +++ b/tests/HTMLPurifier/Strategy/FixNestingTest.php @@ -37,13 +37,7 @@ class HTMLPurifier_Strategy_FixNestingTest $inputs[4] = ''; $expect[4] = ''; - foreach ($inputs as $i => $input) { - $tokens = $this->lex->tokenizeHTML($input); - $result_tokens = $strategy->execute($tokens); - $result = $this->gen->generateFromTokens($result_tokens); - $this->assertEqual($expect[$i], $result, "Test $i: %s"); - paintIf($result, $result != $expect[$i]); - } + $this->assertStrategyWorks($strategy, $inputs, $expect); } } diff --git a/tests/HTMLPurifier/Strategy/MakeWellFormedTest.php b/tests/HTMLPurifier/Strategy/MakeWellFormedTest.php index 1d787204..2e3a3d38 100644 --- a/tests/HTMLPurifier/Strategy/MakeWellFormedTest.php +++ b/tests/HTMLPurifier/Strategy/MakeWellFormedTest.php @@ -49,14 +49,7 @@ class HTMLPurifier_Strategy_MakeWellFormedTest $inputs[9] = '
  1. Item 1
  2. Item 2
'; $expect[9] = '
  1. Item 1
  2. Item 2
'; - foreach ($inputs as $i => $input) { - $tokens = $this->lex->tokenizeHTML($input); - $result_tokens = $strategy->execute($tokens); - $result = $this->gen->generateFromTokens($result_tokens); - $this->assertEqual($expect[$i], $result, "Test $i: %s"); - paintIf($result, $result != $expect[$i]); - } - + $this->assertStrategyWorks($strategy, $inputs, $expect); } } diff --git a/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php b/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php index 5dee0a45..1d2741c6 100644 --- a/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php +++ b/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php @@ -24,14 +24,7 @@ class HTMLPurifier_Strategy_RemoveForeignElementsTest $inputs[2] = 'BlingBong'; $expect[2] = htmlspecialchars($inputs[2]); - foreach ($inputs as $i => $input) { - $tokens = $this->lex->tokenizeHTML($input); - $result_tokens = $strategy->execute($tokens); - $result = $this->gen->generateFromTokens($result_tokens); - $this->assertEqual($expect[$i], $result, "Test $i: %s"); - paintIf($result, $result != $expect[$i]); - } - + $this->assertStrategyWorks($strategy, $inputs, $expect); } } diff --git a/tests/HTMLPurifier/StrategyAbstractTest.php b/tests/HTMLPurifier/StrategyAbstractTest.php index 28f81dce..97ba1bc6 100644 --- a/tests/HTMLPurifier/StrategyAbstractTest.php +++ b/tests/HTMLPurifier/StrategyAbstractTest.php @@ -25,6 +25,16 @@ class HTMLPurifier_StrategyAbstractTest extends UnitTestCase $this->gen = new HTMLPurifier_Generator(); } + function assertStrategyWorks($strategy, $inputs, $expect) { + foreach ($inputs as $i => $input) { + $tokens = $this->lex->tokenizeHTML($input); + $result_tokens = $strategy->execute($tokens); + $result = $this->gen->generateFromTokens($result_tokens); + $this->assertEqual($expect[$i], $result, "Test $i: %s"); + paintIf($result, $result != $expect[$i]); + } + } + } ?> \ No newline at end of file diff --git a/tests/index.php b/tests/index.php index c3283e76..9267a600 100644 --- a/tests/index.php +++ b/tests/index.php @@ -11,6 +11,14 @@ require_once 'Debugger.php'; // emulates inserting a dir called HTMLPurifier into your class dir set_include_path(get_include_path() . PATH_SEPARATOR . '../library'); +// since Mocks can't be called from within test files, we need to do +// a little jumping through hoops to generate them +function generate_mock_once($name) { + $mock_name = $name . 'Mock'; + if (class_exists($mock_name)) return false; + Mock::generate($name, $mock_name); +} + $test = new GroupTest('HTMLPurifier'); $test->addTestFile('HTMLPurifier/LexerTest.php'); @@ -22,6 +30,8 @@ $test->addTestFile('HTMLPurifier/EntityLookupTest.php'); $test->addTestFile('HTMLPurifier/Strategy/RemoveForeignElementsTest.php'); $test->addTestFile('HTMLPurifier/Strategy/MakeWellFormedTest.php'); $test->addTestFile('HTMLPurifier/Strategy/FixNestingTest.php'); +$test->addTestFile('HTMLPurifier/Strategy/CompositeTest.php'); +$test->addTestFile('HTMLPurifier/Strategy/CoreTest.php'); $test->run( new HtmlReporter() );