1
0
mirror of https://github.com/danielstjules/Stringy.git synced 2025-08-31 16:51:57 +02:00

61 Commits
1.5.2 ... 1.8.1

Author SHA1 Message Date
Daniel St. Jules
6a7b0391b2 1.8.1 2015-01-08 07:21:43 -08:00
Daniel St. Jules
d6fa00bb1c Conditionally load Stringy\create 2015-01-07 09:09:07 -08:00
Daniel St. Jules
d1452263bd Merge pull request #59 from usernam3/master
Typecast comparison in startsWith/endsWith
2015-01-06 21:42:16 -08:00
Stanislav Dobrovolskiy
9da55d5d4f type cast in startsWith && endsWith, test cases for this behavior 2015-01-07 06:06:53 +02:00
Daniel St. Jules
b515598227 Merge pull request #67 from vlakoff/regex
Remove some useless (and erroneous) regex capturing groups
2015-01-06 16:42:30 -08:00
Daniel St. Jules
28b65615d7 Merge pull request #66 from vlakoff/nbsp
Support for various Unicode spaces in toAscii()
2015-01-06 16:38:55 -08:00
vlakoff
7b88b4f3da Support for various Unicode spaces in toAscii()
* no-break space (U+00A0)
* thin space (U+2009)
* narrow no-break space (U+202F)
* ideographic space (U+3000)
2015-01-07 01:28:49 +01:00
vlakoff
70e5b9c38b Remove some useless (and erroneous) regex capturing groups 2015-01-07 01:24:40 +01:00
vlakoff
e0d50f0b8f Unit tests for no-break space in collapseWhitespace() and isBlank() 2015-01-07 01:10:30 +01:00
Daniel St. Jules
c5365f256f Merge pull request #64 from vlakoff/tests
Add missing tests in StringyTest
2015-01-06 13:42:20 -08:00
Daniel St. Jules
401af084c7 Merge pull request #63 from vlakoff/docblock
Proper Stringy\create() description
2015-01-05 16:37:27 -08:00
vlakoff
773477cdd8 Add missing tests in StringyTest
For consistency with StaticStringyTest.
2015-01-06 00:39:31 +01:00
vlakoff
26444e4429 Proper Stringy\create() description 2015-01-06 00:10:39 +01:00
Daniel St. Jules
f3d32c79b0 Merge pull request #62 from vlakoff/static
Replace self::create() with static::create()
2015-01-05 14:06:06 -08:00
vlakoff
98c1013623 Replace self::create() with static::create()
In case someone wants to extend create().
2015-01-05 23:02:06 +01:00
Daniel St. Jules
91d8da4741 Cleanup toAscii array alignment 2015-01-05 13:55:08 -08:00
Daniel St. Jules
49cdd5b1e6 Merge pull request #61 from vlakoff/toAscii
Add « ä Ä Ö Ü » in toAscii()
2015-01-05 13:38:30 -08:00
vlakoff
2fe42b46a1 Add « ä Ä Ö Ü » in toAscii()
To complete diareses on vowels.
2015-01-05 22:20:22 +01:00
Daniel St. Jules
9baa545f23 Merge pull request #60 from vlakoff/optimize
Optimize chars() by not repeatedly call length()
2015-01-05 12:08:58 -05:00
vlakoff
640fc5b26b Optimize chars() by not repeatedly call length() 2015-01-05 13:49:48 +01:00
Daniel St. Jules
d661047fb3 1.8.0 2015-01-03 22:54:13 -08:00
Daniel St. Jules
26fe399396 Merge pull request #58 from GrahamCampbell/patch-1
Remove duplicate dependencies from autoload-dev
2015-01-03 19:26:38 -05:00
Daniel St. Jules
31c4ba145f Merge pull request #57 from vlakoff/dependency
Add ext-mbstring to composer.json
2015-01-03 19:25:41 -05:00
Graham Campbell
5a1be9bf20 autoload-dev behave the same as require-dev 2015-01-03 22:55:35 +00:00
vlakoff
28c3db01c5 Add ext-mbstring to composer.json 2015-01-03 23:20:21 +01:00
Daniel St. Jules
27ef5a8914 Add Stringy\create function for PHP 5.6 2015-01-01 21:40:48 -08:00
Daniel St. Jules
350d1e6f8e Merge pull request #56 from GrahamCampbell/patch-1
Tweaked the test config
2014-10-26 07:47:54 -07:00
Graham Campbell
ce58c93fc2 Tweaked the test config 2014-10-26 12:44:18 +00:00
Daniel St. Jules
d60422d197 1.7.0 2014-10-14 23:32:13 -07:00
Daniel St. Jules
3cc12c2ee7 Added containsAll and containsAny to readme 2014-10-14 23:25:43 -07:00
Daniel St. Jules
8e16ad472d Add docblocks for str and encoding 2014-10-14 23:14:02 -07:00
Daniel St. Jules
3f926c654a Merge pull request #49 from lucasmichot/factorize-substr
Factorize substr
2014-09-29 08:02:06 -07:00
Daniel St. Jules
f8fc711ae1 Merge pull request #51 from lucasmichot/remove-useless-variable
Remove useless variable
2014-09-29 07:58:45 -07:00
Daniel St. Jules
628c467a67 Merge pull request #48 from lucasmichot/factorize-tidy
Factorize tidy
2014-09-29 07:58:29 -07:00
Daniel St. Jules
24aa843639 Merge pull request #47 from lucasmichot/factorize-humanize
Factorize humanize
2014-09-29 07:43:43 -07:00
Lucas Michot
bb6ea99c52 Remove useless variable 2014-09-29 14:24:02 +02:00
Lucas Michot
d1df244678 Use $this 2014-09-29 14:05:35 +02:00
Lucas Michot
9a929d1860 Simplify substr 2014-09-29 13:48:30 +02:00
Lucas Michot
583789b9e3 Simplify tidy 2014-09-29 13:13:55 +02:00
Lucas Michot
f00e3d5d80 Simplify humanize 2014-09-29 13:08:57 +02:00
Daniel St. Jules
c31e41f57a Merge pull request #45 from GrahamCampbell/cs
CS Fixes
2014-09-27 09:25:57 -07:00
Graham Campbell
722f30d132 CS fixes 2014-09-27 17:23:34 +01:00
Daniel St. Jules
26a0fed52e Merge and fix containsAll 2014-09-27 09:07:37 -07:00
Daniel St. Jules
1c0026ca00 Cleanup containsAny 2014-09-27 08:42:51 -07:00
Lucas Michot
da5ee7057d Add containsAll 2014-09-23 23:51:27 +02:00
Lucas Michot
410ceac663 Add containsAny 2014-09-23 23:48:28 +02:00
Daniel St. Jules
857650f278 Merge pull request #42 from lucasmichot/assertStringy
Add assertStringy shortcut
2014-09-23 14:28:05 -07:00
Lucas Michot
bc11fce93e Add assertStringy shortcut 2014-09-23 22:48:14 +02:00
Daniel St. Jules
fc885d777d Merge pull request #38 from lucasmichot/psr2
Small PSR-2 fixes
2014-09-23 08:49:03 -07:00
Lucas Michot
9d2863b983 Go psr-2 2014-09-23 17:40:58 +02:00
Daniel St. Jules
037184e3d9 Updated intro in README 2014-09-14 23:01:46 -07:00
Daniel St. Jules
8ac1918386 Updated travis ci badge 2014-09-14 11:07:24 -07:00
Daniel St. Jules
7cb6709fd4 Merge pull request #33 from GrahamCampbell/patch-1
Improved the suggested version constraint
2014-09-14 11:05:17 -07:00
Graham Campbell
a663802c2c Improved the suggested version constraint 2014-09-14 19:02:49 +01:00
Daniel St. Jules
7e91d1ead2 1.6.0 2014-09-14 10:58:46 -07:00
Daniel St. Jules
abf3e38c1c Updated logo 2014-09-14 10:49:26 -07:00
Daniel St. Jules
5a5c39d02b Fix readme 2014-09-14 09:49:26 -07:00
Daniel St. Jules
c577684e0a Renamed toTitleCase 2014-09-14 09:27:46 -07:00
Lucas Michot
681463de87 Add casetitle function 2014-09-14 14:16:09 +02:00
Daniel St. Jules
90de5cca00 Merge pull request #29 from GrahamCampbell/patch-1
Update .travis.yml
2014-07-09 22:21:03 -04:00
Graham Campbell
a0b7615210 Update .travis.yml 2014-07-09 18:18:00 +01:00
12 changed files with 616 additions and 155 deletions

View File

@@ -5,6 +5,3 @@ php:
- 5.4
- 5.3
- hhvm
matrix:
fast_finish: true

View File

@@ -1,3 +1,26 @@
### 1.8.1 (2015-01-08)
* Optimized chars()
* Added "ä Ä Ö Ü"" in toAscii()
* Added support for Unicode spaces in toAscii()
* Replaced instances of self::create() with static::create()
* Added missing test cases for safeTruncate() and longestCommonSuffix()
* Updated Stringy\create() to avoid collision when it already exists
### 1.8.0 (2015-01-03)
* Listed ext-mbstring in composer.json
* Added Stringy\create function for PHP 5.6
### 1.7.0 (2014-10-14)
* Added containsAll and containsAny
* Light cleanup
### 1.6.0 (2014-09-14)
* Added toTitleCase
### 1.5.2 (2014-07-09)
* Announced support for HHVM

View File

@@ -1,20 +1,23 @@
![Stringy](http://danielstjules.com/stringy/logo.png)
![Stringy](http://danielstjules.com/github/stringy-logo.png)
A PHP library with a variety of string manipulation functions with multibyte
support. Offers both OO method chaining and a procedural-style static wrapper.
Tested and compatible with PHP 5.3+ and HHVM. Inspired by underscore.string.js.
A PHP string manipulation library with multibyte support. Offers both OO method
chaining and a procedural-style static wrapper. Tested and compatible with
PHP 5.3+ and HHVM. Inspired by underscore.string.js.
[![Build Status](https://travis-ci.org/danielstjules/Stringy.png)](https://travis-ci.org/danielstjules/Stringy)
[![Build Status](https://api.travis-ci.org/danielstjules/Stringy.svg?branch=master)](https://travis-ci.org/danielstjules/Stringy)
* [Requiring/Loading](#requiringloading)
* [OO and Procedural](#oo-and-procedural)
* [Implemented Interfaces](#implemented-interfaces)
* [PHP 5.6 Creation](#php-56-creation)
* [Methods](#methods)
* [at](#at)
* [camelize](#camelize)
* [chars](#chars)
* [collapseWhitespace](#collapsewhitespace)
* [contains](#contains)
* [containsAll](#containsall)
* [containsAny](#containsany)
* [countSubstr](#countsubstr)
* [create](#create)
* [dasherize](#dasherize)
@@ -61,6 +64,7 @@ Tested and compatible with PHP 5.3+ and HHVM. Inspired by underscore.string.js.
* [toLowerCase](#tolowercase)
* [toSpaces](#tospaces)
* [toTabs](#totabs)
* [toTitleCase](#totitlecase)
* [toUpperCase](#touppercase)
* [trim](#trim)
* [truncate](#truncate)
@@ -76,9 +80,13 @@ Tested and compatible with PHP 5.3+ and HHVM. Inspired by underscore.string.js.
If you're using Composer to manage dependencies, you can include the following
in your composer.json file:
```json
{
"require": {
"danielstjules/stringy": ">=1.5.2"
"danielstjules/stringy": "~1.8"
}
}
```
Then, after running `composer update` or `php composer.phar update`, you can
load the class using Composer's autoloading:
@@ -164,6 +172,21 @@ $stringy[3]; // OutOfBoundsException
$stringy[2] = 'a'; // Exception
```
## PHP 5.6 Creation
As of PHP 5.6, [`use function`](https://wiki.php.net/rfc/use_function) is
available for importing functions. Stringy exposes a namespaced function,
`Stringy\create`, which emits the same behaviour as `Stringy\Stringy::create()`.
If running PHP 5.6, or another runtime that supports the `use function` syntax,
you can take advantage of an even simpler API as seen below:
``` php
use function Stringy\create as s;
// Instead of: S::create('Fòô Bàř', 'UTF-8')
s('Fòô Bàř', 'UTF-8')->collapseWhitespace()->swapCase();
```
## Methods
In the list below, any static method other than S::create refers to a method in
@@ -244,6 +267,36 @@ S::create('Ο συγγραφέας είπε', 'UTF-8')->contains('συγγραφ
S::contains('Ο συγγραφέας είπε', 'συγγραφέας', 'UTF-8'); // true
```
#### containsAll
$stringy->containsAll(array $needles [, boolean $caseSensitive = true ])
S::containsAll(string $haystack, array $needles [, boolean $caseSensitive = true [, string $encoding ]])
Returns true if the string contains all $needles, false otherwise. By
default the comparison is case-sensitive, but can be made insensitive by
setting $caseSensitive to false.
```php
S::create('Str contains foo and bar')->containsAll(array('foo', 'bar'));
S::containsAll('Str contains foo and bar', array('foo', 'bar')); // true
```
#### containsAny
$stringy->containsAny(array $needles [, boolean $caseSensitive = true ])
S::containsAny(string $haystack, array $needles [, boolean $caseSensitive = true [, string $encoding ]])
Returns true if the string contains any $needles, false otherwise. By
default the comparison is case-sensitive, but can be made insensitive by
setting $caseSensitive to false.
```php
S::create('Str contains foo')->containsAny(array('foo', 'bar'));
S::containsAny('Str contains foo', array('foo', 'bar')); // true
```
#### countSubstr
$stringy->countSubstr(string $substring [, boolean $caseSensitive = true ])
@@ -881,6 +934,19 @@ S::create(' fòô bàř')->toTabs();
S::toTabs(' fòô bàř'); // ' fòô bàř'
```
#### toTitleCase
$stringy->toTitleCase()
S::toTitleCase(string $str [, string $encoding ])
Converts the first character of each word in the string to uppercase.
```php
S::create('fòô bàř', 'UTF-8')->toTitleCase();
S::toTitleCase('fòô bàř', 'UTF-8'); // 'Fòô Bàř'
```
#### toUpperCase
$stringy->toUpperCase()

View File

@@ -15,10 +15,11 @@
}
],
"require": {
"php": ">=5.3.0"
"php": ">=5.3.0",
"ext-mbstring": "*"
},
"require-dev": {
"phpunit/phpunit": "4.0.*"
"phpunit/phpunit": "~4.0"
},
"support": {
"issues": "https://github.com/danielstjules/Stringy/issues",
@@ -26,6 +27,9 @@
},
"autoload": {
"psr-4": { "Stringy\\": "src/" },
"files": ["src/Create.php"]
},
"autoload-dev": {
"classmap": [ "tests" ]
}
}

View File

@@ -5,7 +5,10 @@
syntaxCheck="false">
<testsuites>
<testsuite name="Stringy">
<directory>tests</directory>
<file>tests/CommonTest.php</file>
<file>tests/StringyTest.php</file>
<file>tests/StaticStringyTest.php</file>
<file phpVersion="5.6.0">tests/CreateTest.php</file>
</testsuite>
</testsuites>
</phpunit>

19
src/Create.php Normal file
View File

@@ -0,0 +1,19 @@
<?php
namespace Stringy;
if (!function_exists('Stringy\create')) {
/**
* Creates a Stringy object and returns it on success.
*
* @param mixed $str Value to modify, after being cast to string
* @param string $encoding The character encoding
* @return Stringy A Stringy object
* @throws \InvalidArgumentException if an array or object without a
* __toString method is passed as the first argument
*/
function create($str, $encoding = null)
{
return new Stringy($str, $encoding);
}
}

View File

@@ -323,6 +323,18 @@ class StaticStringy
return (string) Stringy::create($str, $encoding)->toLowerCase();
}
/**
* Converts the first character of each word in the string to uppercase.
*
* @param string $str String to convert case
* @param string $encoding The character encoding
* @return string The title-cased string
*/
public static function toTitleCase($str, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->toTitleCase();
}
/**
* Converts all characters in the string to uppercase. An alias for PHP's
* mb_strtoupper().
@@ -370,6 +382,42 @@ class StaticStringy
->contains($needle, $caseSensitive);
}
/**
* Returns true if the string contains any $needles, false otherwise. By
* default, the comparison is case-sensitive, but can be made insensitive
* by setting $caseSensitive to false.
*
* @param string $haystack String being checked
* @param array $needles Substrings to look for
* @param bool $caseSensitive Whether or not to enforce case-sensitivity
* @param string $encoding The character encoding
* @return bool Whether or not $haystack contains any $needles
*/
public static function containsAny($haystack, $needles,
$caseSensitive = true, $encoding = null)
{
return Stringy::create($haystack, $encoding)
->containsAny($needles, $caseSensitive);
}
/**
* Returns true if the string contains all $needles, false otherwise. By
* default, the comparison is case-sensitive, but can be made insensitive
* by setting $caseSensitive to false.
*
* @param string $haystack String being checked
* @param array $needles Substrings to look for
* @param bool $caseSensitive Whether or not to enforce case-sensitivity
* @param string $encoding The character encoding
* @return bool Whether or not $haystack contains all $needles
*/
public static function containsAll($haystack, $needles,
$caseSensitive = true, $encoding = null)
{
return Stringy::create($haystack, $encoding)
->containsAll($needles, $caseSensitive);
}
/**
* Surrounds a string with the given substring.
*
@@ -428,7 +476,7 @@ class StaticStringy
* @return string The resulting string after truncating
*/
public static function safeTruncate($str, $length, $substring = '',
$encoding = null)
$encoding = null)
{
return (string) Stringy::create($str, $encoding)
->safeTruncate($length, $substring);

View File

@@ -4,8 +4,19 @@ namespace Stringy;
class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
{
/**
* An instance's string.
*
* @var string
*/
protected $str;
/**
* The string's encoding, which should be one of the mbstring module's
* supported encodings.
*
* @var string
*/
protected $encoding;
/**
@@ -26,7 +37,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
throw new \InvalidArgumentException(
'Passed value cannot be an array'
);
} else if (is_object($str) && !method_exists($str, '__toString')) {
} elseif (is_object($str) && !method_exists($str, '__toString')) {
throw new \InvalidArgumentException(
'Passed object must have a __toString method'
);
@@ -105,7 +116,8 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
* @param mixed $offset The index to check
* @return boolean Whether or not the index exists
*/
public function offsetExists($offset) {
public function offsetExists($offset)
{
$length = $this->length();
$offset = (int) $offset;
@@ -127,7 +139,8 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
* @throws \OutOfBoundsException If the positive or negative offset does
* not exist
*/
public function offsetGet($offset) {
public function offsetGet($offset)
{
$offset = (int) $offset;
$length = $this->length();
@@ -146,7 +159,8 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
* @param mixed $value Value to set
* @throws \Exception When called
*/
public function offsetSet($offset, $value) {
public function offsetSet($offset, $value)
{
// Stringy is immutable, cannot directly set char
throw new \Exception('Stringy object is immutable, cannot modify char');
}
@@ -158,7 +172,8 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
* @param mixed $offset The index of the character
* @throws \Exception When called
*/
public function offsetUnset($offset) {
public function offsetUnset($offset)
{
// Don't allow directly modifying the string
throw new \Exception('Stringy object is immutable, cannot unset char');
}
@@ -171,7 +186,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
public function chars()
{
$chars = array();
for ($i = 0; $i < $this->length(); $i++) {
for ($i = 0, $l = $this->length(); $i < $l; $i++) {
$chars[] = $this->at($i)->str;
}
@@ -191,7 +206,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$str = mb_strtoupper($first, $this->encoding) . $rest;
return self::create($str, $this->encoding);
return static::create($str, $this->encoding);
}
/**
@@ -207,7 +222,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$str = mb_strtolower($first, $this->encoding) . $rest;
return self::create($str, $this->encoding);
return static::create($str, $this->encoding);
}
/**
@@ -220,11 +235,11 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
public function camelize()
{
$encoding = $this->encoding;
$stringy = self::create($this->str, $this->encoding);
$stringy = static::create($this->str, $this->encoding);
$camelCase = preg_replace_callback(
'/[-_\s]+(.)?/u',
function($match) use ($encoding) {
function ($match) use ($encoding) {
return $match[1] ? mb_strtoupper($match[1], $encoding) : '';
},
$stringy->trim()->lowerCaseFirst()->str
@@ -232,7 +247,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$stringy->str = preg_replace_callback(
'/[\d]+(.)?/u',
function($match) use ($encoding) {
function ($match) use ($encoding) {
return mb_strtoupper($match[0], $encoding);
},
$camelCase
@@ -296,7 +311,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
mb_regex_encoding($regexEncoding);
return self::create($str, $this->encoding);
return static::create($str, $this->encoding);
}
/**
@@ -306,7 +321,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function swapCase()
{
$stringy = self::create($this->str, $this->encoding);
$stringy = static::create($this->str, $this->encoding);
$encoding = $stringy->encoding;
$stringy->str = preg_replace_callback(
@@ -361,10 +376,9 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function humanize()
{
$str = str_replace('_id', '', $this->str);
$str = str_replace('_', ' ', $str);
$str = str_replace(array('_id', '_'), array('', ' '), $this->str);
return self::create($str, $this->encoding)->trim()->upperCaseFirst();
return static::create($str, $this->encoding)->trim()->upperCaseFirst();
}
/**
@@ -376,13 +390,19 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function tidy()
{
$str = $this->str;
$str = preg_replace('/\x{2026}/u', '...', $str);
$str = preg_replace('/[\x{201C}\x{201D}]/u', '"', $str);
$str = preg_replace('/[\x{2018}\x{2019}]/u', "'", $str);
$str = preg_replace('/[\x{2013}\x{2014}]/u', '-', $str);
$str = preg_replace(array(
'/\x{2026}/u',
'/[\x{201C}\x{201D}]/u',
'/[\x{2018}\x{2019}]/u',
'/[\x{2013}\x{2014}]/u',
), array(
'...',
'"',
"'",
'-',
), $this->str);
return self::create($str, $this->encoding);
return static::create($str, $this->encoding);
}
/**
@@ -407,33 +427,37 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
{
$str = $this->str;
$charsArray = array(
'a' => array('à', 'á', 'â', 'ã', 'ā', 'ą', 'ă', 'å', 'α', 'ά', 'ἀ',
'ἁ', 'ἂ', 'ἃ', 'ἄ', 'ἅ', 'ἆ', 'ἇ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ',
'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ὰ', 'ά', 'ᾰ', 'ᾱ', 'ᾲ', 'ᾳ', 'ᾴ',
'ᾶ', 'ᾷ', 'а'),
'a' => array('à', 'á', 'â', 'ä', 'ã', 'ā', 'ą', 'ă', 'å', 'α',
'ά', 'ἀ', 'ἁ', 'ἂ', 'ἃ', 'ἄ', 'ἅ', 'ἆ', 'ἇ', 'ᾀ',
'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ὰ', 'ά', 'ᾰ',
'ᾱ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'а'),
'b' => array('б', 'β'),
'c' => array('ç', 'ć', 'č', 'ĉ', 'ċ'),
'd' => array('ď', 'ð', 'đ', 'ƌ', 'ȡ', 'ɖ', 'ɗ', 'ᵭ', 'ᶁ', 'ᶑ', 'д'),
'e' => array('è', 'é', 'ê', 'ë', 'ē', 'ę', 'ě', 'ĕ', 'ė', 'ε', 'έ',
'ἐ', 'ἑ', '', '', '', '', '', 'έ', 'е', 'ё', 'э', 'є'),
'd' => array('ď', 'ð', 'đ', 'ƌ', 'ȡ', 'ɖ', 'ɗ', 'ᵭ', 'ᶁ', 'ᶑ',
'д'),
'e' => array('è', 'é', 'ê', 'ë', 'ē', 'ę', 'ě', 'ĕ', 'ė', 'ε',
'έ', 'ἐ', 'ἑ', 'ἒ', 'ἓ', 'ἔ', 'ἕ', 'ὲ', 'έ', 'е',
'ё', 'э', 'є'),
'f' => array('ф'),
'g' => array('ĝ', 'ğ', 'ġ', 'ģ', 'г', 'ґ'),
'h' => array('ĥ', 'ħ'),
'i' => array('ì', 'í', 'î', 'ï', 'ī', 'ĩ', 'ĭ', 'į', 'ı', 'ι', 'ί',
'ϊ', 'ΐ', 'ἰ', 'ἱ', 'ἲ', 'ἳ', 'ἴ', 'ἵ', 'ἶ', 'ἷ', 'ὶ',
'ί', 'ῐ', 'ῑ', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'і', 'ї', 'и'),
'i' => array('ì', 'í', 'î', 'ï', 'ī', 'ĩ', 'ĭ', 'į', 'ı', 'ι',
'ί', 'ϊ', 'ΐ', 'ἰ', 'ἱ', 'ἲ', 'ἳ', 'ἴ', 'ἵ', 'ἶ',
'ἷ', 'ὶ', 'ί', 'ῐ', 'ῑ', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'і',
'ї', 'и'),
'j' => array('ĵ'),
'k' => array('ķ', 'ĸ', 'к'),
'l' => array('ł', 'ľ', 'ĺ', 'ļ', 'ŀ', 'л'),
'm' => array('м'),
'n' => array('ñ', 'ń', 'ň', 'ņ', 'ʼn', 'ŋ', 'ν', 'н'),
'o' => array('ò', 'ó', 'ô', 'õ', 'ø', 'ō', 'ő', 'ŏ', 'ο', 'ό', 'ὀ',
'ὁ', 'ὂ', 'ὃ', 'ὄ', 'ὅ', 'ὸ', 'ό', 'ö', 'о'),
'o' => array('ò', 'ó', 'ô', 'õ', 'ø', 'ō', 'ő', 'ŏ', 'ο', 'ό',
'ὀ', 'ὁ', 'ὂ', 'ὃ', 'ὄ', 'ὅ', 'ὸ', 'ό', 'ö', 'о'),
'p' => array('п'),
'r' => array('ŕ', 'ř', 'ŗ', 'р'),
's' => array('ś', 'š', 'ş', 'с'),
't' => array('ť', 'ţ', 'т'),
'u' => array('ü', 'ù', 'ú', 'û', 'ū', 'ů', 'ű', 'ŭ', 'ũ', 'ų', 'µ', 'у'),
'u' => array('ü', 'ù', 'ú', 'û', 'ū', 'ů', 'ű', 'ŭ', 'ũ', 'ų',
'µ', 'у'),
'v' => array('в'),
'w' => array('ŵ'),
'y' => array('ÿ', 'ý', 'ŷ', 'й', 'ы'),
@@ -447,30 +471,33 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
'ya' => array('я'),
'yu' => array('ю'),
'zh' => array('ж'),
'A' => array('Á', 'Â', 'Ã', 'Å', 'Ā', 'Ą', 'Ă', 'Α', 'Ά', 'Ἀ', 'Ἁ',
'Ἂ', 'Ἃ', 'Ἄ', 'Ἅ', 'Ἆ', 'Ἇ', 'ᾈ', 'ᾉ', 'ᾊ', 'ᾋ', 'ᾌ',
'ᾍ', 'ᾎ', 'ᾏ', 'Ᾰ', 'Ᾱ', 'Ὰ', 'Ά', 'ᾼ', 'А'),
'A' => array('Á', 'Â', 'Ä', 'Ã', 'Å', 'Ā', 'Ą', 'Ă', 'Α', 'Ά',
'Ἀ', 'Ἁ', 'Ἂ', 'Ἃ', 'Ἄ', 'Ἅ', 'Ἆ', 'Ἇ', 'ᾈ', 'ᾉ',
'ᾊ', 'ᾋ', 'ᾌ', 'ᾍ', 'ᾎ', 'ᾏ', 'Ᾰ', 'Ᾱ', 'Ὰ', 'Ά',
'ᾼ', 'А'),
'B' => array('Б'),
'C' => array('Ć', 'Č', 'Ĉ', 'Ċ'),
'D' => array('Ď', 'Ð', 'Đ', 'Ɖ', 'Ɗ', 'Ƌ', 'ᴅ', 'ᴆ', 'Д'),
'E' => array('É', 'Ê', 'Ë', 'Ē', 'Ę', 'Ě', 'Ĕ', 'Ė', 'Ε', 'Έ', 'Ἐ',
'Ἑ', 'Ἒ', 'Ἓ', 'Ἔ', 'Ἕ', 'Έ', 'Ὲ', 'Е', 'Ё', 'Э', 'Є'),
'E' => array('É', 'Ê', 'Ë', 'Ē', 'Ę', 'Ě', 'Ĕ', 'Ė', 'Ε', 'Έ',
'Ἐ', 'Ἑ', 'Ἒ', 'Ἓ', 'Ἔ', 'Ἕ', 'Έ', 'Ὲ', 'Е', 'Ё',
'Э', 'Є'),
'F' => array('Ф'),
'G' => array('Ğ', 'Ġ', 'Ģ', 'Г', 'Ґ'),
'I' => array('Í', 'Î', 'Ï', 'Ī', 'Ĩ', 'Ĭ', 'Į', 'İ', 'Ι', 'Ί', 'Ϊ',
'Ἰ', 'Ἱ', 'Ἳ', 'Ἴ', 'Ἵ', 'Ἶ', 'Ἷ', 'Ῐ', 'Ῑ', 'Ὶ', 'Ί',
'И', 'І', 'Ї'),
'I' => array('Í', 'Î', 'Ï', 'Ī', 'Ĩ', 'Ĭ', 'Į', 'İ', 'Ι', 'Ί',
'Ϊ', 'Ἰ', 'Ἱ', 'Ἳ', 'Ἴ', 'Ἵ', 'Ἶ', 'Ἷ', 'Ῐ', 'Ῑ',
'Ὶ', 'Ί', 'И', 'І', 'Ї'),
'K' => array('К'),
'L' => array('Ĺ', 'Ł', 'Л'),
'M' => array('М'),
'N' => array('Ń', 'Ñ', 'Ň', 'Ņ', 'Ŋ', 'Н'),
'O' => array('Ó', 'Ô', 'Õ', 'Ø', 'Ō', 'Ő', 'Ŏ', 'Ο', 'Ό', 'Ὀ', 'Ὁ',
'Ὂ', 'Ὃ', 'Ὄ', 'Ὅ', 'Ὸ', 'Ό', 'О'),
'O' => array('Ó', 'Ô', 'Ö', 'Õ', 'Ø', 'Ō', 'Ő', 'Ŏ', 'Ο', 'Ό',
'Ὀ', 'Ὁ', 'Ὂ', 'Ὃ', 'Ὄ', 'Ὅ', 'Ὸ', 'Ό', 'О'),
'P' => array('П'),
'R' => array('Ř', 'Ŕ', 'Р'),
'S' => array('Ş', 'Ŝ', 'Ș', 'Š', 'Ś', 'С'),
'T' => array('Ť', 'Ţ', 'Ŧ', 'Ț', 'Т'),
'U' => array('Ù', 'Ú', 'Û', 'Ū', 'Ů', 'Ű', 'Ŭ', 'Ũ', 'Ų', 'У'),
'U' => array('Ù', 'Ú', 'Û', 'Ü', 'Ū', 'Ů', 'Ű', 'Ŭ', 'Ũ', 'Ų',
'У'),
'V' => array('В'),
'Y' => array('Ý', 'Ÿ', 'Ῠ', 'Ῡ', 'Ὺ', 'Ύ', 'Ы', 'Й'),
'Z' => array('Ź', 'Ž', 'Ż', 'З'),
@@ -481,7 +508,9 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
'TS' => array('Ц'),
'YA' => array('Я'),
'YU' => array('Ю'),
'ZH' => array('Ж')
'ZH' => array('Ж'),
' ' => array("\xC2\xA0", "\xE2\x80\x89", "\xE2\x80\xAF",
"\xE3\x80\x80"),
);
foreach ($charsArray as $key => $value) {
@@ -490,7 +519,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$str = preg_replace('/[^\x20-\x7E]/u', '', $str);
return self::create($str, $this->encoding);
return static::create($str, $this->encoding);
}
/**
@@ -577,7 +606,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
private function applyPadding($left = 0, $right = 0, $padStr = ' ')
{
$stringy = self::create($this->str, $this->encoding);
$stringy = static::create($this->str, $this->encoding);
$length = mb_strlen($padStr, $stringy->encoding);
$strLength = $stringy->length();
@@ -617,7 +646,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$startOfStr = mb_strtolower($startOfStr, $this->encoding);
}
return $substring === $startOfStr;
return (string) $substring === $startOfStr;
}
/**
@@ -642,7 +671,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$endOfStr = mb_strtolower($endOfStr, $this->encoding);
}
return $substring === $endOfStr;
return (string) $substring === $endOfStr;
}
/**
@@ -657,7 +686,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$spaces = str_repeat(' ', $tabLength);
$str = str_replace("\t", $spaces, $this->str);
return self::create($str, $this->encoding);
return static::create($str, $this->encoding);
}
/**
@@ -673,7 +702,19 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$spaces = str_repeat(' ', $tabLength);
$str = str_replace($spaces, "\t", $this->str);
return self::create($str, $this->encoding);
return static::create($str, $this->encoding);
}
/**
* Converts the first character of each word in the string to uppercase.
*
* @return Stringy Object with all characters of $str being title-cased
*/
public function toTitleCase()
{
$str = mb_convert_case($this->str, MB_CASE_TITLE, $this->encoding);
return static::create($str, $this->encoding);
}
/**
@@ -686,7 +727,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
{
$str = mb_strtolower($this->str, $this->encoding);
return self::create($str, $this->encoding);
return static::create($str, $this->encoding);
}
/**
@@ -699,7 +740,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
{
$str = mb_strtoupper($this->str, $this->encoding);
return self::create($str, $this->encoding);
return static::create($str, $this->encoding);
}
/**
@@ -714,7 +755,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function slugify($replacement = '-')
{
$stringy = self::create($this->str, $this->encoding);
$stringy = static::create($this->str, $this->encoding);
$quotedReplacement = preg_quote($replacement);
$pattern = "/[^a-zA-Z\d\s-_$quotedReplacement]/u";
@@ -744,6 +785,54 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
}
}
/**
* Returns true if the string contains any $needles, false otherwise. By
* default the comparison is case-sensitive, but can be made insensitive by
* setting $caseSensitive to false.
*
* @param array $needles Substrings to look for
* @param bool $caseSensitive Whether or not to enforce case-sensitivity
* @return bool Whether or not $str contains $needle
*/
public function containsAny($needles, $caseSensitive = true)
{
if (empty($needles)) {
return false;
}
foreach ($needles as $needle) {
if ($this->contains($needle, $caseSensitive)) {
return true;
}
}
return false;
}
/**
* Returns true if the string contains all $needles, false otherwise. By
* default the comparison is case-sensitive, but can be made insensitive by
* setting $caseSensitive to false.
*
* @param array $needles Substrings to look for
* @param bool $caseSensitive Whether or not to enforce case-sensitivity
* @return bool Whether or not $str contains $needle
*/
public function containsAll($needles, $caseSensitive = true)
{
if (empty($needles)) {
return false;
}
foreach ($needles as $needle) {
if (!$this->contains($needle, $caseSensitive)) {
return false;
}
}
return true;
}
/**
* Surrounds $str with the given substring.
*
@@ -754,7 +843,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
{
$str = implode('', array($substring, $this->str, $substring));
return self::create($str, $this->encoding);
return static::create($str, $this->encoding);
}
/**
@@ -766,7 +855,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function insert($substring, $index)
{
$stringy = self::create($this->str, $this->encoding);
$stringy = static::create($this->str, $this->encoding);
if ($index > $stringy->length()) {
return $stringy;
}
@@ -791,7 +880,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function truncate($length, $substring = '')
{
$stringy = self::create($this->str, $this->encoding);
$stringy = static::create($this->str, $this->encoding);
if ($length >= $stringy->length()) {
return $stringy;
}
@@ -818,7 +907,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function safeTruncate($length, $substring = '')
{
$stringy = self::create($this->str, $this->encoding);
$stringy = static::create($this->str, $this->encoding);
if ($length >= $stringy->length()) {
return $stringy;
}
@@ -857,7 +946,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$reversed .= mb_substr($this->str, $i, 1, $this->encoding);
}
return self::create($reversed, $this->encoding);
return static::create($reversed, $this->encoding);
}
/**
@@ -876,7 +965,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$shuffledStr .= mb_substr($this->str, $i, 1, $this->encoding);
}
return self::create($shuffledStr, $this->encoding);
return static::create($shuffledStr, $this->encoding);
}
/**
@@ -886,7 +975,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function trim()
{
return self::create(trim($this->str), $this->encoding);
return static::create(trim($this->str), $this->encoding);
}
/**
@@ -911,7 +1000,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
}
}
return self::create($longestCommonPrefix, $encoding);
return static::create($longestCommonPrefix, $encoding);
}
/**
@@ -936,7 +1025,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
}
}
return self::create($longestCommonSuffix, $encoding);
return static::create($longestCommonSuffix, $encoding);
}
/**
@@ -951,7 +1040,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
// Uses dynamic programming to solve
// http://en.wikipedia.org/wiki/Longest_common_substring_problem
$encoding = $this->encoding;
$stringy = self::create($this->str, $encoding);
$stringy = static::create($this->str, $encoding);
$strLength = $stringy->length();
$otherLength = mb_strlen($otherStr, $encoding);
@@ -965,8 +1054,8 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$end = 0;
$table = array_fill(0, $strLength + 1, array_fill(0, $otherLength + 1, 0));
for ($i = 1; $i <= $strLength; $i++){
for ($j = 1; $j <= $otherLength; $j++){
for ($i = 1; $i <= $strLength; $i++) {
for ($j = 1; $j <= $otherLength; $j++) {
$strChar = mb_substr($stringy->str, $i - 1, 1, $encoding);
$otherChar = mb_substr($otherStr, $j - 1, 1, $encoding);
@@ -1008,17 +1097,10 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function substr($start, $length = null)
{
$stringy = self::create($this->str, $this->encoding);
$length = $length === null ? $this->length() : $length;
$str = mb_substr($this->str, $start, $length, $this->encoding);
if ($length === null) {
$stringy->str = mb_substr($stringy->str, $start,
$stringy->length() - $start, $this->encoding);
} else {
$stringy->str = mb_substr($stringy->str, $start, $length,
$stringy->encoding);
}
return $stringy;
return static::create($str, $this->encoding);
}
/**
@@ -1040,7 +1122,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function first($n)
{
$stringy = self::create($this->str, $this->encoding);
$stringy = static::create($this->str, $this->encoding);
if ($n < 0) {
$stringy->str = '';
@@ -1059,7 +1141,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function last($n)
{
$stringy = self::create($this->str, $this->encoding);
$stringy = static::create($this->str, $this->encoding);
if ($n <= 0) {
$stringy->str = '';
@@ -1079,7 +1161,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function ensureLeft($substring)
{
$stringy = self::create($this->str, $this->encoding);
$stringy = static::create($this->str, $this->encoding);
if (!$stringy->startsWith($substring)) {
$stringy->str = $substring . $stringy->str;
@@ -1097,7 +1179,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function ensureRight($substring)
{
$stringy = self::create($this->str, $this->encoding);
$stringy = static::create($this->str, $this->encoding);
if (!$stringy->endsWith($substring)) {
$stringy->str .= $substring;
@@ -1114,7 +1196,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function removeLeft($substring)
{
$stringy = self::create($this->str, $this->encoding);
$stringy = static::create($this->str, $this->encoding);
if ($stringy->startsWith($substring)) {
$substringLength = mb_strlen($substring, $stringy->encoding);
@@ -1132,7 +1214,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function removeRight($substring)
{
$stringy = self::create($this->str, $this->encoding);
$stringy = static::create($this->str, $this->encoding);
if ($stringy->endsWith($substring)) {
$substringLength = mb_strlen($substring, $stringy->encoding);
@@ -1167,7 +1249,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function isAlpha()
{
return $this->matchesPattern('^([[:alpha:]])*$');
return $this->matchesPattern('^[[:alpha:]]*$');
}
/**
@@ -1178,7 +1260,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function isAlphanumeric()
{
return $this->matchesPattern('^([[:alnum:]])*$');
return $this->matchesPattern('^[[:alnum:]]*$');
}
/**
@@ -1189,7 +1271,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function isHexadecimal()
{
return $this->matchesPattern('^([[:xdigit:]])*$');
return $this->matchesPattern('^[[:xdigit:]]*$');
}
/**
@@ -1200,7 +1282,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function isBlank()
{
return $this->matchesPattern('^([[:space:]])*$');
return $this->matchesPattern('^[[:space:]]*$');
}
/**
@@ -1215,7 +1297,6 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
return (json_last_error() === JSON_ERROR_NONE);
}
/**
* Returns true if the string contains only lower case chars, false
* otherwise.
@@ -1224,7 +1305,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function isLowerCase()
{
return $this->matchesPattern('^([[:lower:]])*$');
return $this->matchesPattern('^[[:lower:]]*$');
}
/**
@@ -1235,7 +1316,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function isUpperCase()
{
return $this->matchesPattern('^([[:upper:]])*$');
return $this->matchesPattern('^[[:upper:]]*$');
}
/**
@@ -1300,6 +1381,6 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$str = mb_ereg_replace($pattern, $replacement, $this->str, $options);
mb_regex_encoding($regexEncoding);
return self::create($str, $this->encoding);
return static::create($str, $this->encoding);
}
}

View File

@@ -1,7 +1,19 @@
<?php
use Stringy\Stringy;
abstract class CommonTest extends PHPUnit_Framework_TestCase
{
/**
* Asserts that a variable is of a Stringy instance.
*
* @param mixed $actual
*/
public function assertStringy($actual)
{
$this->assertInstanceOf('Stringy\Stringy', $actual);
}
public function charsProvider()
{
return array(
@@ -162,6 +174,7 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
array('test string', 'test string'),
array('Ο συγγραφέας', ' Ο συγγραφέας '),
array('123', ' 123 '),
array('', ' ', 'UTF-8'), // no-break space
array('1 2 3', '  1  2  3  ', 'UTF-8'), // ideographic spaces
array('', ' ', 'UTF-8'), // thin space and space
array('', ' '),
@@ -178,7 +191,10 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
array('perevirka', 'перевірка'),
array('lysaya gora', 'лысая гора'),
array('shchuka', 'щука'),
array('', '漢字')
array('', '漢字'),
array(' ', ' '), // no-break space
array(' 1 2 3 ', '  1  2  3  '), // ideographic spaces
array(' ', ' '), // thin space and space
);
}
@@ -318,6 +334,17 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
);
}
public function toTitleCaseProvider()
{
return array(
array('Foo Bar', 'foo bar'),
array(' Foo_Bar ', ' foo_bar '),
array('Fòô Bàř', 'fòô bàř', 'UTF-8'),
array(' Fòô_Bàř ', ' fòô_bàř ', 'UTF-8'),
array('Αυτοκίνητο Αυτοκίνητο', 'αυτοκίνητο αυτοκίνητο', 'UTF-8'),
);
}
public function toUpperCaseProvider()
{
return array(
@@ -354,30 +381,106 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
public function containsProvider()
{
return array(
array(true, 'This string contains foo bar', 'foo bar'),
array(true, 'Str contains foo bar', 'foo bar'),
array(true, '12398!@(*%!@# @!%#*&^%', ' @!%#*&^%'),
array(true, 'Ο συγγραφέας είπε', 'συγγραφέας', 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', 'å´¥©', true, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', 'å˚ ∆', true, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', 'øœ¬', true, 'UTF-8'),
array(false, 'This string contains foo bar', 'Foo bar'),
array(false, 'This string contains foo bar', 'foobar'),
array(false, 'This string contains foo bar', 'foo bar '),
array(false, 'Str contains foo bar', 'Foo bar'),
array(false, 'Str contains foo bar', 'foobar'),
array(false, 'Str contains foo bar', 'foo bar '),
array(false, 'Ο συγγραφέας είπε', ' συγγραφέας ', true, 'UTF-8'),
array(false, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', ' ßå˚', true, 'UTF-8'),
array(true, 'This string contains foo bar', 'Foo bar', false),
array(true, 'Str contains foo bar', 'Foo bar', false),
array(true, '12398!@(*%!@# @!%#*&^%', ' @!%#*&^%', false),
array(true, 'Ο συγγραφέας είπε', 'ΣΥΓΓΡΑΦΈΑΣ', false, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', 'Å´¥©', false, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', 'Å˚ ∆', false, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', 'ØŒ¬', false, 'UTF-8'),
array(false, 'This string contains foo bar', 'foobar', false),
array(false, 'This string contains foo bar', 'foo bar ', false),
array(false, 'Str contains foo bar', 'foobar', false),
array(false, 'Str contains foo bar', 'foo bar ', false),
array(false, 'Ο συγγραφέας είπε', ' συγγραφέας ', false, 'UTF-8'),
array(false, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', ' ßÅ˚', false, 'UTF-8')
);
}
public function containsAnyProvider()
{
// One needle
$singleNeedle = array_map(function ($array) {
$array[2] = array($array[2]);
return $array;
}, $this->containsProvider());
$provider = array(
// No needles
array(false, 'Str contains foo bar', array()),
// Multiple needles
array(true, 'Str contains foo bar', array('foo', 'bar')),
array(true, '12398!@(*%!@# @!%#*&^%', array(' @!%#*', '&^%')),
array(true, 'Ο συγγραφέας είπε', array('συγγρ', 'αφέας'), 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array('å´¥', '©'), true, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array('å˚ ', '∆'), true, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array('øœ', '¬'), true, 'UTF-8'),
array(false, 'Str contains foo bar', array('Foo', 'Bar')),
array(false, 'Str contains foo bar', array('foobar', 'bar ')),
array(false, 'Str contains foo bar', array('foo bar ', ' foo')),
array(false, 'Ο συγγραφέας είπε', array(' συγγραφέας ', ' συγγραφ '), true, 'UTF-8'),
array(false, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array(' ßå˚', ' ß '), true, 'UTF-8'),
array(true, 'Str contains foo bar', array('Foo bar', 'bar'), false),
array(true, '12398!@(*%!@# @!%#*&^%', array(' @!%#*&^%', '*&^%'), false),
array(true, 'Ο συγγραφέας είπε', array('ΣΥΓΓΡΑΦΈΑΣ', 'ΑΦΈΑ'), false, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array('Å´¥©', '¥©'), false, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array('Å˚ ∆', ' ∆'), false, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array('ØŒ¬', 'Œ'), false, 'UTF-8'),
array(false, 'Str contains foo bar', array('foobar', 'none'), false),
array(false, 'Str contains foo bar', array('foo bar ', ' ba '), false),
array(false, 'Ο συγγραφέας είπε', array(' συγγραφέας ', ' ραφέ '), false, 'UTF-8'),
array(false, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array(' ßÅ˚', ' Å˚ '), false, 'UTF-8'),
);
return array_merge($singleNeedle, $provider);
}
public function containsAllProvider()
{
// One needle
$singleNeedle = array_map(function ($array) {
$array[2] = array($array[2]);
return $array;
}, $this->containsProvider());
$provider = array(
// One needle
array(false, 'Str contains foo bar', array()),
// Multiple needles
array(true, 'Str contains foo bar', array('foo', 'bar')),
array(true, '12398!@(*%!@# @!%#*&^%', array(' @!%#*', '&^%')),
array(true, 'Ο συγγραφέας είπε', array('συγγρ', 'αφέας'), 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array('å´¥', '©'), true, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array('å˚ ', '∆'), true, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array('øœ', '¬'), true, 'UTF-8'),
array(false, 'Str contains foo bar', array('Foo', 'bar')),
array(false, 'Str contains foo bar', array('foobar', 'bar')),
array(false, 'Str contains foo bar', array('foo bar ', 'bar')),
array(false, 'Ο συγγραφέας είπε', array(' συγγραφέας ', ' συγγραφ '), true, 'UTF-8'),
array(false, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array(' ßå˚', ' ß '), true, 'UTF-8'),
array(true, 'Str contains foo bar', array('Foo bar', 'bar'), false),
array(true, '12398!@(*%!@# @!%#*&^%', array(' @!%#*&^%', '*&^%'), false),
array(true, 'Ο συγγραφέας είπε', array('ΣΥΓΓΡΑΦΈΑΣ', 'ΑΦΈΑ'), false, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array('Å´¥©', '¥©'), false, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array('Å˚ ∆', ' ∆'), false, 'UTF-8'),
array(true, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array('ØŒ¬', 'Œ'), false, 'UTF-8'),
array(false, 'Str contains foo bar', array('foobar', 'none'), false),
array(false, 'Str contains foo bar', array('foo bar ', ' ba'), false),
array(false, 'Ο συγγραφέας είπε', array(' συγγραφέας ', ' ραφέ '), false, 'UTF-8'),
array(false, 'å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', array(' ßÅ˚', ' Å˚ '), false, 'UTF-8'),
);
return array_merge($singleNeedle, $provider);
}
public function surroundProvider()
{
return array(
@@ -655,6 +758,8 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
array('bar', 'foo bar', 'foo '),
array('foo bar', 'foo bar', 'oo'),
array('foo bar', 'foo bar', 'oo bar'),
array('oo bar', 'foo bar', Stringy::create('foo bar')->first(1), 'UTF-8'),
array('oo bar', 'foo bar', Stringy::create('foo bar')->at(0), 'UTF-8'),
array('fòô bàř', 'fòô bàř', '', 'UTF-8'),
array('òô bàř', 'fòô bàř', 'f', 'UTF-8'),
array('bàř', 'fòô bàř', 'fòô ', 'UTF-8'),
@@ -671,6 +776,8 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
array('foo', 'foo bar', ' bar'),
array('foo bar', 'foo bar', 'ba'),
array('foo bar', 'foo bar', 'foo ba'),
array('foo ba', 'foo bar', Stringy::create('foo bar')->last(1), 'UTF-8'),
array('foo ba', 'foo bar', Stringy::create('foo bar')->at(6), 'UTF-8'),
array('fòô bàř', 'fòô bàř', '', 'UTF-8'),
array('fòô bà', 'fòô bàř', 'ř', 'UTF-8'),
array('fòô', 'fòô bàř', ' bàř', 'UTF-8'),
@@ -725,6 +832,7 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
array(false, "\n\t ' \v\f"),
array(false, "\n\t 2 \v\f"),
array(true, '', 'UTF-8'),
array(true, ' ', 'UTF-8'), // no-break space
array(true, ' ', 'UTF-8'), // thin space
array(true, '  ', 'UTF-8'), // ideographic spaces
array(false, ' z', 'UTF-8'),

16
tests/CreateTest.php Normal file
View File

@@ -0,0 +1,16 @@
<?php
require __DIR__ . '/../src/Create.php';
use function Stringy\create as s;
class CreateTestCase extends PHPUnit_Framework_TestCase
{
public function testCreate()
{
$stringy = s('foo bar', 'UTF-8');
$this->assertInstanceOf('Stringy\Stringy', $stringy);
$this->assertEquals('foo bar', (string) $stringy);
$this->assertEquals('UTF-8', $stringy->getEncoding());
}
}

View File

@@ -244,6 +244,16 @@ class StaticStringyTestCase extends CommonTest
$this->assertEquals($expected, $result);
}
/**
* @dataProvider toTitleCaseProvider()
*/
public function testToTitleCase($expected, $str, $encoding = null)
{
$result = S::toTitleCase($str, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider toUpperCaseProvider()
*/
@@ -275,6 +285,28 @@ class StaticStringyTestCase extends CommonTest
$this->assertEquals($expected, $result);
}
/**
* @dataProvider containsAnyProvider()
*/
public function testcontainsAny($expected, $haystack, $needles,
$caseSensitive = true, $encoding = null)
{
$result = S::containsAny($haystack, $needles, $caseSensitive, $encoding);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider containsAllProvider()
*/
public function testContainsAll($expected, $haystack, $needles,
$caseSensitive = true, $encoding = null)
{
$result = S::containsAll($haystack, $needles, $caseSensitive, $encoding);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider surroundProvider()
*/

View File

@@ -9,7 +9,7 @@ class StringyTestCase extends CommonTest
public function testConstruct()
{
$stringy = new S('foo bar', 'UTF-8');
$this->assertInstanceOf('Stringy\Stringy', $stringy);
$this->assertStringy($stringy);
$this->assertEquals('foo bar', (string) $stringy);
$this->assertEquals('UTF-8', $stringy->getEncoding());
}
@@ -56,7 +56,7 @@ class StringyTestCase extends CommonTest
public function testCreate()
{
$stringy = S::create('foo bar', 'UTF-8');
$this->assertInstanceOf('Stringy\Stringy', $stringy);
$this->assertStringy($stringy);
$this->assertEquals('foo bar', (string) $stringy);
$this->assertEquals('UTF-8', $stringy->getEncoding());
}
@@ -64,7 +64,7 @@ class StringyTestCase extends CommonTest
public function testChaining()
{
$stringy = S::create("Fòô Bàř", 'UTF-8');
$this->assertInstanceOf('Stringy\Stringy', $stringy);
$this->assertStringy($stringy);
$result = $stringy->collapseWhitespace()->swapCase()->upperCaseFirst();
$this->assertEquals('FÒÔ bÀŘ', $result);
}
@@ -172,7 +172,7 @@ class StringyTestCase extends CommonTest
public function testUpperCaseFirst($expected, $str, $encoding = null)
{
$result = S::create($str, $encoding)->upperCaseFirst();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
}
@@ -183,7 +183,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->lowerCaseFirst();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -195,7 +195,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->camelize();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -207,7 +207,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->upperCamelize();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -219,7 +219,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->dasherize();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -231,7 +231,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->underscored();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -243,7 +243,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->swapCase();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -256,7 +256,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->titleize($ignore);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -268,7 +268,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->humanize();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -280,7 +280,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str);
$result = $stringy->tidy();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -292,7 +292,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->collapseWhitespace();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -304,7 +304,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str);
$result = $stringy->toAscii();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -317,7 +317,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->pad($length, $padStr, $padType);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -339,7 +339,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->padLeft($length, $padStr);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -352,7 +352,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->padRight($length, $padStr);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -365,7 +365,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->padBoth($length, $padStr);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -403,7 +403,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str);
$result = $stringy->toSpaces($tabLength);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -415,7 +415,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str);
$result = $stringy->toTabs($tabLength);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -427,7 +427,19 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->toLowerCase();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
/**
* @dataProvider toTitleCaseProvider()
*/
public function testToTitleCase($expected, $str, $encoding = null)
{
$stringy = S::create($str, $encoding);
$result = $stringy->toTitleCase();
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -439,7 +451,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->toUpperCase();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -451,7 +463,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str);
$result = $stringy->slugify($replacement);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -469,6 +481,32 @@ class StringyTestCase extends CommonTest
$this->assertEquals($haystack, $stringy);
}
/**
* @dataProvider containsAnyProvider()
*/
public function testcontainsAny($expected, $haystack, $needles,
$caseSensitive = true, $encoding = null)
{
$stringy = S::create($haystack, $encoding);
$result = $stringy->containsAny($needles, $caseSensitive);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
$this->assertEquals($haystack, $stringy);
}
/**
* @dataProvider containsAllProvider()
*/
public function testContainsAll($expected, $haystack, $needles,
$caseSensitive = true, $encoding = null)
{
$stringy = S::create($haystack, $encoding);
$result = $stringy->containsAll($needles, $caseSensitive);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
$this->assertEquals($haystack, $stringy);
}
/**
* @dataProvider surroundProvider()
*/
@@ -476,7 +514,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str);
$result = $stringy->surround($substring);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -489,7 +527,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->insert($substring, $index);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -502,7 +540,20 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->truncate($length, $substring);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
/**
* @dataProvider safeTruncateProvider()
*/
public function testSafeTruncate($expected, $str, $length, $substring = '',
$encoding = null)
{
$stringy = S::create($str, $encoding);
$result = $stringy->safeTruncate($length, $substring);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -514,7 +565,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->reverse();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -528,7 +579,7 @@ class StringyTestCase extends CommonTest
$encoding = $encoding ?: mb_internal_encoding();
$result = $stringy->shuffle();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($str, $stringy);
$this->assertEquals(mb_strlen($str, $encoding),
mb_strlen($result, $encoding));
@@ -549,7 +600,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str);
$result = $stringy->trim();
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -562,7 +613,20 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->longestCommonPrefix($otherStr);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
/**
* @dataProvider longestCommonSuffixProvider()
*/
public function testLongestCommonSuffix($expected, $str, $otherStr,
$encoding = null)
{
$stringy = S::create($str, $encoding);
$result = $stringy->longestCommonSuffix($otherStr);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -575,7 +639,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->longestCommonSubstring($otherStr);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -600,7 +664,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->substr($start, $length);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -612,7 +676,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->at($index);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -624,7 +688,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->first($n);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -636,7 +700,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->last($n);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -648,7 +712,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->ensureLeft($substring);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -660,7 +724,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->ensureRight($substring);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -672,7 +736,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->removeLeft($substring);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -684,7 +748,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->removeRight($substring);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -806,7 +870,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->replace($search, $replacement);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -819,7 +883,7 @@ class StringyTestCase extends CommonTest
{
$stringy = S::create($str, $encoding);
$result = $stringy->regexReplace($pattern, $replacement, $options);
$this->assertInstanceOf('Stringy\Stringy', $result);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}