Release 2.1.0, merged in 1313 to HEAD.
[htmlpurifier.git] / tests / HTMLPurifier / ErrorCollectorTest.php
blob0c8db720e46ce41992fbc0aec4e55cbb4f3487eb
1 <?php
3 require_once 'HTMLPurifier/ErrorCollector.php';
5 class HTMLPurifier_ErrorCollectorTest extends HTMLPurifier_Harness
8 function setup() {
9 generate_mock_once('HTMLPurifier_Language');
10 generate_mock_once('HTMLPurifier_Generator');
13 function test() {
15 $language = new HTMLPurifier_LanguageMock();
16 $language->setReturnValue('getErrorName', 'Error', array(E_ERROR));
17 $language->setReturnValue('getErrorName', 'Warning', array(E_WARNING));
18 $language->setReturnValue('getMessage', 'Message 1', array('message-1'));
19 $language->setReturnValue('formatMessage', 'Message 2', array('message-2', array(1 => 'param')));
20 $language->setReturnValue('formatMessage', ' at line 23', array('ErrorCollector: At line', array('line' => 23)));
21 $language->setReturnValue('formatMessage', ' at line 3', array('ErrorCollector: At line', array('line' => 3)));
23 $line = false;
25 $context = new HTMLPurifier_Context();
26 $context->register('Locale', $language);
27 $context->register('CurrentLine', $line);
29 $generator = new HTMLPurifier_Generator();
30 $context->register('Generator', $generator);
32 $collector = new HTMLPurifier_ErrorCollector($context);
34 $line = 23;
35 $collector->send(E_ERROR, 'message-1');
37 $line = 3;
38 $collector->send(E_WARNING, 'message-2', 'param');
40 $result = array(
41 0 => array(23, E_ERROR, 'Message 1'),
42 1 => array(3, E_WARNING, 'Message 2')
45 $this->assertIdentical($collector->getRaw(), $result);
47 $formatted_result =
48 '<ul><li><strong>Warning</strong>: Message 2 at line 3</li>'.
49 '<li><strong>Error</strong>: Message 1 at line 23</li></ul>';
51 $config = HTMLPurifier_Config::create(array('Core.MaintainLineNumbers' => true));
53 $this->assertIdentical($collector->getHTMLFormatted($config), $formatted_result);
57 function testNoErrors() {
58 $language = new HTMLPurifier_LanguageMock();
59 $language->setReturnValue('getMessage', 'No errors', array('ErrorCollector: No errors'));
60 $context = new HTMLPurifier_Context();
61 $context->register('Locale', $language);
63 $generator = new HTMLPurifier_Generator();
64 $context->register('Generator', $generator);
66 $collector = new HTMLPurifier_ErrorCollector($context);
67 $formatted_result = '<p>No errors</p>';
68 $config = HTMLPurifier_Config::createDefault();
69 $this->assertIdentical($collector->getHTMLFormatted($config), $formatted_result);
72 function testNoLineNumbers() {
73 $language = new HTMLPurifier_LanguageMock();
74 $language->setReturnValue('getMessage', 'Message 1', array('message-1'));
75 $language->setReturnValue('getMessage', 'Message 2', array('message-2'));
76 $language->setReturnValue('getErrorName', 'Error', array(E_ERROR));
77 $context = new HTMLPurifier_Context();
78 $context->register('Locale', $language);
80 $generator = new HTMLPurifier_Generator();
81 $context->register('Generator', $generator);
83 $collector = new HTMLPurifier_ErrorCollector($context);
84 $collector->send(E_ERROR, 'message-1');
85 $collector->send(E_ERROR, 'message-2');
87 $result = array(
88 0 => array(null, E_ERROR, 'Message 1'),
89 1 => array(null, E_ERROR, 'Message 2')
91 $this->assertIdentical($collector->getRaw(), $result);
93 $formatted_result =
94 '<ul><li><strong>Error</strong>: Message 1</li>'.
95 '<li><strong>Error</strong>: Message 2</li></ul>';
96 $config = HTMLPurifier_Config::createDefault();
97 $this->assertIdentical($collector->getHTMLFormatted($config), $formatted_result);
100 function testContextSubstitutions() {
102 $language = new HTMLPurifier_LanguageMock();
103 $context = new HTMLPurifier_Context();
104 $context->register('Locale', $language);
106 $generator = new HTMLPurifier_Generator();
107 $context->register('Generator', $generator);
109 $current_token = false;
110 $context->register('CurrentToken', $current_token);
112 $collector = new HTMLPurifier_ErrorCollector($context);
114 // 0
115 $current_token = new HTMLPurifier_Token_Start('a', array('href' => 'http://example.com'), 32);
116 $language->setReturnValue('formatMessage', 'Token message',
117 array('message-data-token', array('CurrentToken' => $current_token)));
118 $collector->send(E_NOTICE, 'message-data-token');
120 $current_attr = 'href';
121 $language->setReturnValue('formatMessage', '$CurrentAttr.Name => $CurrentAttr.Value',
122 array('message-attr', array('CurrentToken' => $current_token)));
124 // 1
125 $collector->send(E_NOTICE, 'message-attr'); // test when context isn't available
127 // 2
128 $context->register('CurrentAttr', $current_attr);
129 $collector->send(E_NOTICE, 'message-attr');
131 $result = array(
132 0 => array(32, E_NOTICE, 'Token message'),
133 1 => array(32, E_NOTICE, '$CurrentAttr.Name => $CurrentAttr.Value'),
134 2 => array(32, E_NOTICE, 'href => http://example.com')
136 $this->assertIdentical($collector->getRaw(), $result);