1
0
mirror of https://github.com/ezyang/htmlpurifier.git synced 2025-08-05 05:37:49 +02:00

[1.7.0] Fix bug in HTMLPurifier_Harness that causes certain aspects of $input to change after parsing

- Add makeLookup() convenience function to HTMLModule
- Relocate SGML exclusion comment
- Add preliminary Bdo module test

git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1049 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
Edward Z. Yang
2007-05-13 03:42:09 +00:00
parent bda9167423
commit da92cb9ff4
8 changed files with 145 additions and 49 deletions

View File

@@ -0,0 +1,30 @@
<?php
require_once 'HTMLPurifier/HTMLModuleHarness.php';
class HTMLPurifier_HTMLModule_BdoTest extends HTMLPurifier_HTMLModuleHarness
{
function test() {
$this->assertResult(
'<span>
<bdo
id="test-id"
class="class-name"
style="font-weight:bold;"
title="Title of tag"
lang="en"
xml:lang="en"
dir="rtl"
>
#PCDATA <span>Inline</span>
</bdo>
</span>', true, array('Attr.EnableID' => true)
);
}
}
?>

View File

@@ -0,0 +1,14 @@
<?php
require_once 'HTMLPurifier/StrategyHarness.php';
require_once 'HTMLPurifier/Strategy/Core.php';
class HTMLPurifier_HTMLModuleHarness extends HTMLPurifier_StrategyHarness
{
function setup() {
parent::setup();
$this->obj = new HTMLPurifier_Strategy_Core();
}
}
?>

View File

@@ -121,6 +121,30 @@ class HTMLPurifier_HTMLModuleTest extends UnitTestCase
}
function test_makeLookup() {
$module = new HTMLPurifier_HTMLModule();
$this->assertIdentical(
$module->makeLookup('foo'),
array('foo' => true)
);
$this->assertIdentical(
$module->makeLookup(array('foo')),
array('foo' => true)
);
$this->assertIdentical(
$module->makeLookup('foo', 'two'),
array('foo' => true, 'two' => true)
);
$this->assertIdentical(
$module->makeLookup(array('foo', 'two')),
array('foo' => true, 'two' => true)
);
}
}
?>

View File

@@ -73,12 +73,17 @@ class HTMLPurifier_Harness extends UnitTestCase
$context->loadArray($context_array);
if ($this->to_tokens && is_string($input)) {
$input = $this->lexer->tokenizeHTML($input, $config, $context);
// $func may cause $input to change, so "clone" another copy
// to sacrifice
$input = $this->lexer->tokenizeHTML($s = $input, $config, $context);
$input_c = $this->lexer->tokenizeHTML($s, $config, $context);
} else {
$input_c = $input;
}
// call the function
$func = $this->func;
$result = $this->obj->$func($input, $config, $context);
$result = $this->obj->$func($input_c, $config, $context);
// test a bool result
if (is_bool($result)) {