. * */ namespace Friendica\Test\src\Content\Text; use Friendica\App\BaseURL; use Friendica\Content\Text\BBCode; use Friendica\Core\L10n; use Friendica\Test\MockedTest; use Friendica\Test\Util\AppMockTrait; use Friendica\Test\Util\VFSTrait; class BBCodeTest extends MockedTest { use VFSTrait; use AppMockTrait; protected function setUp() { parent::setUp(); $this->setUpVfsDir(); $this->mockApp($this->root); $this->app->videowidth = 425; $this->app->videoheight = 350; $this->configMock->shouldReceive('get') ->with('system', 'remove_multiplicated_lines') ->andReturn(false); $this->configMock->shouldReceive('get') ->with('system', 'no_oembed') ->andReturn(false); $this->configMock->shouldReceive('get') ->with('system', 'allowed_link_protocols') ->andReturn(null); $this->configMock->shouldReceive('get') ->with('system', 'itemcache_duration') ->andReturn(-1); $this->configMock->shouldReceive('get') ->with('system', 'url') ->andReturn('friendica.local'); $this->configMock->shouldReceive('get') ->with('system', 'no_smilies') ->andReturn(false); $this->configMock->shouldReceive('get') ->with('system', 'big_emojis') ->andReturn(false); $l10nMock = \Mockery::mock(L10n::class); $l10nMock->shouldReceive('t')->withAnyArgs()->andReturnUsing(function ($args) { return $args; }); $this->dice->shouldReceive('create') ->with(L10n::class) ->andReturn($l10nMock); $baseUrlMock = \Mockery::mock(BaseURL::class); $baseUrlMock->shouldReceive('get')->withAnyArgs()->andReturn('friendica.local'); $this->dice->shouldReceive('create') ->with(BaseURL::class) ->andReturn($baseUrlMock); } public function dataLinks() { return [ /** @see https://github.com/friendica/friendica/issues/2487 */ 'bug-2487-1' => [ 'data' => 'https://de.wikipedia.org/wiki/Juha_Sipilä', 'assertHTML' => true, ], 'bug-2487-2' => [ 'data' => 'https://de.wikipedia.org/wiki/Dnepr_(Motorradmarke)', 'assertHTML' => true, ], 'bug-2487-3' => [ 'data' => 'https://friendica.wäckerlin.ch/friendica', 'assertHTML' => true, ], 'bug-2487-4' => [ 'data' => 'https://mastodon.social/@morevnaproject', 'assertHTML' => true, ], /** @see https://github.com/friendica/friendica/issues/5795 */ 'bug-5795' => [ 'data' => 'https://social.nasqueron.org/@liw/100798039015010628', 'assertHTML' => true, ], /** @see https://github.com/friendica/friendica/issues/6095 */ 'bug-6095' => [ 'data' => 'https://en.wikipedia.org/wiki/Solid_(web_decentralization_project)', 'assertHTML' => true, ], 'no-protocol' => [ 'data' => 'example.com/path', 'assertHTML' => false ], 'wrong-protocol' => [ 'data' => 'ftp://example.com', 'assertHTML' => false ], 'wrong-domain-without-path' => [ 'data' => 'http://example', 'assertHTML' => false ], 'wrong-domain-with-path' => [ 'data' => 'http://example/path', 'assertHTML' => false ], 'bug-6857-domain-start' => [ 'data' => "http://\nexample.com", 'assertHTML' => false ], 'bug-6857-domain-end' => [ 'data' => "http://example\n.com", 'assertHTML' => false ], 'bug-6857-tld' => [ 'data' => "http://example.\ncom", 'assertHTML' => false ], 'bug-6857-end' => [ 'data' => "http://example.com\ntest", 'assertHTML' => false ], 'bug-6901' => [ 'data' => "http://example.com
<
',
'text' => '[code]<[/code]',
],
'bug-7808-code-gt' => [
'expectedHtml' => '>
',
'text' => '[code]>[/code]',
],
'bug-7808-code-amp' => [
'expectedHtml' => '&
',
'text' => '[code]&[/code]',
],
'task-8800-pre-spaces-notag' => [
'expectedHtml' => '[test] Space',
'text' => '[test] Space',
],
];
}
/**
* Test convert bbcodes to HTML
*
* @dataProvider dataBBCodes
*
* @param string $expectedHtml Expected HTML output
* @param string $text BBCode text
* @param bool $try_oembed Whether to convert multimedia BBCode tag
* @param int $simpleHtml BBCode::convert method $simple_html parameter value, optional.
* @param bool $forPlaintext BBCode::convert method $for_plaintext parameter value, optional.
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public function testConvert($expectedHtml, $text, $try_oembed = false, $simpleHtml = 0, $forPlaintext = false)
{
$actual = BBCode::convert($text, $try_oembed, $simpleHtml, $forPlaintext);
$this->assertEquals($expectedHtml, $actual);
}
public function dataBBCodesToMarkdown()
{
return [
'bug-7808-gt' => [
'expected' => '>`>`',
'text' => '>[code]>[/code]',
],
'bug-7808-lt' => [
'expected' => '<`<`',
'text' => '<[code]<[/code]',
],
'bug-7808-amp' => [
'expected' => '&`&`',
'text' => '&[code]&[/code]',
],
];
}
/**
* Test convert bbcodes to Markdown
*
* @dataProvider dataBBCodesToMarkdown
*
* @param string $expected Expected Markdown output
* @param string $text BBCode text
* @param bool $for_diaspora
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public function testToMarkdown($expected, $text, $for_diaspora = false)
{
$actual = BBCode::toMarkdown($text, $for_diaspora);
$this->assertEquals($expected, $actual);
}
}