0
0
mirror of https://github.com/ezyang/htmlpurifier.git synced 2024-09-19 10:45:18 +00:00

Add ParseType validator.

git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1600 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
Edward Z. Yang 2008-03-04 14:33:38 +00:00
parent c0b5bc3eea
commit b9eb44bf03
4 changed files with 67 additions and 2 deletions

View File

@ -135,6 +135,7 @@ require 'HTMLPurifier/ConfigSchema/Validator/Alnum.php';
require 'HTMLPurifier/ConfigSchema/Validator/Exists.php';
require 'HTMLPurifier/ConfigSchema/Validator/NamespaceExists.php';
require 'HTMLPurifier/ConfigSchema/Validator/ParseId.php';
require 'HTMLPurifier/ConfigSchema/Validator/ParseType.php';
require 'HTMLPurifier/ConfigSchema/Validator/Unique.php';
require 'HTMLPurifier/DefinitionCache/Decorator.php';
require 'HTMLPurifier/DefinitionCache/Null.php';

View File

@ -57,17 +57,28 @@ class HTMLPurifier_ConfigSchema_Interchange
$validator = new HTMLPurifier_ConfigSchema_InterchangeValidator($this);
// Validators should be defined in the order they are to be called.
// ID tests
$validator->addValidator($this->make('Exists', 'ID'));
$validator->addValidator($this->make('Unique'));
$validator->addNamespaceValidator($this->make('Alnum', 'ID'));
$validator->addValidator($this->make('ParseId'));
$validator->addValidator($this->make('Exists', '_NAMESPACE'));
$validator->addValidator($this->make('Alnum', '_NAMESPACE'));
// Directive tests
$validator->addDirectiveValidator($this->make('Exists', '_DIRECTIVE'));
$validator->addDirectiveValidator($this->make('Alnum', '_DIRECTIVE'));
$validator->addDirectiveValidator($this->make('Exists', 'TYPE'));
$validator->addDirectiveValidator($this->make('Exists', 'DEFAULT'));
$validator->addDirectiveValidator($this->make('NamespaceExists'));
// Directive: Type tests
$validator->addDirectiveValidator($this->make('Exists', 'TYPE'));
$validator->addDirectiveValidator($this->make('ParseType'));
$validator->addDirectiveValidator($this->make('Exists', '_TYPE'));
$validator->addDirectiveValidator($this->make('Exists', '_NULL'));
$validator->addDirectiveValidator($this->make('Exists', 'DEFAULT'));
// Common tests
$validator->addValidator($this->make('Exists', 'DESCRIPTION'));
return $validator;

View File

@ -0,0 +1,19 @@
<?php
/**
* Parses TYPE into _TYPE and _NULL. Expects TYPE and ID to exist.
*/
class HTMLPurifier_ConfigSchema_Validator_ParseType extends HTMLPurifier_ConfigSchema_Validator
{
public function validate(&$arr, $interchange) {
$r = explode('/', $arr['TYPE'], 2);
if (!isset($interchange->types[$r[0]])) {
$this->error('Invalid type ' . $r[0] . ' for configuration directive ' . $arr['ID']);
}
$arr['_TYPE'] = $r[0];
$arr['_NULL'] = (isset($r[1]) && $r[1] === 'null');
}
}

View File

@ -0,0 +1,34 @@
<?php
class HTMLPurifier_ConfigSchema_Validator_ParseTypeTest extends HTMLPurifier_ConfigSchema_ValidatorHarness
{
public function testValidatePlain() {
$arr = array('ID' => 'N.D', 'TYPE' => 'string');
$this->validator->validate($arr, $this->interchange);
$this->assertIdentical($arr, array(
'ID' => 'N.D',
'TYPE' => 'string',
'_TYPE' => 'string',
'_NULL' => false,
));
}
public function testValidateWithNull() {
$arr = array('ID' => 'N.D', 'TYPE' => 'int/null');
$this->validator->validate($arr, $this->interchange);
$this->assertIdentical($arr, array(
'ID' => 'N.D',
'TYPE' => 'int/null',
'_TYPE' => 'int',
'_NULL' => true,
));
}
public function testValidateInvalidType() {
$arr = array('ID' => 'N.D', 'TYPE' => 'aint/null');
$this->expectSchemaException('Invalid type aint for configuration directive N.D');
$this->validator->validate($arr, $this->interchange);
}
}