mirror of
https://github.com/ezyang/htmlpurifier.git
synced 2025-07-31 19:30:21 +02:00
[2.0.1] Start making more moves towards full error reporting. Revise message naming conventions. Fix variable assignment for error collecting. Revise Language interface to be as readable as possible (NOT compact). Add error reporting to DirectLex. Rewrite ErrorCollector.
git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1227 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
@@ -5,45 +5,74 @@ require_once 'HTMLPurifier/ErrorCollector.php';
|
||||
class HTMLPurifier_ErrorCollectorTest extends UnitTestCase
|
||||
{
|
||||
|
||||
function setup() {
|
||||
generate_mock_once('HTMLPurifier_Language');
|
||||
}
|
||||
|
||||
function test() {
|
||||
|
||||
$tok1 = new HTMLPurifier_Token_Text('Token that caused error');
|
||||
$tok1->line = 23;
|
||||
$tok2 = new HTMLPurifier_Token_Start('a'); // also caused error
|
||||
$tok2->line = 3;
|
||||
$tok3 = new HTMLPurifier_Token_Text('Context before'); // before $tok2
|
||||
$tok3->line = 3;
|
||||
$tok4 = new HTMLPurifier_Token_Text('Context after'); // after $tok2
|
||||
$tok4->line = 3;
|
||||
$tok = new HTMLPurifier_Token_Start('a'); // also caused error
|
||||
$tok->line = 3;
|
||||
|
||||
$collector = new HTMLPurifier_ErrorCollector();
|
||||
$collector->send('Big fat error', E_ERROR, $tok1);
|
||||
$collector->send('Another <warning>', E_WARNING, $tok2, array($tok3, true, $tok4));
|
||||
$language = new HTMLPurifier_LanguageMock();
|
||||
$language->setReturnValue('getErrorName', 'Error', array(E_ERROR));
|
||||
$language->setReturnValue('getErrorName', 'Warning', array(E_WARNING));
|
||||
$language->setReturnValue('getMessage', 'Message 1', array('message-1'));
|
||||
$language->setReturnValue('formatMessage', 'Message 2', array('message-2', array(1 => 'param')));
|
||||
$language->setReturnValue('formatMessage', ' at line 23', array('ErrorCollector: At line', array('line' => 23)));
|
||||
$language->setReturnValue('formatMessage', ' at line 3', array('ErrorCollector: At line', array('line' => 3)));
|
||||
|
||||
$collector = new HTMLPurifier_ErrorCollector($language);
|
||||
$collector->send(23, E_ERROR, 'message-1');
|
||||
$collector->send($tok, E_WARNING, 'message-2', 'param');
|
||||
|
||||
$result = array(
|
||||
0 => array('Big fat error', E_ERROR, $tok1, array(true)),
|
||||
1 => array('Another <warning>', E_WARNING, $tok2, array($tok3, true, $tok4))
|
||||
0 => array(23, E_ERROR, 'Message 1'),
|
||||
1 => array(3, E_WARNING, 'Message 2')
|
||||
);
|
||||
|
||||
$this->assertIdentical($collector->getRaw(), $result);
|
||||
|
||||
$formatted_result = array(
|
||||
0 => 'Warning: Another <warning> at line 3 (<code>Context before<strong><a></strong>Context after</code>)',
|
||||
1 => 'Error: Big fat error at line 23 (<code><strong>Token that caused error</strong></code>)'
|
||||
);
|
||||
$formatted_result =
|
||||
'<ul><li>Warning: Message 2 at line 3</li>'.
|
||||
'<li>Error: Message 1 at line 23</li></ul>';
|
||||
|
||||
$config = HTMLPurifier_Config::create(array('Core.MaintainLineNumbers' => true));
|
||||
|
||||
$context = new HTMLPurifier_Context();
|
||||
$this->assertIdentical($collector->getHTMLFormatted($config), $formatted_result);
|
||||
|
||||
generate_mock_once('HTMLPurifier_Language');
|
||||
}
|
||||
|
||||
function testNoErrors() {
|
||||
$language = new HTMLPurifier_LanguageMock();
|
||||
$language->setReturnValue('getMessage', 'No errors', array('ErrorCollector: No errors'));
|
||||
$collector = new HTMLPurifier_ErrorCollector($language);
|
||||
$formatted_result = '<p>No errors</p>';
|
||||
$config = HTMLPurifier_Config::createDefault();
|
||||
$this->assertIdentical($collector->getHTMLFormatted($config), $formatted_result);
|
||||
}
|
||||
|
||||
function testNoLineNumbers() {
|
||||
$token = new HTMLPurifier_Token_Start('a'); // no line number!
|
||||
$language = new HTMLPurifier_LanguageMock();
|
||||
$language->setReturnValue('getMessage', 'Message 1', array('message-1'));
|
||||
$language->setReturnValue('getMessage', 'Message 2', array('message-2'));
|
||||
$language->setReturnValue('getErrorName', 'Error', array(E_ERROR));
|
||||
$language->setReturnValue('getErrorName', 'Warning', array(E_WARNING));
|
||||
$context->register('Locale', $language);
|
||||
$collector = new HTMLPurifier_ErrorCollector($language);
|
||||
$collector->send(false, E_ERROR, 'message-1');
|
||||
$collector->send($token, E_ERROR, 'message-2');
|
||||
|
||||
$this->assertIdentical($collector->getHTMLFormatted($config, $context), $formatted_result);
|
||||
$result = array(
|
||||
0 => array(false, E_ERROR, 'Message 1'),
|
||||
1 => array(false, E_ERROR, 'Message 2')
|
||||
);
|
||||
$this->assertIdentical($collector->getRaw(), $result);
|
||||
|
||||
$formatted_result =
|
||||
'<ul><li>Error: Message 1</li>'.
|
||||
'<li>Error: Message 2</li></ul>';
|
||||
$config = HTMLPurifier_Config::createDefault();
|
||||
$this->assertIdentical($collector->getHTMLFormatted($config), $formatted_result);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -19,7 +19,7 @@ class HTMLPurifier_LanguageTest extends UnitTestCase
|
||||
$lang = new HTMLPurifier_Language();
|
||||
$lang->_loaded = true;
|
||||
$lang->messages['error'] = 'Error is $1 on line $2';
|
||||
$this->assertIdentical($lang->formatMessage('error', 'fatal', 32), 'Error is fatal on line 32');
|
||||
$this->assertIdentical($lang->formatMessage('error', array(1=>'fatal', 32)), 'Error is fatal on line 32');
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -53,6 +53,12 @@ class HTMLPurifier_Lexer_DirectLexTest extends UnitTestCase
|
||||
$input[10] = 'name="input" selected';
|
||||
$expect[10] = array('name' => 'input', 'selected' => 'selected');
|
||||
|
||||
$input[11] = '=""';
|
||||
$expect[11] = array();
|
||||
|
||||
$input[12] = '="" =""';
|
||||
$expect[12] = array('"' => ''); // tough to say, just don't throw a loop
|
||||
|
||||
$config = HTMLPurifier_Config::createDefault();
|
||||
$context = new HTMLPurifier_Context();
|
||||
$size = count($input);
|
||||
|
Reference in New Issue
Block a user