aboutsummaryrefslogtreecommitdiffstats
path: root/lib/htmlpurifier/tests/HTMLPurifier/Strategy/ValidateAttributesTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/htmlpurifier/tests/HTMLPurifier/Strategy/ValidateAttributesTest.php')
-rw-r--r--lib/htmlpurifier/tests/HTMLPurifier/Strategy/ValidateAttributesTest.php232
1 files changed, 232 insertions, 0 deletions
diff --git a/lib/htmlpurifier/tests/HTMLPurifier/Strategy/ValidateAttributesTest.php b/lib/htmlpurifier/tests/HTMLPurifier/Strategy/ValidateAttributesTest.php
new file mode 100644
index 000000000..5fc86cbda
--- /dev/null
+++ b/lib/htmlpurifier/tests/HTMLPurifier/Strategy/ValidateAttributesTest.php
@@ -0,0 +1,232 @@
+<?php
+
+class HTMLPurifier_Strategy_ValidateAttributesTest extends
+ HTMLPurifier_StrategyHarness
+{
+
+ function setUp() {
+ parent::setUp();
+ $this->obj = new HTMLPurifier_Strategy_ValidateAttributes();
+ }
+
+ function testEmptyInput() {
+ $this->assertResult('');
+ }
+
+ function testRemoveIDByDefault() {
+ $this->assertResult(
+ '<div id="valid">Kill the ID.</div>',
+ '<div>Kill the ID.</div>'
+ );
+ }
+
+ function testRemoveInvalidDir() {
+ $this->assertResult(
+ '<span dir="up-to-down">Bad dir.</span>',
+ '<span>Bad dir.</span>'
+ );
+ }
+
+ function testPreserveValidClass() {
+ $this->assertResult('<div class="valid">Valid</div>');
+ }
+
+ function testSelectivelyRemoveInvalidClasses() {
+ $this->config->set('HTML.Doctype', 'XHTML 1.1');
+ $this->assertResult(
+ '<div class="valid 0invalid">Keep valid.</div>',
+ '<div class="valid">Keep valid.</div>'
+ );
+ }
+
+ function testPreserveTitle() {
+ $this->assertResult(
+ '<acronym title="PHP: Hypertext Preprocessor">PHP</acronym>'
+ );
+ }
+
+ function testAddXMLLang() {
+ $this->assertResult(
+ '<span lang="fr">La soupe.</span>',
+ '<span lang="fr" xml:lang="fr">La soupe.</span>'
+ );
+ }
+
+ function testOnlyXMLLangInXHTML11() {
+ $this->config->set('HTML.Doctype', 'XHTML 1.1');
+ $this->assertResult(
+ '<b lang="en">asdf</b>',
+ '<b xml:lang="en">asdf</b>'
+ );
+ }
+
+ function testBasicURI() {
+ $this->assertResult('<a href="http://www.google.com/">Google</a>');
+ }
+
+ function testInvalidURI() {
+ $this->assertResult(
+ '<a href="javascript:badstuff();">Google</a>',
+ '<a>Google</a>'
+ );
+ }
+
+ function testBdoAddMissingDir() {
+ $this->assertResult(
+ '<bdo>Go left.</bdo>',
+ '<bdo dir="ltr">Go left.</bdo>'
+ );
+ }
+
+ function testBdoReplaceInvalidDirWithDefault() {
+ $this->assertResult(
+ '<bdo dir="blahblah">Invalid value!</bdo>',
+ '<bdo dir="ltr">Invalid value!</bdo>'
+ );
+ }
+
+ function testBdoAlternateDefaultDir() {
+ $this->config->set('Attr.DefaultTextDir', 'rtl');
+ $this->assertResult(
+ '<bdo>Go right.</bdo>',
+ '<bdo dir="rtl">Go right.</bdo>'
+ );
+ }
+
+ function testRemoveDirWhenNotRequired() {
+ $this->assertResult(
+ '<span dir="blahblah">Invalid value!</span>',
+ '<span>Invalid value!</span>'
+ );
+ }
+
+ function testTableAttributes() {
+ $this->assertResult(
+'<table frame="above" rules="rows" summary="A test table" border="2" cellpadding="5%" cellspacing="3" width="100%">
+ <col align="right" width="4*" />
+ <col charoff="5" align="char" width="*" />
+ <tr valign="top">
+ <th abbr="name">Fiddly name</th>
+ <th abbr="price">Super-duper-price</th>
+ </tr>
+ <tr>
+ <td abbr="carrot">Carrot Humungous</td>
+ <td>$500.23</td>
+ </tr>
+ <tr>
+ <td colspan="2">Taken off the market</td>
+ </tr>
+</table>'
+ );
+ }
+
+ function testColSpanIsNonZero() {
+ $this->assertResult(
+ '<col span="0" />',
+ '<col />'
+ );
+ }
+
+ function testImgAddDefaults() {
+ $this->config->set('Core.RemoveInvalidImg', false);
+ $this->assertResult(
+ '<img />',
+ '<img src="" alt="Invalid image" />'
+ );
+ }
+
+ function testImgGenerateAlt() {
+ $this->assertResult(
+ '<img src="foobar.jpg" />',
+ '<img src="foobar.jpg" alt="foobar.jpg" />'
+ );
+ }
+
+ function testImgAddDefaultSrc() {
+ $this->config->set('Core.RemoveInvalidImg', false);
+ $this->assertResult(
+ '<img alt="pretty picture" />',
+ '<img alt="pretty picture" src="" />'
+ );
+ }
+
+ function testImgRemoveNonRetrievableProtocol() {
+ $this->config->set('Core.RemoveInvalidImg', false);
+ $this->assertResult(
+ '<img src="mailto:foo@example.com" />',
+ '<img alt="mailto:foo@example.com" src="" />'
+ );
+ }
+
+ function testPreserveRel() {
+ $this->config->set('Attr.AllowedRel', 'nofollow');
+ $this->assertResult('<a href="foo" rel="nofollow" />');
+ }
+
+ function testPreserveTarget() {
+ $this->config->set('Attr.AllowedFrameTargets', '_top');
+ $this->config->set('HTML.Doctype', 'XHTML 1.0 Transitional');
+ $this->assertResult('<a href="foo" target="_top" />');
+ }
+
+ function testRemoveTargetWhenNotSupported() {
+ $this->config->set('HTML.Doctype', 'XHTML 1.0 Strict');
+ $this->config->set('Attr.AllowedFrameTargets', '_top');
+ $this->assertResult(
+ '<a href="foo" target="_top" />',
+ '<a href="foo" />'
+ );
+ }
+
+ function testKeepAbsoluteCSSWidthAndHeightOnImg() {
+ $this->assertResult(
+ '<img src="" alt="" style="width:10px;height:10px;border:1px solid #000;" />'
+ );
+ }
+
+ function testRemoveLargeCSSWidthAndHeightOnImg() {
+ $this->assertResult(
+ '<img src="" alt="" style="width:10000000px;height:10000000px;border:1px solid #000;" />',
+ '<img src="" alt="" style="border:1px solid #000;" />'
+ );
+ }
+
+ function testRemoveLargeCSSWidthAndHeightOnImgWithUserConf() {
+ $this->config->set('CSS.MaxImgLength', '1px');
+ $this->assertResult(
+ '<img src="" alt="" style="width:1mm;height:1mm;border:1px solid #000;" />',
+ '<img src="" alt="" style="border:1px solid #000;" />'
+ );
+ }
+
+ function testKeepLargeCSSWidthAndHeightOnImgWhenToldTo() {
+ $this->config->set('CSS.MaxImgLength', null);
+ $this->assertResult(
+ '<img src="" alt="" style="width:10000000px;height:10000000px;border:1px solid #000;" />'
+ );
+ }
+
+ function testKeepPercentCSSWidthAndHeightOnImgWhenToldTo() {
+ $this->config->set('CSS.MaxImgLength', null);
+ $this->assertResult(
+ '<img src="" alt="" style="width:100%;height:100%;border:1px solid #000;" />'
+ );
+ }
+
+ function testRemoveRelativeCSSWidthAndHeightOnImg() {
+ $this->assertResult(
+ '<img src="" alt="" style="width:10em;height:10em;border:1px solid #000;" />',
+ '<img src="" alt="" style="border:1px solid #000;" />'
+ );
+ }
+
+ function testRemovePercentCSSWidthAndHeightOnImg() {
+ $this->assertResult(
+ '<img src="" alt="" style="width:100%;height:100%;border:1px solid #000;" />',
+ '<img src="" alt="" style="border:1px solid #000;" />'
+ );
+ }
+
+}
+
+// vim: et sw=4 sts=4