1
0
mirror of https://github.com/danielstjules/Stringy.git synced 2025-09-01 01:01:46 +02:00

26 Commits
1.4.0 ... 1.5.1

Author SHA1 Message Date
Daniel St. Jules
7600549abc 1.5.1 release 2014-04-19 11:03:05 -04:00
Daniel St. Jules
8fe30d18b7 Fix toAscii failing to remove remaining non-ascii characters 2014-04-19 00:49:46 -04:00
Daniel St. Jules
ae7527ad4a Remove leading or trailing replacement from slugified string, if present 2014-04-19 00:33:59 -04:00
Yuri Druzhkov
f74f535b78 add preg_quote, add test on regex special symbols 2014-04-15 10:09:11 +04:00
Yuri Druzhkov
5c5087db13 dashes fixes 2014-04-01 18:03:48 +04:00
Daniel St. Jules
8d961e25d0 1.5.0 release 2014-03-19 19:25:00 -04:00
Daniel St. Jules
e46797a9f8 Updated pad methods 2014-03-19 00:40:36 -04:00
Daniel St. Jules
f0805f522d Merge branch 'pr/20' after cleanup 2014-03-18 23:36:52 -04:00
Bilge
6103eca714 Rewrote Stringy::pad to be DRY.
Fixed "Class 'CommonTest' not found" error when running specific tests in PHPUnit by including tests directory in Composer's autoloader.
2014-03-18 23:34:54 -04:00
Daniel St. Jules
952ffd4c00 Add tests classmap to composer
As suggested by Bilge in https://github.com/danielstjules/Stringy/pull/20
2014-03-09 20:52:18 -04:00
Daniel St. Jules
7832e22e09 Update require paths in tests 2014-03-09 20:12:53 -04:00
Daniel St. Jules
bcd87c69b8 Merge pull request #26 from lucasmichot/patch-1
Add PHPUnit 4.0.* to require-dev
2014-03-09 20:07:23 -04:00
Lucas
1d9001bcf0 Add PHPUnit 4.0.* to require-dev 2014-03-07 13:45:59 +01:00
Daniel St. Jules
ee88cd93e8 Rename protected method slug to applyDelimeter, fix typos in comments 2014-03-05 19:34:09 -05:00
Daniel St. Jules
48f53e98fa Merge pull request #25 from BastianHofmann/patch-1
DRY underscored and dasherize methods
2014-03-05 19:24:34 -05:00
Daniel St. Jules
6e7415a9f5 Merge pull request #24 from maximal/patch-1
Remove conflicting transliteration for Bulgarian
2014-03-05 19:23:16 -05:00
BastianHofmann
c62a5e8d4e DRY underscored and dasherize methods 2014-03-05 11:21:21 +01:00
MaximAL
cd41723b12 Update CommonTest.php 2014-02-19 10:43:06 +03:00
Daniel St. Jules
404909ffaa Fixes #19: Handle consecutive invalid chars in slugify 2014-02-17 11:22:59 -05:00
Daniel St. Jules
210c928b79 Added links to readme, included SliceableStringy 2014-02-17 10:41:38 -05:00
Daniel St. Jules
1965da2e39 Made str and encoding protected, added getEncoding
Neither should be private, so as to allow users to easily extend the
class
2014-02-16 21:22:32 -05:00
MaximAL
25fa7340ed Hard sign in Russian is not equivalent to a, it’s rather '
Apostrophe is also most common transliteration character for soft sign (ь).
2014-02-16 18:50:29 +03:00
Daniel St. Jules
e5f66c6eca Merge pull request #21 from Bilge/dry-regex-replace
Optimized replace() and collapseWhitespace() by reusing regexReplace().
2014-02-14 07:09:57 -05:00
Bilge
5d7e9a8d36 Optimized replace() and collapseWhitespace() by reusing regexReplace().
Fixed bug in replace() where replacement string was being escaped with preg_quote() and added matching tests.
2014-02-14 01:26:55 +00:00
Daniel St. Jules
a7c5b8721c Add composer.lock and .DS_Store to .gitignore 2014-02-13 13:29:57 -05:00
Daniel St. Jules
9399f7a694 Fix isJSON
Thanks to Drainedsoul
2014-02-13 06:32:54 -05:00
8 changed files with 165 additions and 119 deletions

2
.gitignore vendored
View File

@@ -1 +1,3 @@
vendor/
composer.lock
.DS_Store

View File

@@ -1,3 +1,19 @@
### 1.5.1 (2014-04-19)
* Fixed toAscii() failing to remove remaining non-ascii characters
* Updated slugify() to treat dash and underscore as delimiters by default
* Updated slugify() to remove leading and trailing delimiter, if present
### 1.5.0 (2014-03-19)
* Made both str and encoding protected, giving property access to subclasses
* Added getEncoding()
* Fixed isJSON() giving false negatives
* Cleaned up and simplified: replace(), collapseWhitespace(), underscored(),
dasherize(), pad(), padLeft(), padRight() and padBoth()
* Fixed handling consecutive invalid chars in slugify()
* Removed conflicting hard sign transliteration in toAscii()
### 1.4.0 (2014-02-12)
* Implemented the IteratorAggregate interface, added chars()

View File

@@ -22,6 +22,7 @@ Compatible with PHP 5.3+. Inspired by underscore.string.js.
* [ensureLeft](#ensureleft)
* [ensureRight](#ensureright)
* [first](#first)
* [getEncoding](#getencoding)
* [humanize](#humanize)
* [insert](#insert)
* [isAlpha](#isalpha)
@@ -66,6 +67,7 @@ Compatible with PHP 5.3+. Inspired by underscore.string.js.
* [underscored](#underscored)
* [upperCamelize](#uppercamelize)
* [upperCaseFirst](#uppercasefirst)
* [Links](#links)
* [Tests](#tests)
* [License](#license)
@@ -75,7 +77,7 @@ If you're using Composer to manage dependencies, you can include the following
in your composer.json file:
"require": {
"danielstjules/stringy": "dev-master"
"danielstjules/stringy": ">=1.5.1"
}
Then, after running `composer update` or `php composer.phar update`, you can
@@ -340,6 +342,16 @@ S::create('fòô bàř', 'UTF-8')->first(3);
S::first('fòô bàř', 3, 'UTF-8'); // 'fòô'
```
#### getEncoding
$stringy->getEncoding()
Returns the encoding used by the Stringy object.
```php
S::create('fòô bàř', 'UTF-8')->getEncoding(); // 'UTF-8'
```
#### humanize
$stringy->humanize()
@@ -954,6 +966,13 @@ S::create('σ test', 'UTF-8')->upperCaseFirst();
S::upperCaseFirst('σ test', 'UTF-8'); // 'Σ test'
```
## Links
The following is a list of libraries that extend Stringy:
* [SliceableStringy](https://github.com/danielstjules/SliceableStringy):
Python-like string slices in PHP
## Tests
From the project directory, tests can be ran using `phpunit`

View File

@@ -17,11 +17,15 @@
"require": {
"php": ">=5.3.0"
},
"require-dev": {
"phpunit/phpunit": "4.0.*"
},
"support": {
"issues": "https://github.com/danielstjules/Stringy/issues",
"source": "https://github.com/danielstjules/Stringy"
},
"autoload": {
"psr-4": { "Stringy\\": "src/" }
"psr-4": { "Stringy\\": "src/" },
"classmap": [ "tests" ]
}
}

View File

@@ -4,9 +4,9 @@ namespace Stringy;
class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
{
private $str;
protected $str;
public $encoding;
protected $encoding;
/**
* Initializes a Stringy object and assigns both str and encoding properties
@@ -64,6 +64,16 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
return $this->str;
}
/**
* Returns the encoding used by the Stringy object.
*
* @return string The current value of the $encoding property
*/
public function getEncoding()
{
return $this->encoding;
}
/**
* Returns the length of the string, implementing the countable interface.
*
@@ -252,17 +262,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function dasherize()
{
// Save current regex encoding so we can reset it after
$regexEncoding = mb_regex_encoding();
mb_regex_encoding($this->encoding);
$str = mb_ereg_replace('\B([A-Z])', '-\1', trim($this->str));
$str = mb_ereg_replace('[-_\s]+', '-', $str);
$str = mb_strtolower($str, $this->encoding);
mb_regex_encoding($regexEncoding);
return self::create($str, $this->encoding);
return $this->applyDelimeter('-');
}
/**
@@ -274,13 +274,24 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
* @return Stringy Object with an underscored $str
*/
public function underscored()
{
return $this->applyDelimeter('_');
}
/**
* Returns a lowercase and trimmed string separated by the given delimiter.
*
* @param string $delimiter Sequence used to separate parts of the string
* @return Stringy Object with a delimited $str
*/
protected function applyDelimeter($delimiter)
{
// Save current regex encoding so we can reset it after
$regexEncoding = mb_regex_encoding();
mb_regex_encoding($this->encoding);
$str = mb_ereg_replace('\B([A-Z])', '_\1', trim($this->str));
$str = mb_ereg_replace('[-_\s]+', '_', $str);
$str = mb_ereg_replace('\B([A-Z])', $delimiter .'\1', trim($this->str));
$str = mb_ereg_replace('[-_\s]+', $delimiter, $str);
$str = mb_strtolower($str, $this->encoding);
mb_regex_encoding($regexEncoding);
@@ -383,13 +394,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function collapseWhitespace()
{
$regexEncoding = mb_regex_encoding();
mb_regex_encoding($this->encoding);
$str = mb_ereg_replace('[[:space:]]+', ' ', $this->str);
mb_regex_encoding($regexEncoding);
return self::create($str, $this->encoding)->trim();
return $this->regexReplace('[[:space:]]+', ' ')->trim();
}
/**
@@ -405,7 +410,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
'a' => array('à', 'á', 'â', 'ã', 'ā', 'ą', 'ă', 'å', 'α', 'ά', 'ἀ',
'ἁ', 'ἂ', 'ἃ', 'ἄ', 'ἅ', 'ἆ', 'ἇ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ',
'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ὰ', 'ά', 'ᾰ', 'ᾱ', 'ᾲ', 'ᾳ', 'ᾴ',
'ᾶ', 'ᾷ', 'а', 'ъ'),
'ᾶ', 'ᾷ', 'а'),
'b' => array('б', 'β'),
'c' => array('ç', 'ć', 'č', 'ĉ', 'ċ'),
'd' => array('ď', 'ð', 'đ', 'ƌ', 'ȡ', 'ɖ', 'ɗ', 'ᵭ', 'ᶁ', 'ᶑ', 'д'),
@@ -444,7 +449,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
'zh' => array('ж'),
'A' => array('Á', 'Â', 'Ã', 'Å', 'Ā', 'Ą', 'Ă', 'Α', 'Ά', 'Ἀ', 'Ἁ',
'Ἂ', 'Ἃ', 'Ἄ', 'Ἅ', 'Ἆ', 'Ἇ', 'ᾈ', 'ᾉ', 'ᾊ', 'ᾋ', 'ᾌ',
'ᾍ', 'ᾎ', 'ᾏ', 'Ᾰ', 'Ᾱ', 'Ὰ', 'Ά', 'ᾼ', 'А', 'Ъ'),
'ᾍ', 'ᾎ', 'ᾏ', 'Ᾰ', 'Ᾱ', 'Ὰ', 'Ά', 'ᾼ', 'А'),
'B' => array('Б'),
'C' => array('Ć', 'Č', 'Ĉ', 'Ċ'),
'D' => array('Ď', 'Ð', 'Đ', 'Ɖ', 'Ɗ', 'Ƌ', 'ᴅ', 'ᴆ', 'Д'),
@@ -483,6 +488,8 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$str = str_replace($value, $key, $str);
}
$str = preg_replace('/[^\x20-\x7E]/u', '', $str);
return self::create($str, $this->encoding);
}
@@ -507,44 +514,14 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
"to be one of 'left', 'right' or 'both'");
}
$stringy = self::create($this->str, $this->encoding);
$encoding = $stringy->encoding;
$strLength = $stringy->length();
$padStrLength = mb_strlen($padStr, $encoding);
if ($length <= $strLength || $padStrLength <= 0) {
return $stringy;
switch ($padType) {
case 'left':
return $this->padLeft($length, $padStr);
case 'right':
return $this->padRight($length, $padStr);
default:
return $this->padBoth($length, $padStr);
}
// Number of times to repeat the padStr if left or right
$times = ceil(($length - $strLength) / $padStrLength);
$paddedStr = '';
if ($padType == 'left') {
// Repeat the pad, cut it, and prepend
$leftPad = str_repeat($padStr, $times);
$leftPad = mb_substr($leftPad, 0, $length - $strLength, $encoding);
$stringy->str = $leftPad . $stringy->str;
} elseif ($padType == 'right') {
// Append the repeated pad and get a substring of the given length
$stringy->str = $stringy->str . str_repeat($padStr, $times);
$stringy->str = mb_substr($stringy->str, 0, $length, $encoding);
} else {
// Number of times to repeat the padStr on both sides
$paddingSize = ($length - $strLength) / 2;
$times = ceil($paddingSize / $padStrLength);
// Favour right padding over left, as with str_pad()
$rightPad = str_repeat($padStr, $times);
$rightPad = mb_substr($rightPad, 0, ceil($paddingSize), $encoding);
$leftPad = str_repeat($padStr, $times);
$leftPad = mb_substr($leftPad, 0, floor($paddingSize), $encoding);
$stringy->str = $leftPad . $stringy->str . $rightPad;
}
return $stringy;
}
/**
@@ -553,11 +530,11 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*
* @param int $length Desired string length after padding
* @param string $padStr String used to pad, defaults to space
* @return Stringy Object with a left padded $str
* @return Stringy String with left padding
*/
public function padLeft($length, $padStr = ' ')
{
return $this->pad($length, $padStr, 'left');
return $this->applyPadding($length - $this->length(), 0, $padStr);
}
/**
@@ -566,11 +543,11 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*
* @param int $length Desired string length after padding
* @param string $padStr String used to pad, defaults to space
* @return Stringy Object with a right padded $str
* @return Stringy String with right padding
*/
public function padRight($length, $padStr = ' ')
{
return $this->pad($length, $padStr, 'right');
return $this->applyPadding(0, $length - $this->length(), $padStr);
}
/**
@@ -579,11 +556,45 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*
* @param int $length Desired string length after padding
* @param string $padStr String used to pad, defaults to space
* @return Stringy The padded string
* @return Stringy String with padding applied
*/
public function padBoth($length, $padStr = ' ')
{
return $this->pad($length, $padStr, 'both');
$padding = $length - $this->length();
return $this->applyPadding(floor($padding / 2), ceil($padding / 2),
$padStr);
}
/**
* Adds the specified amount of left and right padding to the given string.
* The default character used is a space.
*
* @param int $left Length of left padding
* @param int $right Length of right padding
* @param string $padStr String used to pad
* @return Stringy String with padding applied
*/
private function applyPadding($left = 0, $right = 0, $padStr = ' ')
{
$stringy = self::create($this->str, $this->encoding);
$length = mb_strlen($padStr, $stringy->encoding);
$strLength = $stringy->length();
$paddedLength = $strLength + $left + $right;
if (!$length || $paddedLength <= $strLength) {
return $stringy;
}
$leftPadding = mb_substr(str_repeat($padStr, ceil($left / $length)), 0,
$left, $stringy->encoding);
$rightPadding = mb_substr(str_repeat($padStr, ceil($right / $length)), 0,
$right, $stringy->encoding);
$stringy->str = $leftPadding . $stringy->str . $rightPadding;
return $stringy;
}
/**
@@ -705,12 +716,12 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
{
$stringy = self::create($this->str, $this->encoding);
$stringy->str = preg_replace("/[^a-zA-Z\d $replacement]/u", '',
$stringy->toAscii());
$stringy->str = $stringy->collapseWhitespace()->str;
$stringy->str = str_replace(' ', $replacement, strtolower($stringy));
$quotedReplacement = preg_quote($replacement);
$pattern = "/[^a-zA-Z\d\s-_$quotedReplacement]/u";
$stringy->str = preg_replace($pattern, '', $stringy->toAscii());
return $stringy;
return $stringy->toLowerCase()->applyDelimeter($replacement)
->removeLeft($replacement)->removeRight($replacement);
}
/**
@@ -1199,11 +1210,9 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function isJson()
{
if (!$this->endsWith('}') && !$this->endsWith(']')) {
return false;
}
json_decode($this->str);
return !is_null(json_decode($this->str));
return (json_last_error() === JSON_ERROR_NONE);
}
@@ -1269,17 +1278,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function replace($search, $replacement)
{
$regexEncoding = mb_regex_encoding();
mb_regex_encoding($this->encoding);
// Don't want the args being parsed as regex
$search = preg_quote($search);
$replacement = preg_quote($replacement);
$str = mb_ereg_replace($search, $replacement, $this->str);
mb_regex_encoding($regexEncoding);
return self::create($str, $this->encoding);
return $this->regexReplace(preg_quote($search), $replacement);
}
/**

View File

@@ -174,17 +174,18 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
return array(
array('foo bar', 'fòô bàř'),
array(' TEST ', ' ŤÉŚŢ '),
array('φ = z = 3', 'φ = ź = 3'),
array(' = z = 3', 'φ = ź = 3'),
array('perevirka', 'перевірка'),
array('lysaya gora', 'лысая гора'),
array('shchuka', 'щука')
array('shchuka', 'щука'),
array('', '漢字')
);
}
public function padProvider()
{
return array(
// $length <= $str
// length <= str
array('foo bar', 'foo bar', -1),
array('foo bar', 'foo bar', 7),
array('fòô bàř', 'fòô bàř', 7, ' ', 'right', 'UTF-8'),
@@ -192,32 +193,16 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
// right
array('foo bar ', 'foo bar', 9),
array('foo bar_*', 'foo bar', 9, '_*', 'right'),
array('foo bar_*_', 'foo bar', 10, '_*', 'right'),
array('fòô bàř ', 'fòô bàř', 9, ' ', 'right', 'UTF-8'),
array('fòô bàř¬ø', 'fòô bàř', 9, '¬ø', 'right', 'UTF-8'),
array('fòô bàř¬ø¬', 'fòô bàř', 10, '¬ø', 'right', 'UTF-8'),
array('fòô bàř¬ø¬ø', 'fòô bàř', 11, '¬ø', 'right', 'UTF-8'),
// left
array(' foo bar', 'foo bar', 9, ' ', 'left'),
array('_*foo bar', 'foo bar', 9, '_*', 'left'),
array('_*_foo bar', 'foo bar', 10, '_*', 'left'),
array(' fòô bàř', 'fòô bàř', 9, ' ', 'left', 'UTF-8'),
array('¬øfòô bàř', 'fòô bàř', 9, '¬ø', 'left', 'UTF-8'),
array('¬ø¬fòô bàř', 'fòô bàř', 10, '¬ø', 'left', 'UTF-8'),
array('¬ø¬øfòô bàř', 'fòô bàř', 11, '¬ø', 'left', 'UTF-8'),
// both
array('foo bar ', 'foo bar', 8, ' ', 'both'),
array(' foo bar ', 'foo bar', 9, ' ', 'both'),
array('fòô bàř ', 'fòô bàř', 8, ' ', 'both', 'UTF-8'),
array(' fòô bàř ', 'fòô bàř', 9, ' ', 'both', 'UTF-8'),
array('fòô bàř¬', 'fòô bàř', 8, '¬ø', 'both', 'UTF-8'),
array('¬fòô bàř¬', 'fòô bàř', 9, '¬ø', 'both', 'UTF-8'),
array('¬fòô bàř¬ø', 'fòô bàř', 10, '¬ø', 'both', 'UTF-8'),
array('¬øfòô bàř¬ø', 'fòô bàř', 11, '¬ø', 'both', 'UTF-8'),
array('¬fòô bàř¬ø', 'fòô bàř', 10, '¬øÿ', 'both', 'UTF-8'),
array('¬øfòô bàř¬ø', 'fòô bàř', 11, '¬øÿ', 'both', 'UTF-8'),
array('¬øfòô bàř¬øÿ', 'fòô bàř', 12, '¬øÿ', 'both', 'UTF-8')
);
}
@@ -226,7 +211,11 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
{
return array(
array(' foo bar', 'foo bar', 9),
array('_*foo bar', 'foo bar', 9, '_*'),
array('_*_foo bar', 'foo bar', 10, '_*'),
array(' fòô bàř', 'fòô bàř', 9, ' ', 'UTF-8'),
array('¬øfòô bàř', 'fòô bàř', 9, '¬ø', 'UTF-8'),
array('¬ø¬fòô bàř', 'fòô bàř', 10, '¬ø', 'UTF-8'),
array('¬ø¬øfòô bàř', 'fòô bàř', 11, '¬ø', 'UTF-8'),
);
}
@@ -235,7 +224,11 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
{
return array(
array('foo bar ', 'foo bar', 9),
array('foo bar_*', 'foo bar', 9, '_*'),
array('foo bar_*_', 'foo bar', 10, '_*'),
array('fòô bàř ', 'fòô bàř', 9, ' ', 'UTF-8'),
array('fòô bàř¬ø', 'fòô bàř', 9, '¬ø', 'UTF-8'),
array('fòô bàř¬ø¬', 'fòô bàř', 10, '¬ø', 'UTF-8'),
array('fòô bàř¬ø¬ø', 'fòô bàř', 11, '¬ø', 'UTF-8'),
);
}
@@ -245,7 +238,14 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
return array(
array('foo bar ', 'foo bar', 8),
array(' foo bar ', 'foo bar', 9, ' '),
array('fòô bàř ', 'fòô bàř', 8, ' ', 'UTF-8'),
array(' fòô bàř ', 'fòô bàř', 9, ' ', 'UTF-8'),
array('fòô bàř¬', 'fòô bàř', 8, '¬ø', 'UTF-8'),
array('¬fòô bàř¬', 'fòô bàř', 9, '¬ø', 'UTF-8'),
array('¬fòô bàř¬ø', 'fòô bàř', 10, '¬ø', 'UTF-8'),
array('¬øfòô bàř¬ø', 'fòô bàř', 11, '¬ø', 'UTF-8'),
array('¬fòô bàř¬ø', 'fòô bàř', 10, '¬øÿ', 'UTF-8'),
array('¬øfòô bàř¬ø', 'fòô bàř', 11, '¬øÿ', 'UTF-8'),
array('¬øfòô bàř¬øÿ', 'fòô bàř', 12, '¬øÿ', 'UTF-8')
);
}
@@ -333,6 +333,8 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
{
return array(
array('foo-bar', ' foo bar '),
array('foo-bar', 'foo -.-"-...bar'),
array('another-foo-bar', 'another..& foo -.-"-...bar'),
array('foo-dbar', " Foo d'Bar "),
array('a-string-with-dashes', 'A string-with-dashes'),
array('using-strings-like-foo-bar', 'Using strings like fòô bàř'),
@@ -340,9 +342,12 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
array('numbers-1234', 'numbers 1234'),
array('perevirka-ryadka', 'перевірка рядка'),
array('bukvar-s-bukvoy-y', 'букварь с буквой ы'),
array('barzi-i-yarostni', 'бързи и яростни'),
array('podekhal-k-podezdu-moego-doma', 'подъехал к подъезду моего дома'),
array('foo:bar:baz', 'Foo bar baz', ':'),
array('a_string_with_underscores', 'A_string with_underscores', '_')
array('a_string_with_underscores', 'A_string with_underscores', '_'),
array('a_string_with_dashes', 'A string-with-dashes', '_'),
array('a\string\with\dashes', 'A string-with-dashes', '\\'),
array('an_odd_string', '-- An odd__ string-_', '_')
);
}
@@ -730,14 +735,14 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
public function isJsonProvider()
{
return array(
array(false, ''),
array(false, '123'),
array(true, ''),
array(true, '123'),
array(true, '{"foo": "bar"}'),
array(false, '{"foo":"bar",}'),
array(false, '{"foo"}'),
array(true, '["foo"]'),
array(false, '{"foo": "bar"]'),
array(false, '123', 'UTF-8'),
array(true, '123', 'UTF-8'),
array(true, '{"fòô": "bàř"}', 'UTF-8'),
array(false, '{"fòô":"bàř",}', 'UTF-8'),
array(false, '{"fòô"}', 'UTF-8'),
@@ -835,6 +840,8 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
array('foo', '', '', 'foo'),
array('foo', '\s', '\s', 'foo'),
array('foo bar', 'foo bar', '', ''),
array('foo bar', 'foo bar', 'f(o)o', '\1'),
array('\1 bar', 'foo bar', 'foo', '\1'),
array('bar', 'foo bar', 'foo ', ''),
array('far bar', 'foo bar', 'foo', 'far'),
array('bar bar', 'foo bar foo bar', 'foo ', ''),
@@ -853,6 +860,7 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
return array(
array('', '', '', ''),
array('bar', 'foo', 'f[o]+', 'bar'),
array('o bar', 'foo bar', 'f(o)o', '\1'),
array('bar', 'foo bar', 'f[O]+\s', '', 'i'),
array('foo', 'bar', '[[:alpha:]]{3}', 'foo'),
array('', '', '', '', 'msr', 'UTF-8'),

View File

@@ -1,7 +1,6 @@
<?php
$base = realpath(dirname(__FILE__) . '/..');
require("$base/src/StaticStringy.php");
require __DIR__ . '/../src/StaticStringy.php';
use Stringy\StaticStringy as S;

View File

@@ -1,7 +1,6 @@
<?php
$base = realpath(dirname(__FILE__) . '/..');
require("$base/src/Stringy.php");
require __DIR__ . '/../src/Stringy.php';
use Stringy\Stringy as S;
@@ -12,7 +11,7 @@ class StringyTestCase extends CommonTest
$stringy = new S('foo bar', 'UTF-8');
$this->assertInstanceOf('Stringy\Stringy', $stringy);
$this->assertEquals('foo bar', (string) $stringy);
$this->assertEquals('UTF-8', $stringy->encoding);
$this->assertEquals('UTF-8', $stringy->getEncoding());
}
/**
@@ -59,7 +58,7 @@ class StringyTestCase extends CommonTest
$stringy = S::create('foo bar', 'UTF-8');
$this->assertInstanceOf('Stringy\Stringy', $stringy);
$this->assertEquals('foo bar', (string) $stringy);
$this->assertEquals('UTF-8', $stringy->encoding);
$this->assertEquals('UTF-8', $stringy->getEncoding());
}
public function testChaining()