| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760 |
- <?php
- namespace Illuminate\Tests\Support;
- use Illuminate\Support\Str;
- use PHPUnit\Framework\TestCase;
- use Ramsey\Uuid\UuidInterface;
- use ReflectionClass;
- class SupportStrTest extends TestCase
- {
- public function testStringCanBeLimitedByWords()
- {
- $this->assertSame('Taylor...', Str::words('Taylor Otwell', 1));
- $this->assertSame('Taylor___', Str::words('Taylor Otwell', 1, '___'));
- $this->assertSame('Taylor Otwell', Str::words('Taylor Otwell', 3));
- }
- public function testStringCanBeLimitedByWordsNonAscii()
- {
- $this->assertSame('这是...', Str::words('这是 段中文', 1));
- $this->assertSame('这是___', Str::words('这是 段中文', 1, '___'));
- $this->assertSame('这是-段中文', Str::words('这是-段中文', 3, '___'));
- $this->assertSame('这是___', Str::words('这是 段中文', 1, '___'));
- }
- public function testStringTrimmedOnlyWhereNecessary()
- {
- $this->assertSame(' Taylor Otwell ', Str::words(' Taylor Otwell ', 3));
- $this->assertSame(' Taylor...', Str::words(' Taylor Otwell ', 1));
- }
- public function testStringTitle()
- {
- $this->assertSame('Jefferson Costella', Str::title('jefferson costella'));
- $this->assertSame('Jefferson Costella', Str::title('jefFErson coSTella'));
- }
- public function testStringHeadline()
- {
- $this->assertSame('Jefferson Costella', Str::headline('jefferson costella'));
- $this->assertSame('Jefferson Costella', Str::headline('jefFErson coSTella'));
- $this->assertSame('Jefferson Costella Uses Laravel', Str::headline('jefferson_costella uses-_Laravel'));
- $this->assertSame('Jefferson Costella Uses Laravel', Str::headline('jefferson_costella uses__Laravel'));
- $this->assertSame('Laravel P H P Framework', Str::headline('laravel_p_h_p_framework'));
- $this->assertSame('Laravel P H P Framework', Str::headline('laravel _p _h _p _framework'));
- $this->assertSame('Laravel Php Framework', Str::headline('laravel_php_framework'));
- $this->assertSame('Laravel Ph P Framework', Str::headline('laravel-phP-framework'));
- $this->assertSame('Laravel Php Framework', Str::headline('laravel -_- php -_- framework '));
- $this->assertSame('Foo Bar', Str::headline('fooBar'));
- $this->assertSame('Foo Bar', Str::headline('foo_bar'));
- $this->assertSame('Foo Bar Baz', Str::headline('foo-barBaz'));
- $this->assertSame('Foo Bar Baz', Str::headline('foo-bar_baz'));
- $this->assertSame('Öffentliche Überraschungen', Str::headline('öffentliche-überraschungen'));
- $this->assertSame('Öffentliche Überraschungen', Str::headline('-_öffentliche_überraschungen_-'));
- $this->assertSame('Öffentliche Überraschungen', Str::headline('-öffentliche überraschungen'));
- $this->assertSame('Sind Öde Und So', Str::headline('sindÖdeUndSo'));
- $this->assertSame('Orwell 1984', Str::headline('orwell 1984'));
- $this->assertSame('Orwell 1984', Str::headline('orwell 1984'));
- $this->assertSame('Orwell 1984', Str::headline('-orwell-1984 -'));
- $this->assertSame('Orwell 1984', Str::headline(' orwell_- 1984 '));
- }
- public function testStringWithoutWordsDoesntProduceError()
- {
- $nbsp = chr(0xC2).chr(0xA0);
- $this->assertSame(' ', Str::words(' '));
- $this->assertEquals($nbsp, Str::words($nbsp));
- }
- public function testStringAscii()
- {
- $this->assertSame('@', Str::ascii('@'));
- $this->assertSame('u', Str::ascii('ü'));
- }
- public function testStringAsciiWithSpecificLocale()
- {
- $this->assertSame('h H sht Sht a A ia yo', Str::ascii('х Х щ Щ ъ Ъ иа йо', 'bg'));
- $this->assertSame('ae oe ue Ae Oe Ue', Str::ascii('ä ö ü Ä Ö Ü', 'de'));
- }
- public function testStartsWith()
- {
- $this->assertTrue(Str::startsWith('jason', 'jas'));
- $this->assertTrue(Str::startsWith('jason', 'jason'));
- $this->assertTrue(Str::startsWith('jason', ['jas']));
- $this->assertTrue(Str::startsWith('jason', ['day', 'jas']));
- $this->assertFalse(Str::startsWith('jason', 'day'));
- $this->assertFalse(Str::startsWith('jason', ['day']));
- $this->assertFalse(Str::startsWith('jason', null));
- $this->assertFalse(Str::startsWith('jason', [null]));
- $this->assertFalse(Str::startsWith('0123', [null]));
- $this->assertTrue(Str::startsWith('0123', 0));
- $this->assertFalse(Str::startsWith('jason', 'J'));
- $this->assertFalse(Str::startsWith('jason', ''));
- $this->assertFalse(Str::startsWith('', ''));
- $this->assertFalse(Str::startsWith('7', ' 7'));
- $this->assertTrue(Str::startsWith('7a', '7'));
- $this->assertTrue(Str::startsWith('7a', 7));
- $this->assertTrue(Str::startsWith('7.12a', 7.12));
- $this->assertFalse(Str::startsWith('7.12a', 7.13));
- $this->assertTrue(Str::startsWith(7.123, '7'));
- $this->assertTrue(Str::startsWith(7.123, '7.12'));
- $this->assertFalse(Str::startsWith(7.123, '7.13'));
- // Test for multibyte string support
- $this->assertTrue(Str::startsWith('Jönköping', 'Jö'));
- $this->assertTrue(Str::startsWith('Malmö', 'Malmö'));
- $this->assertFalse(Str::startsWith('Jönköping', 'Jonko'));
- $this->assertFalse(Str::startsWith('Malmö', 'Malmo'));
- $this->assertTrue(Str::startsWith('你好', '你'));
- $this->assertFalse(Str::startsWith('你好', '好'));
- $this->assertFalse(Str::startsWith('你好', 'a'));
- }
- public function testEndsWith()
- {
- $this->assertTrue(Str::endsWith('jason', 'on'));
- $this->assertTrue(Str::endsWith('jason', 'jason'));
- $this->assertTrue(Str::endsWith('jason', ['on']));
- $this->assertTrue(Str::endsWith('jason', ['no', 'on']));
- $this->assertFalse(Str::endsWith('jason', 'no'));
- $this->assertFalse(Str::endsWith('jason', ['no']));
- $this->assertFalse(Str::endsWith('jason', ''));
- $this->assertFalse(Str::endsWith('', ''));
- $this->assertFalse(Str::endsWith('jason', [null]));
- $this->assertFalse(Str::endsWith('jason', null));
- $this->assertFalse(Str::endsWith('jason', 'N'));
- $this->assertFalse(Str::endsWith('7', ' 7'));
- $this->assertTrue(Str::endsWith('a7', '7'));
- $this->assertTrue(Str::endsWith('a7', 7));
- $this->assertTrue(Str::endsWith('a7.12', 7.12));
- $this->assertFalse(Str::endsWith('a7.12', 7.13));
- $this->assertTrue(Str::endsWith(0.27, '7'));
- $this->assertTrue(Str::endsWith(0.27, '0.27'));
- $this->assertFalse(Str::endsWith(0.27, '8'));
- // Test for multibyte string support
- $this->assertTrue(Str::endsWith('Jönköping', 'öping'));
- $this->assertTrue(Str::endsWith('Malmö', 'mö'));
- $this->assertFalse(Str::endsWith('Jönköping', 'oping'));
- $this->assertFalse(Str::endsWith('Malmö', 'mo'));
- $this->assertTrue(Str::endsWith('你好', '好'));
- $this->assertFalse(Str::endsWith('你好', '你'));
- $this->assertFalse(Str::endsWith('你好', 'a'));
- }
- public function testStrBefore()
- {
- $this->assertSame('han', Str::before('hannah', 'nah'));
- $this->assertSame('ha', Str::before('hannah', 'n'));
- $this->assertSame('ééé ', Str::before('ééé hannah', 'han'));
- $this->assertSame('hannah', Str::before('hannah', 'xxxx'));
- $this->assertSame('hannah', Str::before('hannah', ''));
- $this->assertSame('han', Str::before('han0nah', '0'));
- $this->assertSame('han', Str::before('han0nah', 0));
- $this->assertSame('han', Str::before('han2nah', 2));
- }
- public function testStrBeforeLast()
- {
- $this->assertSame('yve', Str::beforeLast('yvette', 'tte'));
- $this->assertSame('yvet', Str::beforeLast('yvette', 't'));
- $this->assertSame('ééé ', Str::beforeLast('ééé yvette', 'yve'));
- $this->assertSame('', Str::beforeLast('yvette', 'yve'));
- $this->assertSame('yvette', Str::beforeLast('yvette', 'xxxx'));
- $this->assertSame('yvette', Str::beforeLast('yvette', ''));
- $this->assertSame('yv0et', Str::beforeLast('yv0et0te', '0'));
- $this->assertSame('yv0et', Str::beforeLast('yv0et0te', 0));
- $this->assertSame('yv2et', Str::beforeLast('yv2et2te', 2));
- }
- public function testStrBetween()
- {
- $this->assertSame('abc', Str::between('abc', '', 'c'));
- $this->assertSame('abc', Str::between('abc', 'a', ''));
- $this->assertSame('abc', Str::between('abc', '', ''));
- $this->assertSame('b', Str::between('abc', 'a', 'c'));
- $this->assertSame('b', Str::between('dddabc', 'a', 'c'));
- $this->assertSame('b', Str::between('abcddd', 'a', 'c'));
- $this->assertSame('b', Str::between('dddabcddd', 'a', 'c'));
- $this->assertSame('nn', Str::between('hannah', 'ha', 'ah'));
- $this->assertSame('a]ab[b', Str::between('[a]ab[b]', '[', ']'));
- $this->assertSame('foo', Str::between('foofoobar', 'foo', 'bar'));
- $this->assertSame('bar', Str::between('foobarbar', 'foo', 'bar'));
- }
- public function testStrAfter()
- {
- $this->assertSame('nah', Str::after('hannah', 'han'));
- $this->assertSame('nah', Str::after('hannah', 'n'));
- $this->assertSame('nah', Str::after('ééé hannah', 'han'));
- $this->assertSame('hannah', Str::after('hannah', 'xxxx'));
- $this->assertSame('hannah', Str::after('hannah', ''));
- $this->assertSame('nah', Str::after('han0nah', '0'));
- $this->assertSame('nah', Str::after('han0nah', 0));
- $this->assertSame('nah', Str::after('han2nah', 2));
- }
- public function testStrAfterLast()
- {
- $this->assertSame('tte', Str::afterLast('yvette', 'yve'));
- $this->assertSame('e', Str::afterLast('yvette', 't'));
- $this->assertSame('e', Str::afterLast('ééé yvette', 't'));
- $this->assertSame('', Str::afterLast('yvette', 'tte'));
- $this->assertSame('yvette', Str::afterLast('yvette', 'xxxx'));
- $this->assertSame('yvette', Str::afterLast('yvette', ''));
- $this->assertSame('te', Str::afterLast('yv0et0te', '0'));
- $this->assertSame('te', Str::afterLast('yv0et0te', 0));
- $this->assertSame('te', Str::afterLast('yv2et2te', 2));
- $this->assertSame('foo', Str::afterLast('----foo', '---'));
- }
- public function testStrContains()
- {
- $this->assertTrue(Str::contains('taylor', 'ylo'));
- $this->assertTrue(Str::contains('taylor', 'taylor'));
- $this->assertTrue(Str::contains('taylor', ['ylo']));
- $this->assertTrue(Str::contains('taylor', ['xxx', 'ylo']));
- $this->assertFalse(Str::contains('taylor', 'xxx'));
- $this->assertFalse(Str::contains('taylor', ['xxx']));
- $this->assertFalse(Str::contains('taylor', ''));
- $this->assertFalse(Str::contains('', ''));
- }
- public function testStrContainsAll()
- {
- $this->assertTrue(Str::containsAll('taylor otwell', ['taylor', 'otwell']));
- $this->assertTrue(Str::containsAll('taylor otwell', ['taylor']));
- $this->assertFalse(Str::containsAll('taylor otwell', ['taylor', 'xxx']));
- }
- public function testParseCallback()
- {
- $this->assertEquals(['Class', 'method'], Str::parseCallback('Class@method', 'foo'));
- $this->assertEquals(['Class', 'foo'], Str::parseCallback('Class', 'foo'));
- $this->assertEquals(['Class', null], Str::parseCallback('Class'));
- }
- public function testSlug()
- {
- $this->assertSame('hello-world', Str::slug('hello world'));
- $this->assertSame('hello-world', Str::slug('hello-world'));
- $this->assertSame('hello-world', Str::slug('hello_world'));
- $this->assertSame('hello_world', Str::slug('hello_world', '_'));
- $this->assertSame('user-at-host', Str::slug('user@host'));
- $this->assertSame('سلام-دنیا', Str::slug('سلام دنیا', '-', null));
- $this->assertSame('sometext', Str::slug('some text', ''));
- $this->assertSame('', Str::slug('', ''));
- $this->assertSame('', Str::slug(''));
- }
- public function testStrStart()
- {
- $this->assertSame('/test/string', Str::start('test/string', '/'));
- $this->assertSame('/test/string', Str::start('/test/string', '/'));
- $this->assertSame('/test/string', Str::start('//test/string', '/'));
- }
- public function testFlushCache()
- {
- $reflection = new ReflectionClass(Str::class);
- $property = $reflection->getProperty('snakeCache');
- $property->setAccessible(true);
- Str::flushCache();
- $this->assertEmpty($property->getValue());
- Str::snake('Taylor Otwell');
- $this->assertNotEmpty($property->getValue());
- Str::flushCache();
- $this->assertEmpty($property->getValue());
- }
- public function testFinish()
- {
- $this->assertSame('abbc', Str::finish('ab', 'bc'));
- $this->assertSame('abbc', Str::finish('abbcbc', 'bc'));
- $this->assertSame('abcbbc', Str::finish('abcbbcbc', 'bc'));
- }
- public function testIs()
- {
- $this->assertTrue(Str::is('/', '/'));
- $this->assertFalse(Str::is('/', ' /'));
- $this->assertFalse(Str::is('/', '/a'));
- $this->assertTrue(Str::is('foo/*', 'foo/bar/baz'));
- $this->assertTrue(Str::is('*@*', 'App\Class@method'));
- $this->assertTrue(Str::is('*@*', 'app\Class@'));
- $this->assertTrue(Str::is('*@*', '@method'));
- // is case sensitive
- $this->assertFalse(Str::is('*BAZ*', 'foo/bar/baz'));
- $this->assertFalse(Str::is('*FOO*', 'foo/bar/baz'));
- $this->assertFalse(Str::is('A', 'a'));
- // Accepts array of patterns
- $this->assertTrue(Str::is(['a*', 'b*'], 'a/'));
- $this->assertTrue(Str::is(['a*', 'b*'], 'b/'));
- $this->assertFalse(Str::is(['a*', 'b*'], 'f/'));
- // numeric values and patterns
- $this->assertFalse(Str::is(['a*', 'b*'], 123));
- $this->assertTrue(Str::is(['*2*', 'b*'], 11211));
- $this->assertTrue(Str::is('*/foo', 'blah/baz/foo'));
- $valueObject = new StringableObjectStub('foo/bar/baz');
- $patternObject = new StringableObjectStub('foo/*');
- $this->assertTrue(Str::is('foo/bar/baz', $valueObject));
- $this->assertTrue(Str::is($patternObject, $valueObject));
- // empty patterns
- $this->assertFalse(Str::is([], 'test'));
- $this->assertFalse(Str::is('', 0));
- $this->assertFalse(Str::is([null], 0));
- $this->assertTrue(Str::is([null], null));
- }
- /**
- * @dataProvider validUuidList
- */
- public function testIsUuidWithValidUuid($uuid)
- {
- $this->assertTrue(Str::isUuid($uuid));
- }
- /**
- * @dataProvider invalidUuidList
- */
- public function testIsUuidWithInvalidUuid($uuid)
- {
- $this->assertFalse(Str::isUuid($uuid));
- }
- public function testKebab()
- {
- $this->assertSame('laravel-php-framework', Str::kebab('LaravelPhpFramework'));
- }
- public function testLower()
- {
- $this->assertSame('foo bar baz', Str::lower('FOO BAR BAZ'));
- $this->assertSame('foo bar baz', Str::lower('fOo Bar bAz'));
- }
- public function testUpper()
- {
- $this->assertSame('FOO BAR BAZ', Str::upper('foo bar baz'));
- $this->assertSame('FOO BAR BAZ', Str::upper('foO bAr BaZ'));
- }
- public function testLimit()
- {
- $this->assertSame('Laravel is...', Str::limit('Laravel is a free, open source PHP web application framework.', 10));
- $this->assertSame('这是一...', Str::limit('这是一段中文', 6));
- $string = 'The PHP framework for web artisans.';
- $this->assertSame('The PHP...', Str::limit($string, 7));
- $this->assertSame('The PHP', Str::limit($string, 7, ''));
- $this->assertSame('The PHP framework for web artisans.', Str::limit($string, 100));
- $nonAsciiString = '这是一段中文';
- $this->assertSame('这是一...', Str::limit($nonAsciiString, 6));
- $this->assertSame('这是一', Str::limit($nonAsciiString, 6, ''));
- }
- public function testLength()
- {
- $this->assertEquals(11, Str::length('foo bar baz'));
- $this->assertEquals(11, Str::length('foo bar baz', 'UTF-8'));
- }
- public function testRandom()
- {
- $this->assertEquals(16, strlen(Str::random()));
- $randomInteger = random_int(1, 100);
- $this->assertEquals($randomInteger, strlen(Str::random($randomInteger)));
- $this->assertIsString(Str::random());
- }
- public function testReplace()
- {
- $this->assertSame('foo bar laravel', Str::replace('baz', 'laravel', 'foo bar baz'));
- $this->assertSame('foo bar baz 8.x', Str::replace('?', '8.x', 'foo bar baz ?'));
- $this->assertSame('foo/bar/baz', Str::replace(' ', '/', 'foo bar baz'));
- $this->assertSame('foo bar baz', Str::replace(['?1', '?2', '?3'], ['foo', 'bar', 'baz'], '?1 ?2 ?3'));
- }
- public function testReplaceArray()
- {
- $this->assertSame('foo/bar/baz', Str::replaceArray('?', ['foo', 'bar', 'baz'], '?/?/?'));
- $this->assertSame('foo/bar/baz/?', Str::replaceArray('?', ['foo', 'bar', 'baz'], '?/?/?/?'));
- $this->assertSame('foo/bar', Str::replaceArray('?', ['foo', 'bar', 'baz'], '?/?'));
- $this->assertSame('?/?/?', Str::replaceArray('x', ['foo', 'bar', 'baz'], '?/?/?'));
- // Ensure recursive replacements are avoided
- $this->assertSame('foo?/bar/baz', Str::replaceArray('?', ['foo?', 'bar', 'baz'], '?/?/?'));
- // Test for associative array support
- $this->assertSame('foo/bar', Str::replaceArray('?', [1 => 'foo', 2 => 'bar'], '?/?'));
- $this->assertSame('foo/bar', Str::replaceArray('?', ['x' => 'foo', 'y' => 'bar'], '?/?'));
- }
- public function testReplaceFirst()
- {
- $this->assertSame('fooqux foobar', Str::replaceFirst('bar', 'qux', 'foobar foobar'));
- $this->assertSame('foo/qux? foo/bar?', Str::replaceFirst('bar?', 'qux?', 'foo/bar? foo/bar?'));
- $this->assertSame('foo foobar', Str::replaceFirst('bar', '', 'foobar foobar'));
- $this->assertSame('foobar foobar', Str::replaceFirst('xxx', 'yyy', 'foobar foobar'));
- $this->assertSame('foobar foobar', Str::replaceFirst('', 'yyy', 'foobar foobar'));
- // Test for multibyte string support
- $this->assertSame('Jxxxnköping Malmö', Str::replaceFirst('ö', 'xxx', 'Jönköping Malmö'));
- $this->assertSame('Jönköping Malmö', Str::replaceFirst('', 'yyy', 'Jönköping Malmö'));
- }
- public function testReplaceLast()
- {
- $this->assertSame('foobar fooqux', Str::replaceLast('bar', 'qux', 'foobar foobar'));
- $this->assertSame('foo/bar? foo/qux?', Str::replaceLast('bar?', 'qux?', 'foo/bar? foo/bar?'));
- $this->assertSame('foobar foo', Str::replaceLast('bar', '', 'foobar foobar'));
- $this->assertSame('foobar foobar', Str::replaceLast('xxx', 'yyy', 'foobar foobar'));
- $this->assertSame('foobar foobar', Str::replaceLast('', 'yyy', 'foobar foobar'));
- // Test for multibyte string support
- $this->assertSame('Malmö Jönkxxxping', Str::replaceLast('ö', 'xxx', 'Malmö Jönköping'));
- $this->assertSame('Malmö Jönköping', Str::replaceLast('', 'yyy', 'Malmö Jönköping'));
- }
- public function testRemove()
- {
- $this->assertSame('Fbar', Str::remove('o', 'Foobar'));
- $this->assertSame('Foo', Str::remove('bar', 'Foobar'));
- $this->assertSame('oobar', Str::remove('F', 'Foobar'));
- $this->assertSame('Foobar', Str::remove('f', 'Foobar'));
- $this->assertSame('oobar', Str::remove('f', 'Foobar', false));
- $this->assertSame('Fbr', Str::remove(['o', 'a'], 'Foobar'));
- $this->assertSame('Fooar', Str::remove(['f', 'b'], 'Foobar'));
- $this->assertSame('ooar', Str::remove(['f', 'b'], 'Foobar', false));
- $this->assertSame('Foobar', Str::remove(['f', '|'], 'Foo|bar'));
- }
- public function testReverse()
- {
- $this->assertSame('FooBar', Str::reverse('raBooF'));
- $this->assertSame('Teniszütő', Str::reverse('őtüzsineT'));
- $this->assertSame('❤MultiByte☆', Str::reverse('☆etyBitluM❤'));
- }
- public function testSnake()
- {
- $this->assertSame('laravel_p_h_p_framework', Str::snake('LaravelPHPFramework'));
- $this->assertSame('laravel_php_framework', Str::snake('LaravelPhpFramework'));
- $this->assertSame('laravel php framework', Str::snake('LaravelPhpFramework', ' '));
- $this->assertSame('laravel_php_framework', Str::snake('Laravel Php Framework'));
- $this->assertSame('laravel_php_framework', Str::snake('Laravel Php Framework '));
- // ensure cache keys don't overlap
- $this->assertSame('laravel__php__framework', Str::snake('LaravelPhpFramework', '__'));
- $this->assertSame('laravel_php_framework_', Str::snake('LaravelPhpFramework_', '_'));
- $this->assertSame('laravel_php_framework', Str::snake('laravel php Framework'));
- $this->assertSame('laravel_php_frame_work', Str::snake('laravel php FrameWork'));
- // prevent breaking changes
- $this->assertSame('foo-bar', Str::snake('foo-bar'));
- $this->assertSame('foo-_bar', Str::snake('Foo-Bar'));
- $this->assertSame('foo__bar', Str::snake('Foo_Bar'));
- $this->assertSame('żółtałódka', Str::snake('ŻółtaŁódka'));
- }
- public function testStudly()
- {
- $this->assertSame('LaravelPHPFramework', Str::studly('laravel_p_h_p_framework'));
- $this->assertSame('LaravelPhpFramework', Str::studly('laravel_php_framework'));
- $this->assertSame('LaravelPhPFramework', Str::studly('laravel-phP-framework'));
- $this->assertSame('LaravelPhpFramework', Str::studly('laravel -_- php -_- framework '));
- $this->assertSame('FooBar', Str::studly('fooBar'));
- $this->assertSame('FooBar', Str::studly('foo_bar'));
- $this->assertSame('FooBar', Str::studly('foo_bar')); // test cache
- $this->assertSame('FooBarBaz', Str::studly('foo-barBaz'));
- $this->assertSame('FooBarBaz', Str::studly('foo-bar_baz'));
- $this->assertSame('ÖffentlicheÜberraschungen', Str::studly('öffentliche-überraschungen'));
- }
- public function testMask()
- {
- $this->assertSame('tay*************', Str::mask('taylor@email.com', '*', 3));
- $this->assertSame('******@email.com', Str::mask('taylor@email.com', '*', 0, 6));
- $this->assertSame('tay*************', Str::mask('taylor@email.com', '*', -13));
- $this->assertSame('tay***@email.com', Str::mask('taylor@email.com', '*', -13, 3));
- $this->assertSame('****************', Str::mask('taylor@email.com', '*', -17));
- $this->assertSame('*****r@email.com', Str::mask('taylor@email.com', '*', -99, 5));
- $this->assertSame('taylor@email.com', Str::mask('taylor@email.com', '*', 16));
- $this->assertSame('taylor@email.com', Str::mask('taylor@email.com', '*', 16, 99));
- $this->assertSame('taylor@email.com', Str::mask('taylor@email.com', '', 3));
- $this->assertSame('taysssssssssssss', Str::mask('taylor@email.com', 'something', 3));
- $this->assertSame('taysssssssssssss', Str::mask('taylor@email.com', Str::of('something'), 3));
- $this->assertSame('这是一***', Str::mask('这是一段中文', '*', 3));
- $this->assertSame('**一段中文', Str::mask('这是一段中文', '*', 0, 2));
- $this->assertSame('ma*n@email.com', Str::mask('maan@email.com', '*', 2, 1));
- $this->assertSame('ma***email.com', Str::mask('maan@email.com', '*', 2, 3));
- $this->assertSame('ma************', Str::mask('maan@email.com', '*', 2));
- $this->assertSame('mari*@email.com', Str::mask('maria@email.com', '*', 4, 1));
- $this->assertSame('tamar*@email.com', Str::mask('tamara@email.com', '*', 5, 1));
- $this->assertSame('*aria@email.com', Str::mask('maria@email.com', '*', 0, 1));
- $this->assertSame('maria@email.co*', Str::mask('maria@email.com', '*', -1, 1));
- $this->assertSame('maria@email.co*', Str::mask('maria@email.com', '*', -1));
- $this->assertSame('***************', Str::mask('maria@email.com', '*', -15));
- $this->assertSame('***************', Str::mask('maria@email.com', '*', 0));
- }
- public function testMatch()
- {
- $this->assertSame('bar', Str::match('/bar/', 'foo bar'));
- $this->assertSame('bar', Str::match('/foo (.*)/', 'foo bar'));
- $this->assertEmpty(Str::match('/nothing/', 'foo bar'));
- $this->assertEquals(['bar', 'bar'], Str::matchAll('/bar/', 'bar foo bar')->all());
- $this->assertEquals(['un', 'ly'], Str::matchAll('/f(\w*)/', 'bar fun bar fly')->all());
- $this->assertEmpty(Str::matchAll('/nothing/', 'bar fun bar fly'));
- }
- public function testCamel()
- {
- $this->assertSame('laravelPHPFramework', Str::camel('Laravel_p_h_p_framework'));
- $this->assertSame('laravelPhpFramework', Str::camel('Laravel_php_framework'));
- $this->assertSame('laravelPhPFramework', Str::camel('Laravel-phP-framework'));
- $this->assertSame('laravelPhpFramework', Str::camel('Laravel -_- php -_- framework '));
- $this->assertSame('fooBar', Str::camel('FooBar'));
- $this->assertSame('fooBar', Str::camel('foo_bar'));
- $this->assertSame('fooBar', Str::camel('foo_bar')); // test cache
- $this->assertSame('fooBarBaz', Str::camel('Foo-barBaz'));
- $this->assertSame('fooBarBaz', Str::camel('foo-bar_baz'));
- }
- public function testSubstr()
- {
- $this->assertSame('Ё', Str::substr('БГДЖИЛЁ', -1));
- $this->assertSame('ЛЁ', Str::substr('БГДЖИЛЁ', -2));
- $this->assertSame('И', Str::substr('БГДЖИЛЁ', -3, 1));
- $this->assertSame('ДЖИЛ', Str::substr('БГДЖИЛЁ', 2, -1));
- $this->assertEmpty(Str::substr('БГДЖИЛЁ', 4, -4));
- $this->assertSame('ИЛ', Str::substr('БГДЖИЛЁ', -3, -1));
- $this->assertSame('ГДЖИЛЁ', Str::substr('БГДЖИЛЁ', 1));
- $this->assertSame('ГДЖ', Str::substr('БГДЖИЛЁ', 1, 3));
- $this->assertSame('БГДЖ', Str::substr('БГДЖИЛЁ', 0, 4));
- $this->assertSame('Ё', Str::substr('БГДЖИЛЁ', -1, 1));
- $this->assertEmpty(Str::substr('Б', 2));
- }
- public function testSubstrCount()
- {
- $this->assertSame(3, Str::substrCount('laravelPHPFramework', 'a'));
- $this->assertSame(0, Str::substrCount('laravelPHPFramework', 'z'));
- $this->assertSame(1, Str::substrCount('laravelPHPFramework', 'l', 2));
- $this->assertSame(0, Str::substrCount('laravelPHPFramework', 'z', 2));
- $this->assertSame(1, Str::substrCount('laravelPHPFramework', 'k', -1));
- $this->assertSame(1, Str::substrCount('laravelPHPFramework', 'k', -1));
- $this->assertSame(1, Str::substrCount('laravelPHPFramework', 'a', 1, 2));
- $this->assertSame(1, Str::substrCount('laravelPHPFramework', 'a', 1, 2));
- $this->assertSame(3, Str::substrCount('laravelPHPFramework', 'a', 1, -2));
- $this->assertSame(1, Str::substrCount('laravelPHPFramework', 'a', -10, -3));
- }
- public function testSubstrReplace()
- {
- $this->assertSame('12:00', Str::substrReplace('1200', ':', 2, 0));
- $this->assertSame('The Laravel Framework', Str::substrReplace('The Framework', 'Laravel ', 4, 0));
- $this->assertSame('Laravel – The PHP Framework for Web Artisans', Str::substrReplace('Laravel Framework', '– The PHP Framework for Web Artisans', 8));
- }
- public function testUcfirst()
- {
- $this->assertSame('Laravel', Str::ucfirst('laravel'));
- $this->assertSame('Laravel framework', Str::ucfirst('laravel framework'));
- $this->assertSame('Мама', Str::ucfirst('мама'));
- $this->assertSame('Мама мыла раму', Str::ucfirst('мама мыла раму'));
- }
- public function testUcsplit()
- {
- $this->assertSame(['Laravel_p_h_p_framework'], Str::ucsplit('Laravel_p_h_p_framework'));
- $this->assertSame(['Laravel_', 'P_h_p_framework'], Str::ucsplit('Laravel_P_h_p_framework'));
- $this->assertSame(['laravel', 'P', 'H', 'P', 'Framework'], Str::ucsplit('laravelPHPFramework'));
- $this->assertSame(['Laravel-ph', 'P-framework'], Str::ucsplit('Laravel-phP-framework'));
- $this->assertSame(['Żółta', 'Łódka'], Str::ucsplit('ŻółtaŁódka'));
- $this->assertSame(['sind', 'Öde', 'Und', 'So'], Str::ucsplit('sindÖdeUndSo'));
- $this->assertSame(['Öffentliche', 'Überraschungen'], Str::ucsplit('ÖffentlicheÜberraschungen'));
- }
- public function testUuid()
- {
- $this->assertInstanceOf(UuidInterface::class, Str::uuid());
- $this->assertInstanceOf(UuidInterface::class, Str::orderedUuid());
- }
- public function testAsciiNull()
- {
- $this->assertSame('', Str::ascii(null));
- $this->assertTrue(Str::isAscii(null));
- $this->assertSame('', Str::slug(null));
- }
- public function testPadBoth()
- {
- $this->assertSame('__Alien___', Str::padBoth('Alien', 10, '_'));
- $this->assertSame(' Alien ', Str::padBoth('Alien', 10));
- $this->assertSame(' ❤MultiByte☆ ', Str::padBoth('❤MultiByte☆', 16));
- }
- public function testPadLeft()
- {
- $this->assertSame('-=-=-Alien', Str::padLeft('Alien', 10, '-='));
- $this->assertSame(' Alien', Str::padLeft('Alien', 10));
- $this->assertSame(' ❤MultiByte☆', Str::padLeft('❤MultiByte☆', 16));
- }
- public function testPadRight()
- {
- $this->assertSame('Alien-----', Str::padRight('Alien', 10, '-'));
- $this->assertSame('Alien ', Str::padRight('Alien', 10));
- $this->assertSame('❤MultiByte☆ ', Str::padRight('❤MultiByte☆', 16));
- }
- public function testSwapKeywords(): void
- {
- $this->assertSame(
- 'PHP 8 is fantastic',
- Str::swap([
- 'PHP' => 'PHP 8',
- 'awesome' => 'fantastic',
- ], 'PHP is awesome')
- );
- $this->assertSame(
- 'foo bar baz',
- Str::swap([
- 'ⓐⓑ' => 'baz',
- ], 'foo bar ⓐⓑ')
- );
- }
- public function testWordCount()
- {
- $this->assertEquals(2, Str::wordCount('Hello, world!'));
- $this->assertEquals(10, Str::wordCount('Hi, this is my first contribution to the Laravel framework.'));
- }
- public function validUuidList()
- {
- return [
- ['a0a2a2d2-0b87-4a18-83f2-2529882be2de'],
- ['145a1e72-d11d-11e8-a8d5-f2801f1b9fd1'],
- ['00000000-0000-0000-0000-000000000000'],
- ['e60d3f48-95d7-4d8d-aad0-856f29a27da2'],
- ['ff6f8cb0-c57d-11e1-9b21-0800200c9a66'],
- ['ff6f8cb0-c57d-21e1-9b21-0800200c9a66'],
- ['ff6f8cb0-c57d-31e1-9b21-0800200c9a66'],
- ['ff6f8cb0-c57d-41e1-9b21-0800200c9a66'],
- ['ff6f8cb0-c57d-51e1-9b21-0800200c9a66'],
- ['FF6F8CB0-C57D-11E1-9B21-0800200C9A66'],
- ];
- }
- public function invalidUuidList()
- {
- return [
- ['not a valid uuid so we can test this'],
- ['zf6f8cb0-c57d-11e1-9b21-0800200c9a66'],
- ['145a1e72-d11d-11e8-a8d5-f2801f1b9fd1'.PHP_EOL],
- ['145a1e72-d11d-11e8-a8d5-f2801f1b9fd1 '],
- [' 145a1e72-d11d-11e8-a8d5-f2801f1b9fd1'],
- ['145a1e72-d11d-11e8-a8d5-f2z01f1b9fd1'],
- ['3f6f8cb0-c57d-11e1-9b21-0800200c9a6'],
- ['af6f8cb-c57d-11e1-9b21-0800200c9a66'],
- ['af6f8cb0c57d11e19b210800200c9a66'],
- ['ff6f8cb0-c57da-51e1-9b21-0800200c9a66'],
- ];
- }
- public function testMarkdown()
- {
- $this->assertSame("<p><em>hello world</em></p>\n", Str::markdown('*hello world*'));
- $this->assertSame("<h1>hello world</h1>\n", Str::markdown('# hello world'));
- }
- public function testRepeat()
- {
- $this->assertSame('aaaaa', Str::repeat('a', 5));
- $this->assertSame('', Str::repeat('', 5));
- }
- /**
- * @dataProvider specialCharacterProvider
- */
- public function testTransliterate(string $value, string $expected): void
- {
- $this->assertSame($expected, Str::transliterate($value));
- }
- public function specialCharacterProvider(): array
- {
- return [
- ['ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ', 'abcdefghijklmnopqrstuvwxyz'],
- ['⓪①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳', '01234567891011121314151617181920'],
- ['⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾', '12345678910'],
- ['⓿⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴', '011121314151617181920'],
- ['ⓣⓔⓢⓣ@ⓛⓐⓡⓐⓥⓔⓛ.ⓒⓞⓜ', 'test@laravel.com'],
- ['🎂', '?'],
- ['abcdefghijklmnopqrstuvwxyz', 'abcdefghijklmnopqrstuvwxyz'],
- ['0123456789', '0123456789'],
- ];
- }
- public function testTransliterateOverrideUnknown(): void
- {
- $this->assertSame('HHH', Str::transliterate('🎂🚧🏆', 'H'));
- $this->assertSame('Hello', Str::transliterate('🎂', 'Hello'));
- }
- /**
- * @dataProvider specialCharacterProvider
- */
- public function testTransliterateStrict(string $value, string $expected): void
- {
- $this->assertSame($expected, Str::transliterate($value, '?', true));
- }
- }
- class StringableObjectStub
- {
- private $value;
- public function __construct($value)
- {
- $this->value = $value;
- }
- public function __toString()
- {
- return $this->value;
- }
- }
|