<?php /** * * This file is part of the phpBB Forum Software package. * * @copyright (c) phpBB Limited <https://www.phpbb.com> * @license GNU General Public License, version 2 (GPL-2.0) * * For full copyright and license information, please see * the docs/CREDITS.txt file. * */ class phpbb_text_processing_generate_text_for_display_test extends phpbb_test_case { public function setUp(): void { global $cache, $user, $phpbb_dispatcher; parent::setUp(); $phpbb_dispatcher = new phpbb_mock_event_dispatcher; $config = new \phpbb\config\config(array()); set_config(null, null, null, $config); } /** * @dataProvider get_legacy_tests */ public function test_legacy($original, $expected, $uid = '', $bitfield = '', $flags = 0, $censor_text = true) { global $auth, $cache, $config, $user; global $phpbb_root_path, $phpEx; $cache = new phpbb_mock_cache; $lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx); $lang = new \phpbb\language\language($lang_loader); $user = new \phpbb\user($lang, '\phpbb\datetime'); $user->optionset('viewcensors', true); $user->optionset('viewflash', true); $user->optionset('viewimg', true); $user->optionset('viewsmilies', true); $actual = generate_text_for_display($original, $uid, $bitfield, $flags, $censor_text); $this->assertSame($expected, $actual); } public function get_legacy_tests() { return array( array( '', '' ), array( '0', '0' ), ); } public function test_censor_is_restored() { global $auth, $user, $config, $phpbb_container; $phpbb_container = new phpbb_mock_container_builder; global $phpbb_root_path, $phpEx; $lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx); $lang = new \phpbb\language\language($lang_loader); $user = new \phpbb\user($lang, '\phpbb\datetime'); // Do not ignore word censoring by user (switch censoring on in UCP) $user->optionset('viewcensors', true); $config = new \phpbb\config\config(array('allow_nocensors' => true)); $auth = $this->createMock('phpbb\\auth\\auth'); $auth->expects($this->any()) ->method('acl_get') ->with('u_chgcensors') ->will($this->returnValue(true)); $phpbb_container->set('user', $user); $phpbb_container->set('config', $config); $phpbb_container->set('auth', $auth); $this->get_test_case_helpers()->set_s9e_services($phpbb_container); $renderer = $phpbb_container->get('text_formatter.renderer'); $original = '<r><CENSOR with="banana">apple</CENSOR></r>'; $renderer->set_viewcensors(false); $this->assertSame('apple', $renderer->render($original)); $renderer->set_viewcensors(true); $this->assertSame('banana', $renderer->render($original)); $this->assertSame('apple', generate_text_for_display($original, '', '', 0, false)); $this->assertSame('banana', $renderer->render($original), 'The original setting was not restored'); $renderer->set_viewcensors(false); $this->assertSame('apple', $renderer->render($original)); $this->assertSame('banana', generate_text_for_display($original, '', '', 0, true)); $this->assertSame('apple', $renderer->render($original), 'The original setting was not restored'); // Test user option switch to ignore censoring $renderer->set_viewcensors(true); // 1st: censoring is still on in UCP $this->assertSame('banana', generate_text_for_display($original, '', '', 0, true)); // 2nd: switch censoring off in UCP $user->optionset('viewcensors', false); $this->assertSame('apple', generate_text_for_display($original, '', '', 0, true)); } /** * @dataProvider get_text_formatter_tests */ public function test_text_formatter($original, $expected, $censor_text = true, $setup = null) { global $auth, $user, $config, $phpbb_container; $phpbb_container = new phpbb_mock_container_builder; if (isset($setup)) { $setup($phpbb_container, $this); } $this->get_test_case_helpers()->set_s9e_services($phpbb_container); $this->assertSame($expected, generate_text_for_display($original, '', '', 0, $censor_text)); } public function get_text_formatter_tests() { return array( array( '<t>Plain text</t>', 'Plain text' ), array( '<r>Hello <URL url="http://example.org"><s>[url=http://example.org]</s>world<e>[/url]</e></URL></r>', 'Hello <a href="http://example.org" class="postlink">world</a>' ), array( '<t>&<>"\'</t>', '&<>"\'' ), array( '<r><CENSOR with="banana">apple</CENSOR></r>', 'banana', true ), array( '<r><CENSOR with="banana">apple</CENSOR></r>', 'apple', false ), array( '<r><FLASH url="http://localhost/foo.swf" width="123" height="456"><s>[flash=123,456]</s>http://localhost/foo.swf<e>[/flash]</e></FLASH></r>', '<object classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=5,0,0,0" width="123" height="456"><param name="movie" value="http://localhost/foo.swf"><param name="play" value="false"><param name="loop" value="false"><param name="quality" value="high"><param name="allowScriptAccess" value="never"><param name="allowNetworking" value="internal"><embed src="http://localhost/foo.swf" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" width="123" height="456" play="false" loop="false" quality="high" allowscriptaccess="never" allownetworking="internal"></object>' ), array( '<r><FLASH url="http://localhost/foo.swf" width="123" height="456"><s>[flash=123,456]</s>http://localhost/foo.swf<e>[/flash]</e></FLASH></r>', 'http://localhost/foo.swf', true, function ($phpbb_container) { global $phpbb_root_path, $phpEx; $lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx); $lang = new \phpbb\language\language($lang_loader); $user = new \phpbb\user($lang, '\phpbb\datetime'); $user->optionset('viewflash', false); $phpbb_container->set('user', $user); } ), array( '<r><IMG src="http://localhost/mrgreen.gif"><s>[img]</s><URL url="http://localhost/mrgreen.gif">http://localhost/mrgreen.gif</URL><e>[/img]</e></IMG></r>', '<img src="http://localhost/mrgreen.gif" class="postimage" alt="Image">' ), array( '<r><IMG src="http://localhost/mrgreen.gif"><s>[img]</s><URL url="http://localhost/mrgreen.gif">http://localhost/mrgreen.gif</URL><e>[/img]</e></IMG></r>', '<a href="http://localhost/mrgreen.gif" class="postlink">http://localhost/mrgreen.gif</a>', true, function ($phpbb_container) { global $phpbb_root_path, $phpEx; $lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx); $lang = new \phpbb\language\language($lang_loader); $user = new \phpbb\user($lang, '\phpbb\datetime'); $user->optionset('viewimg', false); $phpbb_container->set('user', $user); } ), array( '<r><E>:)</E></r>', '<img class="smilies" src="phpBB/images/smilies/icon_e_smile.gif" width="15" height="17" alt=":)" title="Smile">' ), array( '<r><E>:)</E></r>', ':)', true, function ($phpbb_container) { global $phpbb_root_path, $phpEx; $lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx); $lang = new \phpbb\language\language($lang_loader); $user = new \phpbb\user($lang, '\phpbb\datetime'); $user->optionset('smilies', false); $phpbb_container->set('user', $user); } ), ); } }