WowPress-Tailwind/theme/vendor/planetteamspeak/ts3-php-framework/tests/Helper/StringTest.php

540 lines
16 KiB
PHP

<?php
namespace PlanetTeamSpeak\TeamSpeak3Framework\Tests\Helper;
use Exception;
use PHPUnit\Framework\TestCase;
use PlanetTeamSpeak\TeamSpeak3Framework\Exception\HelperException;
use PlanetTeamSpeak\TeamSpeak3Framework\Helper\StringHelper;
use PlanetTeamSpeak\TeamSpeak3Framework\TeamSpeak3;
class StringTest extends TestCase
{
public function testReplace()
{
$string = new StringHelper("Hello world!");
$string->replace("world", "word");
$this->assertEquals("Hello word!", (string)$string);
$string = new StringHelper("Hello world!");
$string->replace("hello", "Hey", false);
$this->assertEquals("Hey world!", (string)$string);
}
public function testStartsWith()
{
$string = new StringHelper("Hello world!");
$this->assertTrue($string->startsWith("Hello"));
$this->assertFalse($string->startsWith("world"));
}
public function testEndsWith()
{
$string = new StringHelper("Hello world!");
$this->assertTrue($string->endsWith("!"));
$this->assertFalse($string->endsWith("."));
}
public function testFindFirst()
{
$string = new StringHelper("Hello world!");
$this->assertEquals(2, $string->findFirst("l"));
}
public function testFindLast()
{
$string = new StringHelper("Hello world!");
$this->assertEquals(9, $string->findLast("l"));
}
public function testToLower()
{
$string = new StringHelper("Hello world!");
$this->assertEquals("hello world!", $string->toLower());
}
public function testToUpper()
{
$string = new StringHelper("Hello world!");
$this->assertEquals("HELLO WORLD!", $string->toUpper());
}
public function testContains()
{
$string = new StringHelper("Hello world!");
$this->assertTrue($string->contains(""));
$this->assertTrue($string->contains("[a-z]{5}", true));
$this->assertTrue($string->contains("world"));
$this->assertFalse($string->contains("word"));
}
public function testSubstr()
{
$string = new StringHelper("Hello world!");
$this->assertEquals("ello", $string->substr(1, 4));
$this->assertEquals("world", $string->substr(-6, 5));
}
public function testSplit()
{
$string = new StringHelper("Hello world!");
$array = $string->split('l', 3);
$this->assertCount(3, $array);
$this->assertEquals('He', $array[0]);
$this->assertEmpty($array[1]);
}
public function testIsInt()
{
$tests = [
"1" => true,
"+1" => false,
"-1" => false,
"hello" => false,
"1.0" => false,
".1" => false,
// From https://goo.gl/C5v9wT
"0x539" => false,
"0b10100111001" => false,
"1337e0" => false,
"9.1" => false,
];
foreach ($tests as $test => $expected) {
$string = new StringHelper($test);
$this->assertSame($string->isInt(), $expected, "Error by value '$test'");
}
}
public function testFactory()
{
$string = StringHelper::factory("hello world");
$this->assertEquals("hello world", $string->toString());
}
public function testArg()
{
$string = new StringHelper("%h %w");
$string->arg(["w" => "world", "h" => "Hello"]);
$this->assertEquals(
"Hello world",
$string->toString()
);
}
public function testAppend()
{
$string = new StringHelper("Hello world");
$string->append('!');
$this->assertEquals("Hello world!", $string->toString());
}
public function testPrepend()
{
$string = new StringHelper("world!");
$string->prepend("Hello ");
$this->assertEquals("Hello world!", $string->toString());
}
public function testSection()
{
$string = new StringHelper("Hello world!");
$section = $string->section(' ');
$this->assertEquals("Hello", $section->toString());
$section = $string->section(' ', 1, 1);
$this->assertEquals("world!", $section->toString());
$section = $string->section(' ', 0, 1);
$this->assertEquals("Hello world!", $section->toString());
$section = $string->section(' ', 3, 3);
$this->assertNull($section);
}
public function testToCrc32()
{
$string = new StringHelper("Hello world!");
$this->assertEquals(crc32("Hello world!"), $string->toCrc32());
}
public function testToMd5()
{
$string = new StringHelper("Hello world!");
$this->assertEquals(md5("Hello world!"), $string->toMd5());
}
public function testToSha1()
{
$string = new StringHelper("Hello world!");
$this->assertEquals(sha1("Hello world!"), $string->toSha1());
}
public function testIsUtf8()
{
$string = new StringHelper(mb_convert_encoding("Äpfel", 'UTF-8', mb_list_encodings()));
$this->assertTrue($string->isUtf8());
// Well-formed UTF-8 Byte Sequences
// Ref: Unicode (v11.0.0) - §3.9 Unicode Encoding Forms (126, table 3-7)
// https://www.unicode.org/versions/Unicode11.0.0/ch03.pdf#page=55
$unicodeBoundaries = [
// Ignoring first set (ASCII) as isUtf8() does not use it.
//[[0x00],[0x7F]], // U+0000..U+007F
[[0xC2, 0x80], [0xDF, 0xBF]], // U+0080..U+07FF
[[0xE0, 0xA0, 0x80], [0xE0, 0xBF, 0xBF]], // U+0800..U+0FFF
[[0xE1, 0x80, 0x80], [0xEC, 0xBF, 0xBF]], // U+1000..U+CFFF
[[0xED, 0x80, 0x80], [0xED, 0x9F, 0xBF]], // U+D000..U+D7FF
[[0xEE, 0x80, 0x80], [0xEF, 0xBF, 0xBF]], // U+E000..U+FFFF
[[0xF0, 0x90, 0x80, 0x80], [0xF0, 0xEF, 0xBF, 0xBF]], // U+10000..U+3FFFF
[[0xF1, 0x80, 0x80, 0x80], [0xF3, 0xBF, 0xBF, 0xBF]], // U+40000..U+FFFFF
[[0xF4, 0x80, 0x80, 0x80], [0xF4, 0x8F, 0xBF, 0xBF]] // U+100000..U+10FFFF
];
// Lower character precedes lower unicode boundary.
// Upper character follows upper unicode boundary.
$unicodeBoundariesMalformed = [
[[0x80], [0xFF]],
[[0xC2, 0x7F], [0xDF, 0xC0]],
[[0xE0, 0xA0, 0x7F], [0xE0, 0xBF, 0xC0]],
[[0xE1, 0x80, 0x7F], [0xEC, 0xBF, 0xC0]],
[[0xED, 0x80, 0x7F], [0xED, 0x9F, 0xC0]],
[[0xEE, 0x80, 0x7F], [0xEF, 0xBF, 0xC0]],
[[0xF0, 0x90, 0x80, 0x7F], [0xF0, 0xEF, 0xBF, 0xC0]],
[[0xF1, 0x80, 0x80, 0x7F], [0xF3, 0xBF, 0xBF, 0xC0]],
[[0xF4, 0x80, 0x80, 0x7F], [0xF4, 0x8F, 0xBF, 0xC0]]
];
foreach ($unicodeBoundaries as $boundary) {
$lowerUtf8MultibyteChar = new StringHelper(array_reduce(
$boundary[0],
function ($mb_string, $item) {
$mb_string .= chr($item);
return $mb_string;
}
));
$this->assertTrue($lowerUtf8MultibyteChar->isUtf8());
$upperUtf8MultibyteChar = new StringHelper(array_reduce(
$boundary[1],
function ($mb_string, $item) {
//var_dump($item);
$mb_string .= chr($item);
return $mb_string;
}
));
$this->assertTrue($upperUtf8MultibyteChar->isUtf8());
}
foreach ($unicodeBoundariesMalformed as $boundary) {
$lowerUtf8MultibyteChar = new StringHelper(array_reduce(
$boundary[0],
function ($mb_string, $item) {
$mb_string .= chr($item);
return $mb_string;
}
));
$this->assertNotTrue($lowerUtf8MultibyteChar->isUtf8());
$upperUtf8MultibyteChar = new StringHelper(array_reduce(
$boundary[1],
function ($mb_string, $item) {
//var_dump($item);
$mb_string .= chr($item);
return $mb_string;
}
));
$this->assertNotTrue($upperUtf8MultibyteChar->isUtf8());
}
}
public function testToUft8()
{
$notUtf8 = mb_convert_encoding("Äpfel", 'ISO-8859-1', 'UTF-8');
$stringNotUtf8 = new StringHelper($notUtf8);
$this->assertEquals(mb_convert_encoding($notUtf8, 'UTF-8', mb_list_encodings()), $stringNotUtf8->toUtf8()->toString());
$notUtf8 = mb_convert_encoding("", 'ISO-8859-1', 'UTF-8');
$stringNotUtf8 = new StringHelper($notUtf8);
$this->assertEquals(mb_convert_encoding($notUtf8, 'UTF-8', mb_list_encodings()), $stringNotUtf8->toUtf8()->toString());
}
public function testToBase64()
{
$string = new StringHelper("Hello world!");
$this->assertEquals(base64_encode("Hello world!"), $string->toBase64());
}
public function testFromBase64()
{
$string = StringHelper::fromBase64(base64_encode("Hello world!"));
$this->assertEquals("Hello world!", $string->toString());
}
/**
* @throws Exception
*/
public function testToHex()
{
TeamSpeak3::init();
$string = new StringHelper("Hello");
$this->assertEquals("48656C6C6F", $string->toHex());
}
/**
* @throws HelperException
*/
public function testFromHex()
{
$string = StringHelper::fromHex("48656C6C6F");
$this->assertEquals("Hello", $string->toString());
}
public function testTransliterate()
{
$utf8_accents = [
"à" => "a",
"ô" => "o",
"ď" => "d",
"" => "f",
"ë" => "e",
"š" => "s",
"ơ" => "o",
"ß" => "ss",
"ă" => "a",
"ř" => "r",
"ț" => "t",
"ň" => "n",
"ā" => "a",
"ķ" => "k",
"ŝ" => "s",
"" => "y",
"ņ" => "n",
"ĺ" => "l",
"ħ" => "h",
"" => "p",
"ó" => "o",
"ú" => "u",
"ě" => "e",
"é" => "e",
"ç" => "c",
"" => "w",
"ċ" => "c",
"õ" => "o",
"" => "s",
"ø" => "o",
"ģ" => "g",
"ŧ" => "t",
"ș" => "s",
"ė" => "e",
"ĉ" => "c",
"ś" => "s",
"î" => "i",
"ű" => "u",
"ć" => "c",
"ę" => "e",
"ŵ" => "w",
"" => "t",
"ū" => "u",
"č" => "c",
"ö" => "oe",
"è" => "e",
"ŷ" => "y",
"ą" => "a",
"ł" => "l",
"ų" => "u",
"ů" => "u",
"ş" => "s",
"ğ" => "g",
"ļ" => "l",
"ƒ" => "f",
"ž" => "z",
"" => "w",
"" => "b",
"å" => "a",
"ì" => "i",
"ï" => "i",
"" => "d",
"ť" => "t",
"ŗ" => "r",
"ä" => "ae",
"í" => "i",
"ŕ" => "r",
"ê" => "e",
"ü" => "ue",
"ò" => "o",
"ē" => "e",
"ñ" => "n",
"ń" => "n",
"ĥ" => "h",
"ĝ" => "g",
"đ" => "d",
"ĵ" => "j",
"ÿ" => "y",
"ũ" => "u",
"ŭ" => "u",
"ư" => "u",
"ţ" => "t",
"ý" => "y",
"ő" => "o",
"â" => "a",
"ľ" => "l",
"" => "w",
"ż" => "z",
"ī" => "i",
"ã" => "a",
"ġ" => "g",
"" => "m",
"ō" => "o",
"ĩ" => "i",
"ù" => "u",
"į" => "i",
"ź" => "z",
"á" => "a",
"û" => "u",
"þ" => "th",
"ð" => "dh",
"æ" => "ae",
"µ" => "u",
"ĕ" => "e",
"œ" => "oe",
"À" => "A",
"Ô" => "O",
"Ď" => "D",
"" => "F",
"Ë" => "E",
"Š" => "S",
"Ơ" => "O",
"Ă" => "A",
"Ř" => "R",
"Ț" => "T",
"Ň" => "N",
"Ā" => "A",
"Ķ" => "K",
"Ŝ" => "S",
"" => "Y",
"Ņ" => "N",
"Ĺ" => "L",
"Ħ" => "H",
"" => "P",
"Ó" => "O",
"Ú" => "U",
"Ě" => "E",
"É" => "E",
"Ç" => "C",
"" => "W",
"Ċ" => "C",
"Õ" => "O",
"" => "S",
"Ø" => "O",
"Ģ" => "G",
"Ŧ" => "T",
"Ș" => "S",
"Ė" => "E",
"Ĉ" => "C",
"Ś" => "S",
"Î" => "I",
"Ű" => "U",
"Ć" => "C",
"Ę" => "E",
"Ŵ" => "W",
"" => "T",
"Ū" => "U",
"Č" => "C",
"Ö" => "Oe",
"È" => "E",
"Ŷ" => "Y",
"Ą" => "A",
"Ł" => "L",
"Ų" => "U",
"Ů" => "U",
"Ş" => "S",
"Ğ" => "G",
"Ļ" => "L",
"Ƒ" => "F",
"Ž" => "Z",
"" => "W",
"" => "B",
"Å" => "A",
"Ì" => "I",
"Ï" => "I",
"" => "D",
"Ť" => "T",
"Ŗ" => "R",
"Ä" => "Ae",
"Í" => "I",
"Ŕ" => "R",
"Ê" => "E",
"Ü" => "Ue",
"Ò" => "O",
"Ē" => "E",
"Ñ" => "N",
"Ń" => "N",
"Ĥ" => "H",
"Ĝ" => "G",
"Đ" => "D",
"Ĵ" => "J",
"Ÿ" => "Y",
"Ũ" => "U",
"Ŭ" => "U",
"Ư" => "U",
"Ţ" => "T",
"Ý" => "Y",
"Ő" => "O",
"Â" => "A",
"Ľ" => "L",
"" => "W",
"Ż" => "Z",
"Ī" => "I",
"Ã" => "A",
"Ġ" => "G",
"" => "M",
"Ō" => "O",
"Ĩ" => "I",
"Ù" => "U",
"Į" => "I",
"Ź" => "Z",
"Á" => "A",
"Û" => "U",
"Þ" => "Th",
"Ð" => "Dh",
"Æ" => "Ae",
"Ĕ" => "E",
"Œ" => "Oe",
];
$string = "";
$result = "";
foreach ($utf8_accents as $k => $v) {
$string .= $k;
$result .= $v;
}
$string = new StringHelper($string);
$this->assertEquals($result, $string->transliterate()->toString());
}
public function testSpaceToPercent()
{
$string = new StringHelper("Hello world!");
$this->assertEquals("Hello%20world!", $string->spaceToPercent());
}
public function testJsonSerialize()
{
$string = new StringHelper("Hello world!");
$this->assertJsonStringEqualsJsonString(
json_encode(["a" => $string]),
json_encode(["a" => "Hello world!"])
);
}
}