child validation
- Explain how to use HTML Purifier in non-PHP languages / create
a simple command line stub (or complicated?)
+ - Fixes for Firefox's inability to handle COL alignment props (Bug 915)
+ - Automatically add non-breaking spaces to empty table cells when
+ empty-cells:show is applied to have compatibility with Internet Explorer
Requested
Wontfix
- Non-lossy smart alternate character encoding transformations (unless
patch provided)
- - Pretty-printing HTML, users can use Tidy on the output on entire page
+ - Pretty-printing HTML: users can use Tidy on the output on entire page
- Native content compression, whitespace stripping (don't rely on Tidy, make
sure we don't remove from or related tags): use gzip if this is
really important
diff --git a/VERSION b/VERSION
index 7c327287..8f9174b4 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.1.1
\ No newline at end of file
+2.1.2
\ No newline at end of file
diff --git a/WHATSNEW b/WHATSNEW
index a08edbb5..e9a40184 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -1,10 +1,8 @@
-In version 2.1, HTML Purifier's URI validation and filtering handling
-system has been revamped with a new, extensible URIFilter system. Also
-notable features include preservation of emoticons in PHP5 with
-%Core.AggressivelyFixLt, standalone and lite download versions,
-transforming relative URIs to absolute URIs, Ruby in XHTML 1.1, a Phorum
-mod, and UTF-8 font names. Notable bug-fixes include refinement of
-the auto-paragraphing algorithm (no longer experimental), better XHTML
-1.1 support and the removal of the contents of ',
''
);
-
+ }
+
+ function testRemoveOnlyScriptTagsLegacy() {
+ $this->config->set('Core', 'RemoveScriptContents', false);
$this->assertResult(
'',
- 'alert();',
- array('Core.RemoveScriptContents' => false)
+ 'alert();'
);
-
+ }
+
+ function testRemoveOnlyScriptTags() {
+ $this->config->set('Core', 'HiddenElements', array());
$this->assertResult(
'',
- 'alert();',
- array('Core.HiddenElements' => array())
+ 'alert();'
);
-
- $this->assertResult(
- '',
- '
'
- );
-
- // test center transform
- $this->assertResult(
- 'Look I am Centered!',
- 'Look I am Centered!
'
- );
-
- // test font transform
- $this->assertResult(
- 'Big Warning!',
- 'Big'.
- ' Warning!'
- );
-
- // test removal of invalid img tag
- $this->assertResult(
- '
',
- ''
- );
-
- // test preservation of valid img tag
+ }
+
+ function testRemoveInvalidImg() {
+ $this->assertResult('
', '');
+ }
+
+ function testPreserveValidImg() {
$this->assertResult('
');
-
- // test preservation of invalid img tag when removal is disabled
- $this->assertResult(
- '
',
- true,
- array(
- 'Core.RemoveInvalidImg' => false
- )
- );
-
- // test transform to unallowed element
- $this->assertResult(
- 'Big Warning!',
- 'Big Warning!',
- array('HTML.Allowed' => 'div')
- );
-
- // text-ify commented script contents ( the trailing comment gets
- // removed during generation )
+ }
+
+ function testPreserveInvalidImgWhenRemovalIsDisabled() {
+ $this->config->set('Core', 'RemoveInvalidImg', false);
+ $this->assertResult('
');
+ }
+
+ function testTextifyCommentedScriptContents() {
+ $this->config->set('HTML', 'Trusted', true);
+ $this->config->set('Output', 'CommentScriptContents', false); // simplify output
$this->assertResult(
'',
'',
- array('HTML.Trusted' => true, 'Output.CommentScriptContents' => false)
+// '
);
-
}
}
diff --git a/tests/HTMLPurifier/Strategy/RemoveForeignElements_TidyTest.php b/tests/HTMLPurifier/Strategy/RemoveForeignElements_TidyTest.php
new file mode 100644
index 00000000..8071d2ab
--- /dev/null
+++ b/tests/HTMLPurifier/Strategy/RemoveForeignElements_TidyTest.php
@@ -0,0 +1,46 @@
+obj = new HTMLPurifier_Strategy_RemoveForeignElements();
+ $this->config->set('HTML', 'TidyLevel', 'heavy');
+ }
+
+ function testCenterTransform() {
+ $this->assertResult(
+ 'Look I am Centered!',
+ 'Look I am Centered!
'
+ );
+ }
+
+ function testFontTransform() {
+ $this->assertResult(
+ 'Big Warning!',
+ 'Big'.
+ ' Warning!'
+ );
+ }
+
+ function testTransformToForbiddenElement() {
+ $this->config->set('HTML', 'Allowed', 'div');
+ $this->assertResult(
+ 'Big Warning!',
+ 'Big Warning!'
+ );
+ }
+
+ function testMenuTransform() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+}
diff --git a/tests/HTMLPurifier/Strategy/ValidateAttributesTest.php b/tests/HTMLPurifier/Strategy/ValidateAttributesTest.php
index fc7de460..25359425 100644
--- a/tests/HTMLPurifier/Strategy/ValidateAttributesTest.php
+++ b/tests/HTMLPurifier/Strategy/ValidateAttributesTest.php
@@ -1,6 +1,5 @@
obj = new HTMLPurifier_Strategy_ValidateAttributes();
- $this->config = array('HTML.Doctype' => 'XHTML 1.0 Strict');
}
- function testEmpty() {
+ function testEmptyInput() {
$this->assertResult('');
}
- function testIDs() {
+ function testRemoveIDByDefault() {
$this->assertResult(
'Kill the ID.
',
'Kill the ID.
'
);
-
- $this->assertResult('Preserve the ID.
', true,
- array('HTML.EnableAttrID' => true));
-
- $this->assertResult(
- 'Kill the ID.
',
- 'Kill the ID.
',
- array('HTML.EnableAttrID' => true)
- );
-
- // test id accumulator
- $this->assertResult(
- 'Valid
Invalid
',
- 'Valid
Invalid
',
- array('HTML.EnableAttrID' => true)
- );
-
+ }
+
+ function testRemoveInvalidDir() {
$this->assertResult(
'Bad dir.',
'Bad dir.'
);
-
- // test attribute key case sensitivity
- $this->assertResult(
- 'Convert ID to lowercase.
',
- 'Convert ID to lowercase.
',
- array('HTML.EnableAttrID' => true)
- );
-
- // test simple attribute substitution
- $this->assertResult(
- 'Trim whitespace.
',
- 'Trim whitespace.
',
- array('HTML.EnableAttrID' => true)
- );
-
- // test configuration id blacklist
- $this->assertResult(
- 'Invalid
',
- 'Invalid
',
- array(
- 'Attr.IDBlacklist' => array('invalid'),
- 'HTML.EnableAttrID' => true
- )
- );
-
- // name rewritten as id
- $this->assertResult(
- '',
- '',
- array('HTML.EnableAttrID' => true)
- );
}
- function testClasses() {
+ function testPreserveValidClass() {
$this->assertResult('Valid
');
-
+ }
+
+ function testSelectivelyRemoveInvalidClasses() {
$this->assertResult(
'Keep valid.
',
'Keep valid.
'
);
}
- function testTitle() {
+ function testPreserveTitle() {
$this->assertResult(
'PHP'
);
}
- function testLang() {
+ function testAddXMLLang() {
$this->assertResult(
'La soupe.',
'La soupe.'
);
-
- // test only xml:lang for XHTML 1.1
+ }
+
+ function testOnlyXMLLangInXHTML11() {
+ $this->config->set('HTML', 'Doctype', 'XHTML 1.1');
$this->assertResult(
'asdf',
- 'asdf', array('HTML.Doctype' => 'XHTML 1.1')
+ 'asdf'
);
}
- function testAlign() {
-
- $this->assertResult(
- 'Centered Headline
',
- 'Centered Headline
'
- );
- $this->assertResult(
- 'Right-aligned Headline
',
- 'Right-aligned Headline
'
- );
- $this->assertResult(
- 'Left-aligned Headline
',
- 'Left-aligned Headline
'
- );
- $this->assertResult(
- 'Justified Paragraph
',
- 'Justified Paragraph
'
- );
- $this->assertResult(
- 'Invalid Headline
',
- 'Invalid Headline
'
- );
-
+ function testBasicURI() {
+ $this->assertResult('Google');
}
- function testTable() {
+ function testInvalidURI() {
+ $this->assertResult(
+ 'Google',
+ 'Google'
+ );
+ }
+
+ function testBdoAddMissingDir() {
+ $this->assertResult(
+ 'Go left.',
+ 'Go left.'
+ );
+ }
+
+ function testBdoReplaceInvalidDirWithDefault() {
+ $this->assertResult(
+ 'Invalid value!',
+ 'Invalid value!'
+ );
+ }
+
+ function testBdoAlternateDefaultDir() {
+ $this->config->set('Attr', 'DefaultTextDir', 'rtl');
+ $this->assertResult(
+ 'Go right.',
+ 'Go right.'
+ );
+ }
+
+ function testRemoveDirWhenNotRequired() {
+ $this->assertResult(
+ 'Invalid value!',
+ 'Invalid value!'
+ );
+ }
+
+ function testTableAttributes() {
$this->assertResult(
'
@@ -148,293 +120,64 @@ class HTMLPurifier_Strategy_ValidateAttributesTest extends
'
);
-
- // test col.span is non-zero
+ }
+
+ function testColSpanIsNonZero() {
$this->assertResult(
'',
''
);
- // lengths
- $this->assertResult(
- ' | |
',
- ' | |
'
- );
- // td boolean transformation
- $this->assertResult(
- ' | ',
- ' | '
- );
-
- // caption align transformation
- $this->assertResult(
- '',
- ''
- );
- $this->assertResult(
- '',
- ''
- );
- $this->assertResult(
- '',
- ''
- );
- $this->assertResult(
- '',
- ''
- );
- $this->assertResult(
- '',
- ''
- );
-
- // align transformation
- $this->assertResult(
- '',
- ''
- );
- $this->assertResult(
- '',
- ''
- );
- $this->assertResult(
- '',
- ''
- );
- $this->assertResult(
- '',
- ''
- );
}
- function testURI() {
- $this->assertResult('Google');
-
- // test invalid URI
- $this->assertResult(
- 'Google',
- 'Google'
- );
- }
-
- function testImg() {
+ function testImgAddDefaults() {
+ $this->config->set('Core', 'RemoveInvalidImg', false);
$this->assertResult(
'
',
- '
',
- array('Core.RemoveInvalidImg' => false)
+ '
'
);
-
+ }
+
+ function testImgGenerateAlt() {
$this->assertResult(
'
',
'
'
);
-
+ }
+
+ function testImgAddDefaultSrc() {
+ $this->config->set('Core', 'RemoveInvalidImg', false);
$this->assertResult(
'
',
- '
',
- array('Core.RemoveInvalidImg' => false)
+ '
'
);
- // mailto in image is not allowed
+ }
+
+ function testImgRemoveNonRetrievableProtocol() {
+ $this->config->set('Core', 'RemoveInvalidImg', false);
$this->assertResult(
'
',
- '
',
- array('Core.RemoveInvalidImg' => false)
- );
- // align transformation
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
-
- }
-
- function testBdo() {
- // test required attributes for bdo
- $this->assertResult(
- 'Go left.',
- 'Go left.'
- );
-
- $this->assertResult(
- 'Invalid value!',
- 'Invalid value!'
+ '
'
);
}
- function testDir() {
- // see testBdo, behavior is subtly different
- $this->assertResult(
- 'Invalid value!',
- 'Invalid value!'
- );
+ function testPreserveRel() {
+ $this->config->set('Attr', 'AllowedRel', 'nofollow');
+ $this->assertResult('');
}
-
- function testLinks() {
- // link types
- $this->assertResult(
- '',
- true,
- array('Attr.AllowedRel' => 'nofollow')
- );
- // link targets
- $this->assertResult(
- '',
- true,
- array('Attr.AllowedFrameTargets' => '_top',
- 'HTML.Doctype' => 'XHTML 1.0 Transitional')
- );
+
+ function testPreserveTarget() {
+ $this->config->set('Attr', 'AllowedFrameTargets', '_top');
+ $this->config->set('HTML', 'Doctype', 'XHTML 1.0 Transitional');
+ $this->assertResult('');
+ }
+
+ function testRemoveTargetWhenNotSupported() {
+ $this->config->set('HTML', 'Doctype', 'XHTML 1.0 Strict');
+ $this->config->set('Attr', 'AllowedFrameTargets', '_top');
$this->assertResult(
'',
''
);
- $this->assertResult(
- '',
- '',
- array('Attr.AllowedFrameTargets' => '_top', 'HTML.Strict' => true)
- );
- }
-
- function testBorder() {
- // border
- $this->assertResult(
- '
',
- '
',
- array('Attr.AllowedRel' => 'nofollow')
- );
- }
-
- function testHr() {
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- // align transformation
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- }
-
- function testBr() {
- // br clear transformation
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult( // test both?
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- }
-
- function testListTypeTransform() {
- // ul
- $this->assertResult(
- '',
- ''
- );
- $this->assertResult(
- '',
- ''
- );
- $this->assertResult(
- '',
- ''
- );
- $this->assertResult( // case insensitive
- '',
- ''
- );
- $this->assertResult(
- '',
- ''
- );
- // ol
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- $this->assertResult(
- '
',
- '
'
- );
- // li
- $this->assertResult(
- '',
- ''
- );
- $this->assertResult(
- '',
- ''
- );
- $this->assertResult( // case sensitive
- '',
- ''
- );
-
}
}
diff --git a/tests/HTMLPurifier/Strategy/ValidateAttributes_IDTest.php b/tests/HTMLPurifier/Strategy/ValidateAttributes_IDTest.php
new file mode 100644
index 00000000..d73b0ebd
--- /dev/null
+++ b/tests/HTMLPurifier/Strategy/ValidateAttributes_IDTest.php
@@ -0,0 +1,65 @@
+obj = new HTMLPurifier_Strategy_ValidateAttributes();
+ $this->config->set('HTML', 'EnableAttrID', true);
+ }
+
+
+ function testPreserveIDWhenEnabled() {
+ $this->assertResult('Preserve the ID.
');
+ }
+
+ function testRemoveInvalidID() {
+ $this->assertResult(
+ 'Kill the ID.
',
+ 'Kill the ID.
'
+ );
+ }
+
+ function testRemoveDuplicateID() {
+ $this->assertResult(
+ 'Valid
Invalid
',
+ 'Valid
Invalid
'
+ );
+ }
+
+ function testAttributeKeyCaseInsensitivity() {
+ $this->assertResult(
+ 'Convert ID to lowercase.
',
+ 'Convert ID to lowercase.
'
+ );
+ }
+
+ function testTrimWhitespace() {
+ $this->assertResult(
+ 'Trim whitespace.
',
+ 'Trim whitespace.
'
+ );
+ }
+
+ function testIDBlacklist() {
+ $this->config->set('Attr', 'IDBlacklist', array('invalid'));
+ $this->assertResult(
+ 'Invalid
',
+ 'Invalid
'
+ );
+ }
+
+ function testNameConvertedToID() {
+ $this->config->set('HTML', 'TidyLevel', 'heavy');
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+}
+
diff --git a/tests/HTMLPurifier/Strategy/ValidateAttributes_TidyTest.php b/tests/HTMLPurifier/Strategy/ValidateAttributes_TidyTest.php
new file mode 100644
index 00000000..1f0e21ba
--- /dev/null
+++ b/tests/HTMLPurifier/Strategy/ValidateAttributes_TidyTest.php
@@ -0,0 +1,353 @@
+obj = new HTMLPurifier_Strategy_ValidateAttributes();
+ $this->config->set('HTML', 'TidyLevel', 'heavy');
+ }
+
+ function testConvertCenterAlign() {
+ $this->assertResult(
+ 'Centered Headline
',
+ 'Centered Headline
'
+ );
+ }
+
+ function testConvertRightAlign() {
+ $this->assertResult(
+ 'Right-aligned Headline
',
+ 'Right-aligned Headline
'
+ );
+ }
+
+ function testConvertLeftAlign() {
+ $this->assertResult(
+ 'Left-aligned Headline
',
+ 'Left-aligned Headline
'
+ );
+ }
+
+ function testConvertJustifyAlign() {
+ $this->assertResult(
+ 'Justified Paragraph
',
+ 'Justified Paragraph
'
+ );
+ }
+
+ function testRemoveInvalidAlign() {
+ $this->assertResult(
+ 'Invalid Headline
',
+ 'Invalid Headline
'
+ );
+ }
+
+ function testConvertTableLengths() {
+ $this->assertResult(
+ ' | |
',
+ ' | |
'
+ );
+ }
+
+ function testTdConvertNowrap() {
+ $this->assertResult(
+ ' | ',
+ ' | '
+ );
+ }
+
+ function testCaptionConvertAlignLeft() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testCaptionConvertAlignRight() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testCaptionConvertAlignTop() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testCaptionConvertAlignBottom() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testCaptionRemoveInvalidAlign() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testTableConvertAlignLeft() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testTableConvertAlignCenter() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testTableConvertAlignRight() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testTableRemoveInvalidAlign() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testImgConvertAlignLeft() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testImgConvertAlignRight() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testImgConvertAlignBottom() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testImgConvertAlignMiddle() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testImgConvertAlignTop() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testImgRemoveInvalidAlign() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testBorderConvertHVSpace() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testHrConvertSize() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testHrConvertNoshade() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testHrConvertAlignLeft() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testHrConvertAlignCenter() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testHrConvertAlignRight() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testHrRemoveInvalidAlign() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testBrConvertClearLeft() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testBrConvertClearRight() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testBrConvertClearAll() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testBrConvertClearNone() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testBrRemoveInvalidClear() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testUlConvertTypeDisc() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testUlConvertTypeSquare() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testUlConvertTypeCircle() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testUlConvertTypeCaseInsensitive() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testUlRemoveInvalidType() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testOlConvertType1() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testOlConvertTypeLowerI() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testOlConvertTypeUpperI() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testOlConvertTypeLowerA() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testOlConvertTypeUpperA() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testOlRemoveInvalidType() {
+ $this->assertResult(
+ '
',
+ '
'
+ );
+ }
+
+ function testLiConvertTypeCircle() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testLiConvertTypeA() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+ function testLiConvertTypeCaseSensitive() {
+ $this->assertResult(
+ '',
+ ''
+ );
+ }
+
+
+}
+
diff --git a/tests/index.php b/tests/index.php
index 69be2981..a98e20e6 100755
--- a/tests/index.php
+++ b/tests/index.php
@@ -5,7 +5,7 @@
error_reporting(E_ALL | E_STRICT);
define('HTMLPurifierTest', 1);
-define('HTMLPURIFIER_SCHEMA_STRICT', true);
+define('HTMLPURIFIER_SCHEMA_STRICT', true); // validate schemas
// wishlist: automated calling of this file from multiple PHP versions so we
// don't have to constantly switch around
@@ -13,10 +13,11 @@ define('HTMLPURIFIER_SCHEMA_STRICT', true);
// default settings (protect against register_globals)
$GLOBALS['HTMLPurifierTest'] = array();
$GLOBALS['HTMLPurifierTest']['PEAR'] = false; // do PEAR tests
+$GLOBALS['HTMLPurifierTest']['PH5P'] = version_compare(PHP_VERSION, "5", ">=") && class_exists('DOMDocument');
$simpletest_location = 'simpletest/'; // reasonable guess
// load SimpleTest
-@include '../test-settings.php'; // don't mind if it isn't there
+if (file_exists('../test-settings.php')) include '../test-settings.php';
require_once $simpletest_location . 'unit_tester.php';
require_once $simpletest_location . 'reporter.php';
require_once $simpletest_location . 'mock_objects.php';
@@ -79,7 +80,6 @@ if ($test_file = $GLOBALS['HTMLPurifierTest']['File']) {
} else {
$test = new GroupTest('All Tests');
-
foreach ($test_files as $test_file) {
require_once $test_file;
$test->addTestClass(path2class($test_file));
diff --git a/tests/test_files.php b/tests/test_files.php
index f9fa71c1..adb0df4c 100644
--- a/tests/test_files.php
+++ b/tests/test_files.php
@@ -79,6 +79,7 @@ $test_files[] = 'HTMLPurifier/GeneratorTest.php';
$test_files[] = 'HTMLPurifier/HTMLDefinitionTest.php';
$test_files[] = 'HTMLPurifier/HTMLModuleManagerTest.php';
$test_files[] = 'HTMLPurifier/HTMLModuleTest.php';
+$test_files[] = 'HTMLPurifier/HTMLModule/ObjectTest.php';
$test_files[] = 'HTMLPurifier/HTMLModule/RubyTest.php';
$test_files[] = 'HTMLPurifier/HTMLModule/ScriptingTest.php';
$test_files[] = 'HTMLPurifier/HTMLModule/TidyTest.php';
@@ -98,9 +99,13 @@ $test_files[] = 'HTMLPurifier/Strategy/FixNestingTest.php';
$test_files[] = 'HTMLPurifier/Strategy/FixNesting_ErrorsTest.php';
$test_files[] = 'HTMLPurifier/Strategy/MakeWellFormedTest.php';
$test_files[] = 'HTMLPurifier/Strategy/MakeWellFormed_ErrorsTest.php';
+$test_files[] = 'HTMLPurifier/Strategy/MakeWellFormed_InjectorTest.php';
$test_files[] = 'HTMLPurifier/Strategy/RemoveForeignElementsTest.php';
$test_files[] = 'HTMLPurifier/Strategy/RemoveForeignElements_ErrorsTest.php';
+$test_files[] = 'HTMLPurifier/Strategy/RemoveForeignElements_TidyTest.php';
$test_files[] = 'HTMLPurifier/Strategy/ValidateAttributesTest.php';
+$test_files[] = 'HTMLPurifier/Strategy/ValidateAttributes_IDTest.php';
+$test_files[] = 'HTMLPurifier/Strategy/ValidateAttributes_TidyTest.php';
$test_files[] = 'HTMLPurifier/TagTransformTest.php';
$test_files[] = 'HTMLPurifier/TokenTest.php';
$test_files[] = 'HTMLPurifier/URIDefinitionTest.php';