Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
80.46% covered (warning)
80.46%
140 / 174
90.91% covered (success)
90.91%
10 / 11
CRAP
0.00% covered (danger)
0.00%
0 / 1
phpbb_textformatter_s9e_parser_test
80.46% covered (warning)
80.46%
140 / 174
90.91% covered (success)
90.91%
10 / 11
20.42
0.00% covered (danger)
0.00%
0 / 1
 test_load_from_cache
100.00% covered (success)
100.00%
18 / 18
100.00% covered (success)
100.00%
1 / 1
1
 test_use_from_cache
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
1 / 1
1
 test_regenerate_on_cache_miss
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
1 / 1
1
 test_options
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
1 / 1
1
 get_options_tests
0.00% covered (danger)
0.00%
0 / 34
0.00% covered (danger)
0.00%
0 / 1
2
 test_setup_event
100.00% covered (success)
100.00%
16 / 16
100.00% covered (success)
100.00%
1 / 1
1
 setup_event_callback
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 test_parse_event
100.00% covered (success)
100.00%
29 / 29
100.00% covered (success)
100.00%
1 / 1
1
 parse_before_event_callback
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
4
 parse_after_event_callback
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
4
 test_get_parser
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2/**
3*
4* This file is part of the phpBB Forum Software package.
5*
6* @copyright (c) phpBB Limited <https://www.phpbb.com>
7* @license GNU General Public License, version 2 (GPL-2.0)
8*
9* For full copyright and license information, please see
10* the docs/CREDITS.txt file.
11*
12*/
13
14class phpbb_textformatter_s9e_parser_test extends phpbb_test_case
15{
16    public function test_load_from_cache()
17    {
18        $mock = $this->getMockBuilder('s9e\\TextFormatter\\Parser')
19                     ->disableOriginalConstructor()
20                     ->getMock();
21
22        $cache = $this->createMock('phpbb_mock_cache');
23        $cache->expects($this->once())
24              ->method('get')
25              ->with('_foo_parser')
26              ->will($this->returnValue($mock));
27
28        $factory = $this->getMockBuilder('phpbb\\textformatter\\s9e\\factory')
29                        ->disableOriginalConstructor()
30                        ->getMock();
31        $factory->expects($this->never())->method('regenerate');
32
33        $parser = new \phpbb\textformatter\s9e\parser(
34            $cache,
35            '_foo_parser',
36            $factory,
37            new phpbb_mock_event_dispatcher
38        );
39    }
40
41    public function test_use_from_cache()
42    {
43        $mock = $this->getMockBuilder('s9e\\TextFormatter\\Parser')
44                     ->disableOriginalConstructor()
45                     ->getMock();
46
47        $mock->expects($this->once())
48             ->method('parse')
49             ->with('test')
50             ->will($this->returnValue('<t>test</t>'));
51
52        $cache = new phpbb_mock_cache;
53        $cache->put('_foo_parser', $mock);
54
55        $factory = $this->getMockBuilder('phpbb\\textformatter\\s9e\\factory')
56                        ->disableOriginalConstructor()
57                        ->getMock();
58        $factory->expects($this->never())->method('regenerate');
59
60        $parser = new \phpbb\textformatter\s9e\parser(
61            $cache,
62            '_foo_parser',
63            $factory,
64            new phpbb_mock_event_dispatcher
65        );
66
67        $this->assertSame('<t>test</t>', $parser->parse('test'));
68    }
69
70    public function test_regenerate_on_cache_miss()
71    {
72        $mock = $this->getMockBuilder('s9e\\TextFormatter\\Parser')
73                     ->disableOriginalConstructor()
74                     ->getMock();
75
76        $mock->expects($this->once())
77             ->method('parse')
78             ->with('test')
79             ->will($this->returnValue('<t>test</t>'));
80
81        $factory = $this->getMockBuilder('phpbb\\textformatter\\s9e\\factory')
82                        ->disableOriginalConstructor()
83                        ->getMock();
84        $factory->expects($this->once())
85                ->method('regenerate')
86                ->will($this->returnValue(array('parser' => $mock)));
87
88        $parser = new \phpbb\textformatter\s9e\parser(
89            new phpbb_mock_cache,
90            '_foo_parser',
91            $factory,
92            new phpbb_mock_event_dispatcher
93        );
94
95        $this->assertSame('<t>test</t>', $parser->parse('test'));
96    }
97
98    /**
99    * @dataProvider get_options_tests()
100    */
101    public function test_options($adapter_method, $adapter_arg, $concrete_method, $concrete_arg)
102    {
103        $mock = $this->getMockBuilder('s9e\\TextFormatter\\Parser')
104                     ->onlyMethods([$concrete_method])
105                     ->disableOriginalConstructor()
106                     ->getMock();
107
108        $concrete_args = (array) $concrete_arg;
109        $matcher = $this->exactly(count($concrete_args));
110        $mock->expects($matcher)
111            ->method($concrete_method)
112            ->willReturnCallback(function ($arg) use ($concrete_args, $matcher) {
113                $callNr = $matcher->numberOfInvocations();
114                $this->assertEquals($arg, $concrete_args[$callNr - 1]);
115            });
116            
117        $cache = new phpbb_mock_cache;
118        $cache->put('_foo_parser', $mock);
119
120        $factory = $this->getMockBuilder('phpbb\\textformatter\\s9e\\factory')
121                        ->disableOriginalConstructor()
122                        ->getMock();
123
124        $parser = new \phpbb\textformatter\s9e\parser(
125            $cache,
126            '_foo_parser',
127            $factory,
128            new phpbb_mock_event_dispatcher
129        );
130
131        call_user_func_array(array($parser, $adapter_method), (array) $adapter_arg);
132    }
133
134    public static function get_options_tests()
135    {
136        return array(
137            array(
138                'disable_bbcode', 'url',
139                'disableTag',     'URL'
140            ),
141            array(
142                'disable_bbcodes', null,
143                'disablePlugin',   'BBCodes'
144            ),
145            array(
146                'disable_magic_url', null,
147                'disablePlugin',     ['Autoemail', 'Autolink']
148            ),
149            array(
150                'disable_smilies', null,
151                'disablePlugin',   ['Emoticons', 'Emoji']
152            ),
153            array(
154                'enable_bbcode', 'url',
155                'enableTag',     'URL'
156            ),
157            array(
158                'enable_bbcodes', null,
159                'enablePlugin',   'BBCodes'
160            ),
161            array(
162                'enable_magic_url', null,
163                'enablePlugin',     ['Autoemail', 'Autolink']
164            ),
165            array(
166                'enable_smilies', null,
167                'enablePlugin',   ['Emoticons', 'Emoji']
168            )
169        );
170    }
171
172    /**
173    * @testdox The constructor triggers a core.text_formatter_s9e_parser_setup event
174    */
175    public function test_setup_event()
176    {
177        $container = $this->get_test_case_helpers()->set_s9e_services();
178        $dispatcher = $this->createMock('phpbb\\event\\dispatcher_interface');
179        $dispatcher
180            ->expects($this->once())
181            ->method('trigger_event')
182            ->with(
183                'core.text_formatter_s9e_parser_setup',
184                $this->callback(array($this, 'setup_event_callback'))
185            )
186            ->will($this->returnArgument(1));
187
188        new \phpbb\textformatter\s9e\parser(
189            $container->get('cache.driver'),
190            '_foo_parser',
191            $container->get('text_formatter.s9e.factory'),
192            $dispatcher
193        );
194    }
195
196    public function setup_event_callback($vars)
197    {
198        return isset($vars['parser'])
199            && $vars['parser'] instanceof \phpbb\textformatter\s9e\parser;
200    }
201
202    /**
203    * @testdox parse() triggers a core.text_formatter_s9e_parse_before and core.text_formatter_s9e_parse_after events
204    */
205    public function test_parse_event()
206    {
207        $container = $this->get_test_case_helpers()->set_s9e_services();
208        $dispatcher = $this->createMock('phpbb\\event\\dispatcher_interface');
209        $dispatcher
210            ->expects($this->any())
211            ->method('trigger_event')
212            ->will($this->returnArgument(1));
213
214        $parser = new \phpbb\textformatter\s9e\parser(
215            $container->get('cache.driver'),
216            '_foo_parser',
217            $container->get('text_formatter.s9e.factory'),
218            $dispatcher
219        );
220
221        $matcher = $this->exactly(2);
222        $dispatcher
223            ->expects($matcher)
224            ->method('trigger_event')
225            ->willReturnCallback(function($event, $vars) use ($matcher) {
226                $callNr = $matcher->numberOfInvocations();
227                match($callNr) {
228                    1 => $this->assertEquals('core.text_formatter_s9e_parse_before', $event),
229                    2 => $this->assertEquals('core.text_formatter_s9e_parse_after', $event),
230                };
231                match($callNr) {
232                    1 => $this->assertTrue($this->parse_before_event_callback($vars)),
233                    2 => $this->assertTrue($this->parse_after_event_callback($vars)),
234                };
235                return $vars;
236            });
237        $parser->parse('...');
238    }
239
240    public function parse_before_event_callback($vars)
241    {
242        return isset($vars['parser'])
243            && $vars['parser'] instanceof \phpbb\textformatter\s9e\parser
244            && isset($vars['text'])
245            && $vars['text'] === '...';
246    }
247
248    public function parse_after_event_callback($vars)
249    {
250        return isset($vars['parser'])
251            && $vars['parser'] instanceof \phpbb\textformatter\s9e\parser
252            && isset($vars['xml'])
253            && $vars['xml'] === '<t>...</t>';
254    }
255
256    public function test_get_parser()
257    {
258        $container = $this->get_test_case_helpers()->set_s9e_services();
259        $parser = $container->get('text_formatter.parser');
260        $this->assertInstanceOf('s9e\\TextFormatter\\Parser', $parser->get_parser());
261    }
262}