mirror of
https://github.com/ezyang/htmlpurifier.git
synced 2025-08-04 21:28:06 +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);
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user