diff options
Diffstat (limited to 'lib/htmlpurifier/tests/HTMLPurifier/Strategy/FixNestingTest.php')
-rw-r--r-- | lib/htmlpurifier/tests/HTMLPurifier/Strategy/FixNestingTest.php | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/lib/htmlpurifier/tests/HTMLPurifier/Strategy/FixNestingTest.php b/lib/htmlpurifier/tests/HTMLPurifier/Strategy/FixNestingTest.php new file mode 100644 index 000000000..9394352ec --- /dev/null +++ b/lib/htmlpurifier/tests/HTMLPurifier/Strategy/FixNestingTest.php @@ -0,0 +1,144 @@ +<?php + +class HTMLPurifier_Strategy_FixNestingTest extends HTMLPurifier_StrategyHarness +{ + + function setUp() { + parent::setUp(); + $this->obj = new HTMLPurifier_Strategy_FixNesting(); + } + + function testPreserveInlineInRoot() { + $this->assertResult('<b>Bold text</b>'); + } + + function testPreserveInlineAndBlockInRoot() { + $this->assertResult('<a href="about:blank">Blank</a><div>Block</div>'); + } + + function testRemoveBlockInInline() { + $this->assertResult( + '<b><div>Illegal div.</div></b>', + '<b>Illegal div.</b>' + ); + } + + function testEscapeBlockInInline() { + $this->config->set('Core.EscapeInvalidChildren', true); + $this->assertResult( + '<b><div>Illegal div.</div></b>', + '<b><div>Illegal div.</div></b>' + ); + } + + function testRemoveNodeWithMissingRequiredElements() { + $this->assertResult('<ul></ul>', ''); + } + + function testListHandleIllegalPCDATA() { + $this->assertResult( + '<ul>Illegal text<li>Legal item</li></ul>', + '<ul><li>Illegal text</li><li>Legal item</li></ul>' + ); + } + + function testRemoveIllegalPCDATA() { + $this->assertResult( + '<table><tr>Illegal text<td></td></tr></table>', + '<table><tr><td></td></tr></table>' + ); + } + + function testCustomTableDefinition() { + $this->assertResult('<table><tr><td>Cell 1</td></tr></table>'); + } + + function testRemoveEmptyTable() { + $this->assertResult('<table></table>', ''); + } + + function testChameleonRemoveBlockInNodeInInline() { + $this->assertResult( + '<span><ins><div>Not allowed!</div></ins></span>', + '<span><ins>Not allowed!</ins></span>' + ); + } + + function testChameleonRemoveBlockInBlockNodeWithInlineContent() { + $this->assertResult( + '<h1><ins><div>Not allowed!</div></ins></h1>', + '<h1><ins>Not allowed!</ins></h1>' + ); + } + + function testNestedChameleonRemoveBlockInNodeWithInlineContent() { + $this->assertResult( + '<h1><ins><del><div>Not allowed!</div></del></ins></h1>', + '<h1><ins><del>Not allowed!</del></ins></h1>' + ); + } + + function testNestedChameleonPreserveBlockInBlock() { + $this->assertResult( + '<div><ins><del><div>Allowed!</div></del></ins></div>' + ); + } + + function testChameleonEscapeInvalidBlockInInline() { + $this->config->set('Core.EscapeInvalidChildren', true); + $this->assertResult( // alt config + '<span><ins><div>Not allowed!</div></ins></span>', + '<span><ins><div>Not allowed!</div></ins></span>' + ); + } + + function testExclusionsIntegration() { + // test exclusions + $this->assertResult( + '<a><span><a>Not allowed</a></span></a>', + '<a><span></span></a>' + ); + } + + function testPreserveInlineNodeInInlineRootNode() { + $this->config->set('HTML.Parent', 'span'); + $this->assertResult('<b>Bold</b>'); + } + + function testRemoveBlockNodeInInlineRootNode() { + $this->config->set('HTML.Parent', 'span'); + $this->assertResult('<div>Reject</div>', 'Reject'); + } + + function testInvalidParentError() { + // test fallback to div + $this->config->set('HTML.Parent', 'obviously-impossible'); + $this->config->set('Cache.DefinitionImpl', null); + $this->expectError('Cannot use unrecognized element as parent'); + $this->assertResult('<div>Accept</div>'); + } + + function testCascadingRemovalOfNodesMissingRequiredChildren() { + $this->assertResult('<table><tr></tr></table>', ''); + } + + function testCascadingRemovalSpecialCaseCannotScrollOneBack() { + $this->assertResult('<table><tr></tr><tr></tr></table>', ''); + } + + function testLotsOfCascadingRemovalOfNodes() { + $this->assertResult('<table><tbody><tr></tr><tr></tr></tbody><tr></tr><tr></tr></table>', ''); + } + + function testAdjacentRemovalOfNodeMissingRequiredChildren() { + $this->assertResult('<table></table><table></table>', ''); + } + + function testStrictBlockquoteInHTML401() { + $this->config->set('HTML.Doctype', 'HTML 4.01 Strict'); + $this->assertResult('<blockquote>text</blockquote>', '<blockquote><p>text</p></blockquote>'); + } + +} + +// vim: et sw=4 sts=4 |