X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=tests%2Fsrc%2FUtil%2FStringsTest.php;h=6f0fc32fe3c107250686e680b320a728c66fea22;hb=7dadc7f6dc0b1e68bfa5937b3a3fa3fd9cdcacd1;hp=666b76e57b1c225bd2c6348e42a530bc3a690075;hpb=7684eae0c080c54db2d90815eadc262c20e54641;p=friendica.git diff --git a/tests/src/Util/StringsTest.php b/tests/src/Util/StringsTest.php index 666b76e57b..6f0fc32fe3 100644 --- a/tests/src/Util/StringsTest.php +++ b/tests/src/Util/StringsTest.php @@ -1,18 +1,35 @@ . + * */ + 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 { - /** + /** * randomnames should be random, even length */ public function testRandomEven() @@ -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,26 +77,145 @@ 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)); + } + + /** * test, that tags are escaped */ public function testEscapeHtml() { $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 ); } + + public function dataIsHex() + { + return [ + 'validHex' => [ + 'input' => '90913473615bf00c122ac78338492980', + 'valid' => true, + ], + 'invalidHex' => [ + 'input' => '90913473615bf00c122ac7833849293', + 'valid' => false, + ], + 'emptyHex' => [ + 'input' => '', + 'valid' => false, + ], + 'nullHex' => [ + 'input' => null, + 'valid' => false, + ], + ]; + } + + /** + * Tests if the string is a valid hexadecimal value + * + * @param string|null $input + * @param bool $valid + * + * @dataProvider dataIsHex + */ + public function testIsHex(string $input = null, bool $valid = false) + { + 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); + } }