<?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_textformatter_s9e_bbcode_merger_test extends phpbb_test_case { /** * @dataProvider get_merge_bbcodes_tests */ public function test_merge_bbcodes($usage_without, $template_without, $usage_with, $template_with, $expected_usage, $expected_template) { $container = $this->get_test_case_helpers()->set_s9e_services(); $factory = $container->get('text_formatter.s9e.factory'); $bbcode_merger = new \phpbb\textformatter\s9e\bbcode_merger($factory); $without = ['usage' => $usage_without, 'template' => $template_without]; $with = ['usage' => $usage_with, 'template' => $template_with]; $merged = $bbcode_merger->merge_bbcodes($without, $with); // Normalize the expected template's whitespace to match the default indentation $expected_template = str_replace("\n\t\t\t\t", "\n", $expected_template); $expected_template = str_replace("\t", ' ', $expected_template); $this->assertSame($expected_usage, $merged['usage']); $this->assertSame($expected_template, $merged['template']); } public function get_merge_bbcodes_tests() { return [ [ '[x]{TEXT}[/x]', '<b>{TEXT}</b>', '[x={TEXT1}]{TEXT}[/x]', '<b title="{TEXT1}">{TEXT}</b>', '[x={TEXT1?}]{TEXT}[/x]', '<b> <xsl:if test="@x"> <xsl:attribute name="title"> <xsl:value-of select="@x"/> </xsl:attribute> </xsl:if> <xsl:apply-templates/> </b>' ], [ // The tokens' numbering differs between versions '[x]{TEXT}[/x]', '<b>{TEXT}</b>', '[x={TEXT1}]{TEXT2}[/x]', '<b title="{TEXT1}">{TEXT2}</b>', '[x={TEXT1?}]{TEXT2}[/x]', '<b> <xsl:if test="@x"> <xsl:attribute name="title"> <xsl:value-of select="@x"/> </xsl:attribute> </xsl:if> <xsl:apply-templates/> </b>' ], [ '[x]{URL}[/x]', '<a href="{URL}">{URL}</a>', '[x={URL}]{TEXT}[/x]', '<a href="{URL}">{TEXT}</a>', '[x={URL;useContent}]{TEXT}[/x]', '<a href="{@x}"> <xsl:apply-templates/> </a>' ], [ '[x]{URL}[/x]', '<a href="{URL}">{L_GO_TO}: {URL}</a>', '[x={URL}]{TEXT}[/x]', '<a href="{URL}">{L_GO_TO}: {TEXT}</a>', '[x={URL;useContent}]{TEXT}[/x]', '<a href="{@x}">{L_GO_TO}: <xsl:apply-templates/></a>' ], [ // Test that unsafe BBCodes can still be merged '[script]{TEXT}[/script]', '<script>{TEXT}</script>', '[script={TEXT1}]{TEXT2}[/script]', '<script type="{TEXT1}">{TEXT2}</script>', '[script={TEXT1?}]{TEXT2}[/script]', '<script> <xsl:if test="@script"> <xsl:attribute name="type"> <xsl:value-of select="@script"/> </xsl:attribute> </xsl:if> <xsl:apply-templates/> </script>' ], [ // https://www.phpbb.com/community/viewtopic.php?p=14848281#p14848281 '[note]{TEXT}[/note]', '<span class="prime_bbcode_note_spur" onmouseover="show_note(this);" onmouseout="hide_note(this);" onclick="lock_note(this);"></span><span class="prime_bbcode_note">{TEXT}</span>', '[note={TEXT1}]{TEXT2}[/note]', '<span class="prime_bbcode_note_text" onmouseover="show_note(this);" onmouseout="hide_note(this);" onclick="lock_note(this);">{TEXT1}</span><span class="prime_bbcode_note_spur" onmouseover="show_note(this);" onmouseout="hide_note(this);" onclick="lock_note(this);"></span><span class="prime_bbcode_note">{TEXT2}</span>', '[note={TEXT1?}]{TEXT2}[/note]', '<xsl:if test="@note"> <span class="prime_bbcode_note_text" onmouseover="show_note(this);" onmouseout="hide_note(this);" onclick="lock_note(this);"> <xsl:value-of select="@note"/> </span> </xsl:if> <span class="prime_bbcode_note_spur" onmouseover="show_note(this);" onmouseout="hide_note(this);" onclick="lock_note(this);"/> <span class="prime_bbcode_note"> <xsl:apply-templates/> </span>' ], [ // https://www.phpbb.com/community/viewtopic.php?p=14768441#p14768441 '[MI]{TEXT}[/MI]', '<span style="color:red">MI:</span> <span style="color:#f6efe2">{TEXT}</span>', '[MI={TEXT2}]{TEXT1}[/MI]', '<span style="color:red">MI for: "{TEXT2}":</span> <span style="color:#f6efe2">{TEXT1}</span>', '[MI={TEXT2?}]{TEXT1}[/MI]', '<span style="color:red">MI<xsl:if test="@mi"> for: "<xsl:value-of select="@mi"/>"</xsl:if>:</span> <xsl:text> </xsl:text> <span style="color:#f6efe2"> <xsl:apply-templates/> </span>' ], [ // https://www.phpbb.com/community/viewtopic.php?p=14700506#p14700506 '[spoiler]{TEXT}[/spoiler]', '<span class="spoiler"> {TEXT}</span>', '[spoiler={TEXT1}]{TEXT2}[/spoiler]', '<div class="spoiler"><small> {TEXT1}</small>{TEXT2}</div>', '[spoiler={TEXT1?}]{TEXT2}[/spoiler]', '<xsl:choose> <xsl:when test="@spoiler"> <div class="spoiler"> <small> <xsl:text> </xsl:text> <xsl:value-of select="@spoiler"/> </small> <xsl:apply-templates/> </div> </xsl:when> <xsl:otherwise> <span class="spoiler"> <xsl:text> </xsl:text> <xsl:apply-templates/> </span> </xsl:otherwise> </xsl:choose>' ], [ // https://www.phpbb.com/community/viewtopic.php?p=14859676#p14859676 '[AE]{TEXT}[/AE]', '<table width="100%" border="1"> <tr><td width="100%" align="center"> <table width="100%" border="0"> <tr> <td width="100%" bgcolor="#E1E4F2"> <table width="100%" border="0" bgcolor="#F5F5FF"> <tr> <td width="1%" bgcolor="#000000" nowrap align="left"> <font color="#FFFFFF" face="Arial"><font size="1"><b> ACTIVE EFFECTS & CONDITIONS </b></font></font></td> <td width="99%"> </td> </tr> <tr> <td width="100%" bgcolor="#FFE5BA" colspan="2"> <table width="100%" cellpadding="2"> <tr> <td width="100%" align="left" valign="top"> {TEXT} </td> </tr> </table> </td> </tr> </table> </td> </tr> </table> </td></tr> </table> <p> </p>', '[AE={TEXT1}]{TEXT2}[/AE]', '<table width="100%" border="1"> <tr><td width="100%" align="center"> <table width="100%" border="0"> <tr> <td width="100%" bgcolor="#E1E4F2"> <table width="100%" border="0" bgcolor="#F5F5FF"> <tr> <td width="1%" bgcolor="#000000" nowrap align="left"> <font color="#FFFFFF" face="Arial"><font size="1"><b> {TEXT1} </b></font></font></td> <td width="99%"> </td> </tr> <tr> <td width="100%" bgcolor="#FFE5BA" colspan="2"> <table width="100%" cellpadding="2"> <tr> <td width="100%" align="left" valign="top"> {TEXT2} </td> </tr> </table> </td> </tr> </table> </td> </tr> </table> </td></tr> </table> <p> </p>', '[AE={TEXT1?}]{TEXT2}[/AE]', '<table width="100%" border="1"> <tr> <td width="100%" align="center"> <table width="100%" border="0"> <tr> <td width="100%" bgcolor="#E1E4F2"> <table width="100%" border="0" bgcolor="#F5F5FF"> <tr> <td width="1%" bgcolor="#000000" nowrap="nowrap" align="left"> <font color="#FFFFFF" face="Arial"> <font size="1"> <b> <xsl:choose><xsl:when test="@ae"><xsl:text> </xsl:text><xsl:value-of select="@ae"/></xsl:when><xsl:otherwise>ACTIVE EFFECTS & CONDITIONS</xsl:otherwise></xsl:choose> </b> </font> </font> </td> <td width="99%"> </td> </tr> <tr> <td width="100%" bgcolor="#FFE5BA" colspan="2"> <table width="100%" cellpadding="2"> <tr> <td width="100%" align="left" valign="top"> <xsl:apply-templates/> </td> </tr> </table> </td> </tr> </table> </td> </tr> </table> </td> </tr> </table> <p> </p>' ], ]; } }