X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=tests%2Fsrc%2FUtil%2FStringsTest.php;h=6f0fc32fe3c107250686e680b320a728c66fea22;hb=7dadc7f6dc0b1e68bfa5937b3a3fa3fd9cdcacd1;hp=d090b1c5dd3a088f9dad89a5323616c3f0cce2e5;hpb=f1e7d97b8cae93e1c77f5a5085880409b01fcdbe;p=friendica.git diff --git a/tests/src/Util/StringsTest.php b/tests/src/Util/StringsTest.php index d090b1c5dd..6f0fc32fe3 100644 --- a/tests/src/Util/StringsTest.php +++ b/tests/src/Util/StringsTest.php @@ -1,14 +1,31 @@ . + * */ + namespace Friendica\Test\src\Util; use Friendica\Util\Strings; use PHPUnit\Framework\TestCase; /** - * @brief Strings utility test class + * Strings utility test class */ class StringsTest extends TestCase { @@ -20,7 +37,7 @@ class StringsTest extends TestCase $randomname1 = Strings::getRandomName(10); $randomname2 = Strings::getRandomName(10); - $this->assertNotEquals($randomname1, $randomname2); + self::assertNotEquals($randomname1, $randomname2); } /** @@ -31,7 +48,7 @@ class StringsTest extends TestCase $randomname1 = Strings::getRandomName(9); $randomname2 = Strings::getRandomName(9); - $this->assertNotEquals($randomname1, $randomname2); + self::assertNotEquals($randomname1, $randomname2); } /** @@ -40,7 +57,7 @@ class StringsTest extends TestCase public function testRandomNameNoLength() { $randomname1 = Strings::getRandomName(0); - $this->assertEquals(0, strlen($randomname1)); + self::assertEquals(0, strlen($randomname1)); } /** @@ -51,7 +68,7 @@ class StringsTest extends TestCase public function testRandomNameNegativeLength() { $randomname1 = Strings::getRandomName(-23); - $this->assertEquals(0, strlen($randomname1)); + self::assertEquals(0, strlen($randomname1)); } /** @@ -60,10 +77,10 @@ class StringsTest extends TestCase public function testRandomNameLength1() { $randomname1 = Strings::getRandomName(1); - $this->assertEquals(1, strlen($randomname1)); + self::assertEquals(1, strlen($randomname1)); $randomname2 = Strings::getRandomName(1); - $this->assertEquals(1, strlen($randomname2)); + self::assertEquals(1, strlen($randomname2)); } /** @@ -73,11 +90,9 @@ class StringsTest extends TestCase { $invalidstring=''; - $validstring = Strings::escapeTags($invalidstring); $escapedString = Strings::escapeHtml($invalidstring); - $this->assertEquals('[submit type="button" onclick="alert(\'failed!\');" /]', $validstring); - $this->assertEquals( + self::assertEquals( "<submit type="button" onclick="alert('failed!');" />", $escapedString ); @@ -108,13 +123,99 @@ class StringsTest extends TestCase /** * Tests if the string is a valid hexadecimal value * - * @param string $input - * @param bool $valid + * @param string|null $input + * @param bool $valid * * @dataProvider dataIsHex */ - public function testIsHex($input, $valid) + public function testIsHex(string $input = null, bool $valid = false) { - $this->assertEquals($valid, Strings::isHex($input)); + self::assertEquals($valid, Strings::isHex($input)); + } + + /** + * Tests that Strings::substringReplace behaves the same as substr_replace with ASCII strings in all the possible + * numerical parameter configurations (positive, negative, zero, out of bounds either side, null) + */ + public function testSubstringReplaceASCII() + { + for ($start = -10; $start <= 10; $start += 5) { + self::assertEquals( + substr_replace('string', 'replacement', $start), + Strings::substringReplace('string', 'replacement', $start) + ); + + for ($length = -10; $length <= 10; $length += 5) { + self::assertEquals( + substr_replace('string', 'replacement', $start, $length), + Strings::substringReplace('string', 'replacement', $start, $length) + ); + } + } + } + + + public function dataSubstringReplaceMultiByte() + { + return [ + 'issue-8470' => [ + 'expected' => 'Je n’y pense que maintenant (pask ma sonnette ne fonctionne pas) : mettre un gentil mot avec mes coordonnées sur ma porte est le moyen le plus simple de rester en contact si besoin avec mon voisinage direct ! [url=https://www.instagram.com/p/B-UdH2loee1/?igshid=x4aglyju9kva]instagram.com/p/B-UdH2loee1/…[/url] [rest of the post]', + 'string' => 'Je n’y pense que maintenant (pask ma sonnette ne fonctionne pas) : mettre un gentil mot avec mes coordonnées sur ma porte est le moyen le plus simple de rester en contact si besoin avec mon voisinage direct ! https://t.co/YoBWTHsAAk [rest of the post]', + 'replacement' => '[url=https://www.instagram.com/p/B-UdH2loee1/?igshid=x4aglyju9kva]instagram.com/p/B-UdH2loee1/…[/url]', + 'start' => 209, + 'length' => 23, + ], + ]; + } + + /** + * Tests cases where Strings::substringReplace is needed over substr_replace with multi-byte strings and character + * offsets + * + * @param string $expected + * @param string $string + * @param string $replacement + * @param int $start + * @param int|null $length + * + * @dataProvider dataSubstringReplaceMultiByte + */ + public function testSubstringReplaceMultiByte(string $expected, string $string, string $replacement, int $start, int $length = null) + { + self::assertEquals( + $expected, + Strings::substringReplace( + $string, + $replacement, + $start, + $length + ) + ); + } + + public function testPerformWithEscapedBlocks() + { + $originalText = '[noparse][/noparse][nobb]nobb[/nobb][noparse]noparse[/noparse]'; + + $text = Strings::performWithEscapedBlocks($originalText, '#[(?:noparse|nobb)].*?\[/(?:noparse|nobb)]#is', function ($text) { + return $text; + }); + + self::assertEquals($originalText, $text); + } + + public function testPerformWithEscapedBlocksNested() + { + $originalText = '[noparse][/noparse][nobb]nobb[/nobb][noparse]noparse[/noparse]'; + + $text = Strings::performWithEscapedBlocks($originalText, '#[nobb].*?\[/nobb]#is', function ($text) { + $text = Strings::performWithEscapedBlocks($text, '#[noparse].*?\[/noparse]#is', function ($text) { + return $text; + }); + + return $text; + }); + + self::assertEquals($originalText, $text); } }