mirror of
https://github.com/ezyang/htmlpurifier.git
synced 2024-12-22 16:31:53 +00:00
Revamp URITest to use the harness.
git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@214 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
parent
ebe01a0a24
commit
10ea44932a
@ -10,6 +10,8 @@ require_once 'HTMLPurifier/AttrDef/URI.php';
|
|||||||
class HTMLPurifier_AttrDef_URITest extends HTMLPurifier_AttrDefHarness
|
class HTMLPurifier_AttrDef_URITest extends HTMLPurifier_AttrDefHarness
|
||||||
{
|
{
|
||||||
|
|
||||||
|
var $scheme, $components, $return_components;
|
||||||
|
|
||||||
function testGenericURI() {
|
function testGenericURI() {
|
||||||
|
|
||||||
generate_mock_once('HTMLPurifier_URIScheme');
|
generate_mock_once('HTMLPurifier_URIScheme');
|
||||||
@ -18,7 +20,7 @@ class HTMLPurifier_AttrDef_URITest extends HTMLPurifier_AttrDefHarness
|
|||||||
$old_registry = HTMLPurifier_URISchemeRegistry::instance();
|
$old_registry = HTMLPurifier_URISchemeRegistry::instance();
|
||||||
|
|
||||||
// finally, lets get a copy of the actual class
|
// finally, lets get a copy of the actual class
|
||||||
$def = new HTMLPurifier_AttrDef_URI();
|
$this->def = new HTMLPurifier_AttrDef_URI();
|
||||||
|
|
||||||
// initialize test inputs
|
// initialize test inputs
|
||||||
$uri = // input URI
|
$uri = // input URI
|
||||||
@ -140,9 +142,8 @@ class HTMLPurifier_AttrDef_URITest extends HTMLPurifier_AttrDefHarness
|
|||||||
$components[16] = array(null, '', null, null);
|
$components[16] = array(null, '', null, null);
|
||||||
//$expect_uri[16] = ''; // munge scheme off
|
//$expect_uri[16] = ''; // munge scheme off
|
||||||
|
|
||||||
// test invalid scheme
|
// test invalid scheme, components shouldn't be passed
|
||||||
$uri[17] = 'javascript:alert("moo");';
|
$uri[17] = 'javascript:alert("moo");';
|
||||||
$components[17] = false;
|
|
||||||
$expect_uri[17] = '';
|
$expect_uri[17] = '';
|
||||||
|
|
||||||
// relative URIs
|
// relative URIs
|
||||||
@ -153,44 +154,28 @@ class HTMLPurifier_AttrDef_URITest extends HTMLPurifier_AttrDefHarness
|
|||||||
|
|
||||||
foreach ($uri as $i => $value) {
|
foreach ($uri as $i => $value) {
|
||||||
|
|
||||||
// $fake_registry isn't the real mock, because due to PHP 4 weirdness
|
// setUpAssertDef
|
||||||
// I cannot set a default value to function parameters that are passed
|
if ( isset($components[$i]) ) {
|
||||||
// by reference. So we use the value instance() returns.
|
$this->components = $components[$i];
|
||||||
$fake_registry = new HTMLPurifier_URISchemeRegistryMock($this);
|
|
||||||
$registry =& HTMLPurifier_URISchemeRegistry::instance($fake_registry);
|
|
||||||
|
|
||||||
// now, let's at a pseudo-scheme to the registry
|
|
||||||
$scheme =& new HTMLPurifier_URISchemeMock($this);
|
|
||||||
|
|
||||||
// here are the schemes we will support with overloaded mocks
|
|
||||||
$registry->setReturnReference('getScheme', $scheme, array('http'));
|
|
||||||
$registry->setReturnReference('getScheme', $scheme, array('mailto'));
|
|
||||||
|
|
||||||
// default return value is false (meaning no scheme defined: reject)
|
|
||||||
$registry->setReturnValue('getScheme', false, array('*'));
|
|
||||||
|
|
||||||
if (!isset($return_components[$i])) {
|
|
||||||
$return_components[$i] = $components[$i];
|
|
||||||
}
|
|
||||||
if (!isset($expect_uri[$i])) {
|
|
||||||
$expect_uri[$i] = $value;
|
|
||||||
}
|
|
||||||
if (!isset($config[$i])) {
|
|
||||||
$config[$i] = HTMLPurifier_Config::createDefault();
|
|
||||||
}
|
|
||||||
if (!isset($context[$i])) {
|
|
||||||
$context[$i] = new HTMLPurifier_AttrContext();
|
|
||||||
}
|
|
||||||
if ($components[$i] === false) {
|
|
||||||
$scheme->expectNever('validateComponents');
|
|
||||||
} else {
|
} else {
|
||||||
$scheme->setReturnValue(
|
$this->components = false;
|
||||||
'validateComponents', $return_components[$i], $components[$i]);
|
|
||||||
$scheme->expectOnce('validateComponents', $components[$i]);
|
|
||||||
}
|
}
|
||||||
$result = $def->validate($value, $config[$i], $context[$i]);
|
if ( isset($return_components[$i]) ) {
|
||||||
$scheme->tally();
|
$this->return_components = $return_components[$i];
|
||||||
$this->assertIdentical($expect_uri[$i], $result, "Test $i: %s");
|
} else {
|
||||||
|
$this->return_components = $this->components;
|
||||||
|
}
|
||||||
|
|
||||||
|
// parameters
|
||||||
|
if (!isset($expect_uri[$i])) {
|
||||||
|
$expect_uri[$i] = $value; // untouched
|
||||||
|
}
|
||||||
|
|
||||||
|
// the read in values
|
||||||
|
$this->config = isset($config[$i]) ? $config[$i] : null;
|
||||||
|
$this->context = isset($context[$i]) ? $context[$i] : null;
|
||||||
|
|
||||||
|
$this->assertDef($value, $expect_uri[$i], "Test $i: %s");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,6 +184,36 @@ class HTMLPurifier_AttrDef_URITest extends HTMLPurifier_AttrDefHarness
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setUpAssertDef() {
|
||||||
|
// $fake_registry isn't the real mock, because due to PHP 4 weirdness
|
||||||
|
// I cannot set a default value to function parameters that are passed
|
||||||
|
// by reference. So we use the value instance() returns.
|
||||||
|
$fake_registry = new HTMLPurifier_URISchemeRegistryMock($this);
|
||||||
|
$registry =& HTMLPurifier_URISchemeRegistry::instance($fake_registry);
|
||||||
|
|
||||||
|
// now, let's at a pseudo-scheme to the registry
|
||||||
|
$this->scheme =& new HTMLPurifier_URISchemeMock($this);
|
||||||
|
|
||||||
|
// here are the schemes we will support with overloaded mocks
|
||||||
|
$registry->setReturnReference('getScheme', $this->scheme, array('http'));
|
||||||
|
$registry->setReturnReference('getScheme', $this->scheme, array('mailto'));
|
||||||
|
|
||||||
|
// default return value is false (meaning no scheme defined: reject)
|
||||||
|
$registry->setReturnValue('getScheme', false, array('*'));
|
||||||
|
|
||||||
|
if ($this->components === false) {
|
||||||
|
$this->scheme->expectNever('validateComponents');
|
||||||
|
} else {
|
||||||
|
$this->scheme->setReturnValue(
|
||||||
|
'validateComponents', $this->return_components, $this->components);
|
||||||
|
$this->scheme->expectOnce('validateComponents', $this->components);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function tearDownAssertDef() {
|
||||||
|
$this->scheme->tally();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
@ -8,18 +8,23 @@ class HTMLPurifier_AttrDefHarness extends UnitTestCase
|
|||||||
var $config;
|
var $config;
|
||||||
|
|
||||||
// cannot be used for accumulator
|
// cannot be used for accumulator
|
||||||
function assertDef($string, $expect = true) {
|
function assertDef($string, $expect = true, $message = '%s') {
|
||||||
// $expect can be a string or bool
|
// $expect can be a string or bool
|
||||||
|
$this->setUpAssertDef();
|
||||||
if (!$this->config) $this->config = HTMLPurifier_Config::createDefault();
|
if (!$this->config) $this->config = HTMLPurifier_Config::createDefault();
|
||||||
if (!$this->context) $this->context = new HTMLPurifier_AttrContext();
|
if (!$this->context) $this->context = new HTMLPurifier_AttrContext();
|
||||||
$result = $this->def->validate($string, $this->config, $this->context);
|
$result = $this->def->validate($string, $this->config, $this->context);
|
||||||
if ($expect === true) {
|
if ($expect === true) {
|
||||||
$this->assertIdentical($string, $result);
|
$this->assertIdentical($string, $result, $message);
|
||||||
} else {
|
} else {
|
||||||
$this->assertIdentical($expect, $result);
|
$this->assertIdentical($expect, $result, $message);
|
||||||
}
|
}
|
||||||
|
$this->tearDownAssertDef();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setUpAssertDef() {}
|
||||||
|
function tearDownAssertDef() {}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
Loading…
Reference in New Issue
Block a user