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

131 Commits
1.4.0 ... 1.x

Author SHA1 Message Date
Daniel St. Jules
4749c205db 1.10.0 2015-07-22 17:54:12 -07:00
Daniel St. Jules
fe3368bd8b Add trimLeft, trimRight, support unicode whitespace 2015-07-22 17:41:19 -07:00
Daniel St. Jules
7763df3c3b Add public delimit() function 2015-07-01 19:25:35 -07:00
Daniel St. Jules
397d2ca2f8 Style fixes 2015-06-29 15:33:00 -07:00
Daniel St. Jules
2c295fd15d Merge branch 'indexOf' 2015-06-29 14:56:25 -07:00
Tadeu Bento
9a5601efef Added indexOf and indexOfLast 2015-06-29 14:45:32 -07:00
Daniel St. Jules
e42f165471 Merge branch 'trim' 2015-06-29 13:03:13 -07:00
Heudon
1a2e771ff8 Added $charList and $type to trim function
Adding the option to trim the string with others characters, not only with the default characters provided by php. Also added the option to define the function which will be used to trim the string, if it's normal trim, left trim or right trim
2015-06-29 13:02:09 -07:00
Daniel St. Jules
f9eab1b657 Merge pull request #91 from jcroll/htmlEncode
Added htmlEncode and htmlDecode
2015-06-29 12:53:04 -07:00
Jarrett Croll
f9729788c4 html encode and decode 2015-06-16 16:20:41 -04:00
Daniel St. Jules
f1009d0267 Add SubStringy to readme 2015-06-08 00:56:20 -07:00
Daniel St. Jules
9d1073f4f5 Merge pull request #84 from emnsen/patch-1
Added Turkish Character
2015-04-16 10:10:55 -07:00
Emin Şen
c2a554253c Added Turkish Character
Added Turkish Character ; Ç
2015-03-11 16:21:23 +02:00
Daniel St. Jules
3cf18e9e42 1.9.0 2015-02-09 22:19:18 -08:00
Daniel St. Jules
04b12c9500 Document hasLowerCase and hasUpperCase 2015-02-09 22:10:46 -08:00
Daniel St. Jules
b2386b6c33 Sticking to the ruler where possible 2015-02-09 21:38:42 -08:00
Daniel St. Jules
1172a75d1e Improve coverage of charsArray() 2015-02-09 21:27:21 -08:00
Daniel St. Jules
4ebf9aee3d Merge pull request #79 from vlakoff/tweak
Just a little bit of tweaking
2015-02-03 02:21:24 -08:00
vlakoff
61b986a3e6 Code tweaking
Prettier, one less instanciation.
2015-02-03 11:13:58 +01:00
vlakoff
2bd4be60bb Uniformization in docblocks 2015-02-03 11:10:27 +01:00
Daniel St. Jules
0aa476d44c Merge pull request #68 from vlakoff/toAscii
[Proposal] Add $replaceUnsupported and $fallback parameters to toAscii()
2015-02-02 23:42:47 -08:00
Daniel St. Jules
f63646dcba Merge pull request #78 from vlakoff/readme
Clean up some commas in README
2015-02-02 23:41:43 -08:00
vlakoff
97e607dc5d Add $removeUnsupported parameter to toAscii() 2015-02-03 07:12:02 +01:00
vlakoff
a9a4ce461f Clean up some commas in README 2015-02-03 06:29:04 +01:00
Daniel St. Jules
9a0f0e16cb Merge pull request #77 from takobell/master
Add Stringy->hasUpperCase, Stringy->hasLowerCase along with StaticString counterparts & tests.
2015-02-01 22:09:48 -08:00
Brad Bell
e9cd229808 Add StaticStringy::hasUpperCase, StaticStringy::hasLowerCase, Stringy->hasUpperCase and Stringy->hasLowerCase along with tests. 2015-01-23 15:52:58 -08:00
Daniel St. Jules
4974407729 charsArray formatting 2015-01-18 20:14:57 -08:00
Daniel St. Jules
8a36b8d3f0 Merge pull request #74 from anhskohbo/master
Support Full Unicode For Vietnamese.
2015-01-18 20:11:40 -08:00
Daniel St. Jules
66c2a98e83 Merge pull request #75 from vlakoff/tweak
Minor improvements
2015-01-16 18:50:54 -08:00
vlakoff
36c3fd05d2 Use Stringy's trim() method in applyDelimiter()
This trim() method may be more powerful in the future.
2015-01-17 01:53:01 +01:00
vlakoff
f3bd5b6c62 Fix method name
applyDelimeter() --> applyDelimiter()

Thankfully, it is a protected method.
2015-01-17 01:52:55 +01:00
vlakoff
dd34bc6f85 Minor code adjustment 2015-01-17 01:52:46 +01:00
anhskohbo
f490aa2894 Support Full Unicode For Vietnamese.
Signed-off-by: anhskohbo <anhskohbo@gmail.com>
2015-01-14 03:43:59 +07:00
Daniel St. Jules
40974608d4 Merge pull request #70 from vlakoff/toAscii-2
Separate toAscii()'s charsArray to allow customization
2015-01-13 12:25:16 -08:00
vlakoff
8676bd9d9b Add cache in charsArray()
This is static but confined to this function block,
so this doesn't introduce any side effect.

The performance gain is really worth it.
2015-01-12 19:59:37 +01:00
Daniel St. Jules
f4327a2583 Merge pull request #73 from lucasmichot/missing-space
Style fix
2015-01-11 17:39:30 -08:00
Lucas Michot
571dc93d1e Add missing space 2015-01-12 02:38:52 +01:00
vlakoff
62f6fd7b3a Separate toAscii()'s charsArray to allow customization 2015-01-10 22:39:36 +01:00
Daniel St. Jules
8b834482df Merge pull request #72 from vlakoff/spaces
Add remaining Unicode spaces
2015-01-09 19:58:36 -08:00
vlakoff
08a72a72dd Add remaining Unicode spaces
* spaces U+2000 to U+200A (there already was thin space U+2009)
* medium mathematical space (U+205F)
2015-01-09 19:14:16 +01:00
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
Daniel St. Jules
63ad4d238f 1.5.2 release 2014-07-09 13:13:57 -04:00
Daniel St. Jules
ece219b609 Add note on HHVM support to readme 2014-07-09 13:11:48 -04:00
Daniel St. Jules
e81dbaa6d9 Disable allowing failures for 5.6 and hhvm 2014-05-18 21:02:29 -04:00
Daniel St. Jules
2b2c03bd1f Add 5.6 and hhvm to .travis.yml 2014-05-18 20:59:16 -04:00
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
13 changed files with 1673 additions and 350 deletions

2
.gitignore vendored
View File

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

View File

@@ -1,5 +1,7 @@
language: php
php:
- 5.6
- 5.5
- 5.4
- 5.3
- hhvm

View File

@@ -1,3 +1,65 @@
### 1.10.0 (2015-07-22)
* Added trimLeft, trimRight
* Added support for unicode whitespace to trim
* Added delimit
* Added indexOf and indexOfLast
* Added htmlEncode and htmlDecode
* Added "Ç" in toAscii()
### 1.9.0 (2015-02-09)
* Added hasUpperCase and hasLowerCase
* Added $removeUnsupported parameter to toAscii()
* Improved toAscii support with additional Unicode spaces, Vietnamese chars,
and numerous other characters
* Separated the charsArray from toAscii as a protected method that may be
extended by inheriting classes
* Chars array is cached for better performance
### 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
### 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()

269
README.md
View File

@@ -1,28 +1,39 @@
![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.
Compatible with PHP 5.3+. 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)
* [delimit](#delimit)
* [endsWith](#endswith)
* [ensureLeft](#ensureleft)
* [ensureRight](#ensureright)
* [first](#first)
* [getEncoding](#getencoding)
* [hasLowerCase](#haslowercase)
* [hasUpperCase](#hasuppercase)
* [htmlDecode](#htmldecode)
* [htmlEncode](#htmlencode)
* [humanize](#humanize)
* [indexOf](#indexof)
* [indexOfLast](#indexoflast)
* [insert](#insert)
* [isAlpha](#isalpha)
* [isAlphanumeric](#isalphanumeric)
@@ -60,12 +71,16 @@ Compatible with PHP 5.3+. Inspired by underscore.string.js.
* [toLowerCase](#tolowercase)
* [toSpaces](#tospaces)
* [toTabs](#totabs)
* [toTitleCase](#totitlecase)
* [toUpperCase](#touppercase)
* [trim](#trim)
* [trimLeft](#trimLeft)
* [trimRight](#trimRight)
* [truncate](#truncate)
* [underscored](#underscored)
* [upperCamelize](#uppercamelize)
* [upperCaseFirst](#uppercasefirst)
* [Links](#links)
* [Tests](#tests)
* [License](#license)
@@ -74,9 +89,13 @@ Compatible with PHP 5.3+. 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": "dev-master"
"danielstjules/stringy": "~1.10"
}
}
```
Then, after running `composer update` or `php composer.phar update`, you can
load the class using Composer's autoloading:
@@ -162,6 +181,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
@@ -242,6 +276,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 ])
@@ -259,7 +323,7 @@ S::countSubstr('Ο συγγραφέας είπε', 'α', 'UTF-8'); // 2
#### create
S::create(mixed $str, [, $encoding ])
S::create(mixed $str [, $encoding ])
Creates a Stringy object and assigns both str and encoding properties
the supplied values. $str is cast to a string prior to assignment, and if
@@ -286,6 +350,22 @@ S::create('TestDCase')->dasherize();
S::dasherize('TestDCase'); // 'test-d-case'
```
#### delimit
$stringy->delimit($delimiter);
S::delimit(string $str [, string $delimiter, string $encoding ])
Returns a lowercase and trimmed string separated by the given delimiter.
Delimiters are inserted before uppercase characters (with the exception
of the first character of the string), and in place of spaces, dashes,
and underscores. Alpha delimiters are not converted to lowercase.
```php
S::create('TestDCase')->delimit('>>');
S::delimit('TestCase', '>>'); // 'test>>case'
```
#### endsWith
$stringy->endsWith(string $substring [, boolean $caseSensitive = true ])
@@ -340,6 +420,68 @@ 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'
```
#### hasLowerCase
$stringy->hasLowerCase()
S::hasLowerCase(string $str [, string $encoding ])
Returns true if the string contains a lower case char, false otherwise.
```php
S::create('fòô bàř', 'UTF-8')->hasLowerCase();
S::hasLowerCase('fòô bàř', 'UTF-8'); // true
```
#### hasUpperCase
$stringy->hasUpperCase()
S::hasUpperCase(string $str [, string $encoding ])
Returns true if the string contains an upper case char, false otherwise.
```php
S::create('fòô bàř', 'UTF-8')->hasUpperCase();
S::hasUpperCase('fòô bàř', 'UTF-8'); // false
```
#### htmlDecode
$stringy->htmlDecode()
S::htmlDecode(string $str [, int $flags, string $encoding ])
Convert all HTML entities to their applicable characters.
```php
S::create('&amp;')->htmlDecode();
S::htmlDecode('&amp;'); // '&'
```
#### htmlEncode
$stringy->htmlEncode()
S::htmlEncode(string $str [, int $flags, string $encoding ])
Convert all applicable characters to HTML entities.
```php
S::create('&')->htmlEncode();
S::htmlEncode('&'); // '&amp;'
```
#### humanize
$stringy->humanize()
@@ -354,6 +496,36 @@ S::create('author_id')->humanize();
S::humanize('author_id'); // 'Author'
```
#### indexOf
$stringy->indexOf(string $needle [, $offset = 0 ]);
S::indexOf(string $haystack , string $needle [, $offset = 0 [, $encoding = null ]])
Returns the index of the first occurrence of $needle in the string,
and false if not found. Accepts an optional offset from which to begin
the search.
```php
S::create('string', 'UTF-8')->indexOf('ing');
S::indexOf('string', 'ing'); // 3
```
#### indexOfLast
$stringy->indexOfLast(string $needle [, $offset = 0 ]);
S::indexOfLast(string $haystack , string $needle [, $offset = 0 [, $encoding = null ]])
Returns the index of the last occurrence of $needle in the string,
and false if not found. Accepts an optional offset from which to begin
the search.
```php
S::create('string', 'UTF-8')->indexOfLast('ing');
S::indexOfLast('string string', 'ing'); // 10
```
#### insert
$stringy->insert(int $index, string $substring)
@@ -669,7 +841,7 @@ S::replace('fòô bàř fòô bàř', 'fòô ', '', 'UTF-8'); // 'bàř bàř'
$stringy->reverse()
S::reverse(string $str, [, string $encoding ])
S::reverse(string $str [, string $encoding ])
Returns a reversed string. A multibyte version of strrev().
@@ -680,9 +852,9 @@ S::reverse('fòô bàř', 'UTF-8'); // 'řàb ôòf'
#### safeTruncate
$stringy->safeTruncate(int $length, [, string $substring = '' ])
$stringy->safeTruncate(int $length [, string $substring = '' ])
S::safeTruncate(string $str, int $length, [, string $substring = '' [, string $encoding ]])
S::safeTruncate(string $str, int $length [, string $substring = '' [, string $encoding ]])
Truncates the string to a given length, while ensuring that it does not
split words. If $substring is provided, and truncating occurs, the
@@ -816,10 +988,11 @@ S::titleize('i like to watch DVDs at home', $ignore, 'UTF-8');
$stringy->toAscii()
S::toAscii(string $str)
S::toAscii(string $str [, boolean $removeUnsupported = true])
Returns an ASCII version of the string. A set of non-ASCII characters are
replaced with their closest ASCII counterparts, and the rest are removed.
replaced with their closest ASCII counterparts, and the rest are removed
unless instructed otherwise.
```php
S::create('fòô bàř')->toAscii();
@@ -844,7 +1017,7 @@ S::toLowerCase('FÒÔ BÀŘ', 'UTF-8'); // 'fòô bàř'
$stringy->toSpaces([ tabLength = 4 ])
S::toSpaces(string $str, [, int $tabLength = 4 ])
S::toSpaces(string $str [, int $tabLength = 4 ])
Converts each tab in the string to some number of spaces, as defined by
$tabLength. By default, each tab is converted to 4 consecutive spaces.
@@ -858,7 +1031,7 @@ S::toSpaces(' String speech = "Hi"'); // ' String speech = "Hi"'
$stringy->toTabs([ tabLength = 4 ])
S::toTabs(string $str, [, int $tabLength = 4 ])
S::toTabs(string $str [, int $tabLength = 4 ])
Converts each occurrence of some consecutive number of spaces, as defined
by $tabLength, to a tab. By default, each 4 consecutive spaces are
@@ -869,6 +1042,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()
@@ -885,22 +1071,54 @@ S::toUpperCase('fòô bàř', 'UTF-8'); // 'FÒÔ BÀŘ'
#### trim
$stringy->trim()
$stringy->trim([, string $chars])
S::trim(string $str)
S::trim(string $str [, string $chars [, string $encoding ]])
Returns the trimmed string. An alias for PHP's trim() function.
Returns a string with whitespace removed from the start and end of the
string. Supports the removal of unicode whitespace. Accepts an optional
string of characters to strip instead of the defaults.
```php
S::create('fòô bàř', 'UTF-8')->trim();
S::trim(' fòô bàř '); // 'fòô bàř'
S::create(' fòô bàř ', 'UTF-8')->trim();
S::trim(' fòô bàř '); // 'fòô bàř'
```
#### trimLeft
$stringy->trimLeft([, string $chars])
S::trimLeft(string $str [, string $chars [, string $encoding ]])
Returns a string with whitespace removed from the start of the string.
Supports the removal of unicode whitespace. Accepts an optional
string of characters to strip instead of the defaults.
```php
S::create(' fòô bàř ', 'UTF-8')->trimLeft();
S::trimLeft(' fòô bàř '); // 'fòô bàř '
```
#### trimRight
$stringy->trimRight([, string $chars])
S::trimRight(string $str [, string $chars [, string $encoding ]])
Returns a string with whitespace removed from the end of the string.
Supports the removal of unicode whitespace. Accepts an optional
string of characters to strip instead of the defaults.
```php
S::create(' fòô bàř ', 'UTF-8')->trimRight();
S::trimRight(' fòô bàř '); // ' fòô bàř'
```
#### truncate
$stringy->truncate(int $length, [, string $substring = '' ])
$stringy->truncate(int $length [, string $substring = '' ])
S::truncate(string $str, int $length, [, string $substring = '' [, string $encoding ]])
S::truncate(string $str, int $length [, string $substring = '' [, string $encoding ]])
Truncates the string to a given length. If $substring is provided, and
truncating occurs, the string is further truncated so that the substring
@@ -954,6 +1172,15 @@ 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
* [SubStringy](https://github.com/TCB13/SubStringy):
Advanced substring methods
## Tests
From the project directory, tests can be ran using `phpunit`

View File

@@ -15,13 +15,21 @@
}
],
"require": {
"php": ">=5.3.0"
"php": ">=5.3.0",
"ext-mbstring": "*"
},
"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/" },
"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

@@ -97,6 +97,22 @@ class StaticStringy
return (string) Stringy::create($str, $encoding)->underscored();
}
/**
* Returns a lowercase and trimmed string separated by the given delimiter.
* Delimiters are inserted before uppercase characters (with the exception
* of the first character of the string), and in place of spaces, dashes,
* and underscores. Alpha delimiters are not converted to lowercase.
*
* @param string $str String to convert
* @param string $delimiter Sequence used to separate parts of the string
* @param string $encoding The character encoding
* @return string String with delimiter
*/
public static function delimit($str, $delimiter, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->delimit($delimiter);
}
/**
* Returns a case swapped version of the string.
*
@@ -166,14 +182,17 @@ class StaticStringy
/**
* Returns an ASCII version of the string. A set of non-ASCII characters are
* replaced with their closest ASCII counterparts, and the rest are removed.
* replaced with their closest ASCII counterparts, and the rest are removed
* unless instructed otherwise.
*
* @param string $str A string with non-ASCII characters
* @param string $str A string with non-ASCII characters
* @param bool $removeUnsupported Whether or not to remove the
* unsupported characters
* @return string A string containing only ASCII characters
*/
public static function toAscii($str)
public static function toAscii($str, $removeUnsupported = true)
{
return (string) Stringy::create($str)->toAscii();
return (string) Stringy::create($str)->toAscii($removeUnsupported);
}
/**
@@ -323,6 +342,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 +401,76 @@ 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);
}
/**
* Returns the index of the first occurrence of $needle in the string,
* and false if not found. Accepts an optional offset from which to begin
* the search.
*
* @param string $haystack String to search
* @param string $needle Substring to look for
* @param int $offset Offset from which to search
* @return int|bool The occurrence's index if found, otherwise false
*/
public static function indexOf($haystack, $needle, $offset = 0,
$encoding = null)
{
return Stringy::create($haystack, $encoding)
->indexOf($needle, $offset);
}
/**
* Returns the index of the last occurrence of $needle in the string,
* and false if not found. Accepts an optional offset from which to begin
* the search.
*
* @param string $haystack String to search
* @param string $needle Substring to look for
* @param int $offset Offset from which to search
* @return int|bool The last occurrence's index if found, otherwise false
*/
public static function indexOfLast($haystack, $needle, $offset = 0,
$encoding = null)
{
return Stringy::create($haystack, $encoding)
->indexOfLast($needle, $offset);
}
/**
* Surrounds a string with the given substring.
*
@@ -428,7 +529,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);
@@ -460,14 +561,48 @@ class StaticStringy
}
/**
* Returns the trimmed string. An alias for PHP's trim() function.
* Returns a string with whitespace removed from the start and end of the
* string. Supports the removal of unicode whitespace. Accepts an optional
* string of characters to strip instead of the defaults.
*
* @param string $str String to trim
* @param string $str String to trim
* @param string $chars Optional string of characters to strip
* @param string $encoding The character encoding
* @return string Trimmed $str
*/
public static function trim($str)
public static function trim($str, $chars = null, $encoding = null)
{
return trim($str);
return (string) Stringy::create($str, $encoding)->trim($chars);
}
/**
* Returns a string with whitespace removed from the start of the string.
* Supports the removal of unicode whitespace. Accepts an optional
* string of characters to strip instead of the defaults.
*
* @param string $str String to trim
* @param string $chars Optional string of characters to strip
* @param string $encoding The character encoding
* @return string Trimmed $str
*/
public static function trimLeft($str, $chars = null, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->trimLeft($chars);
}
/**
* Returns a string with whitespace removed from the end of the string.
* Supports the removal of unicode whitespace. Accepts an optional
* string of characters to strip instead of the defaults.
*
* @param string $str String to trim
* @param string $chars Optional string of characters to strip
* @param string $encoding The character encoding
* @return string Trimmed $str
*/
public static function trimRight($str, $chars = null, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->trimRight($chars);
}
/**
@@ -635,6 +770,32 @@ class StaticStringy
return (string) Stringy::create($str, $encoding)->removeRight($substring);
}
/**
* Returns true if the string contains a lower case char, false
* otherwise.
*
* @param string $str String to check
* @param string $encoding The character encoding
* @return bool Whether or not $str contains a lower case character.
*/
public static function hasLowerCase($str, $encoding = null)
{
return Stringy::create($str, $encoding)->hasLowerCase();
}
/**
* Returns true if the string contains an upper case char, false
* otherwise.
*
* @param string $str String to check
* @param string $encoding The character encoding
* @return bool Whether or not $str contains an upper case character.
*/
public static function hasUpperCase($str, $encoding = null)
{
return Stringy::create($str, $encoding)->hasUpperCase();
}
/**
* Returns true if the string contains only alphabetic chars, false
* otherwise.
@@ -767,7 +928,7 @@ class StaticStringy
public static function replace($str, $search, $replacement, $encoding = null)
{
return (string) Stringy::create($str, $encoding)
->replace($search,$replacement);
->replace($search, $replacement);
}
/**
@@ -789,4 +950,30 @@ class StaticStringy
return (string) Stringy::create($str, $encoding)
->regexReplace($pattern, $replacement, $options, $encoding);
}
/**
* Convert all applicable characters to HTML entities.
*
* @param string $str The string to encode.
* @param int|null $flags See http://php.net/manual/en/function.htmlentities.php
* @param string $encoding The character encoding
* @return Stringy Object with the resulting $str after being html encoded.
*/
public static function htmlEncode($str, $flags = ENT_COMPAT, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->htmlEncode($flags);
}
/**
* Convert all HTML entities to their applicable characters.
*
* @param string $str The string to decode.
* @param int|null $flags See http://php.net/manual/en/function.html-entity-decode.php
* @param string $encoding The character encoding
* @return Stringy Object with the resulting $str after being html decoded.
*/
public static function htmlDecode($str, $flags = ENT_COMPAT, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->htmlDecode($flags);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,39 @@
<?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 indexOfProvider()
{
return array(
array(2, 'This is the string', 'is'),
array(2, 'This is the string', 'is', 0, 'UTF-8'),
array(false, 'This is the string', 'not-found', 0, 'UTF-8'),
array(32, 'This is the string... and there is another thing', 'is', 10, 'UTF-8'),
);
}
public function indexOfLastProvider()
{
return array(
array(5, 'This is the string', 'is'),
array(5, 'This is the string', 'is', 0, 'UTF-8'),
array(false, 'This is the string', 'not-found', 0, 'UTF-8'),
array(32, 'This is the string... and there is another thing', 'is', 0, 'UTF-8'),
);
}
public function charsProvider()
{
return array(
@@ -113,6 +145,26 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
);
}
public function delimitProvider()
{
return array(
array('test*case', 'testCase', '*'),
array('test&case', 'Test-Case', '&'),
array('test#case', 'test case', '#'),
array('test**case', 'test -case', '**'),
array('~!~test~!~case', '-test - case', '~!~'),
array('test*case', 'test_case', '*'),
array('test%c%test', ' test c test', '%'),
array('test+u+case', 'TestUCase', '+'),
array('test=c=c=test', 'TestCCTest', '='),
array('string#>with1number', 'string_with1number', '#>'),
array('1test2case', '1test2case', '*'),
array('test ύα σase', 'test Σase', ' ύα ', 'UTF-8',),
array('στανιλαcase', 'Στανιλ case', 'α', 'UTF-8',),
array('σashΘcase', 'Σash Case', 'Θ', 'UTF-8')
);
}
public function swapCaseProvider()
{
return array(
@@ -162,8 +214,12 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
array('test string', 'test string'),
array('Ο συγγραφέας', ' Ο συγγραφέας '),
array('123', ' 123 '),
array('1 2 3', '  1  2  3  ', 'UTF-8'), // ideographic spaces
array('', ' ', 'UTF-8'), // thin space and space
array('', ' ', 'UTF-8'), // no-break space (U+00A0)
array('', ' ', 'UTF-8'), // spaces U+2000 to U+200A
array('', '', 'UTF-8'), // narrow no-break space (U+202F)
array('', '', 'UTF-8'), // medium mathematical space (U+205F)
array('', ' ', 'UTF-8'), // ideographic space (U+3000)
array('1 2 3', '  123  ', 'UTF-8'),
array('', ' '),
array('', ''),
);
@@ -174,17 +230,28 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
return array(
array('foo bar', 'fòô bàř'),
array(' TEST ', ' ŤÉŚŢ '),
array('φ = z = 3', 'φ = ź = 3'),
array('f = z = 3', 'φ = ź = 3'),
array('perevirka', 'перевірка'),
array('lysaya gora', 'лысая гора'),
array('shchuka', 'щука')
array('shchuka', 'щука'),
array('', '漢字'),
array('xin chao the gioi', 'xin chào thế giới'),
array('XIN CHAO THE GIOI', 'XIN CHÀO THẾ GIỚI'),
array('dam phat chet luon', 'đấm phát chết luôn'),
array(' ', ' '), // no-break space (U+00A0)
array(' ', ' '), // spaces U+2000 to U+200A
array(' ', ''), // narrow no-break space (U+202F)
array(' ', ''), // medium mathematical space (U+205F)
array(' ', ' '), // ideographic space (U+3000)
array('', '𐍉'), // some uncommon, unsupported character (U+10349)
array('𐍉', '𐍉', false),
);
}
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 +259,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 +277,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 +290,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 +304,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')
);
}
@@ -318,6 +384,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(
@@ -333,46 +410,126 @@ 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àř'),
array('unrecognized-chars-like', 'unrecognized chars like συγγρ'),
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-_', '_')
);
}
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(
@@ -483,7 +640,49 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
array('fòô bàř', ' fòô bàř '),
array('fòô bàř', ' fòô bàř'),
array('fòô bàř', 'fòô bàř '),
array('fòô bàř', "\n\t fòô bàř \n\t")
array(' foo bar ', "\n\t foo bar \n\t", "\n\t"),
array('fòô bàř', "\n\t fòô bàř \n\t", null, 'UTF-8'),
array('fòô', 'fòô', null, 'UTF-8'), // narrow no-break space (U+202F)
array('fòô', 'fòô', null, 'UTF-8'), // medium mathematical space (U+205F)
array('fòô', ' fòô', null, 'UTF-8') // spaces U+2000 to U+200A
);
}
public function trimLeftProvider()
{
return array(
array('foo bar ', ' foo bar '),
array('foo bar', ' foo bar'),
array('foo bar ', 'foo bar '),
array("foo bar \n\t", "\n\t foo bar \n\t"),
array('fòô bàř ', ' fòô bàř '),
array('fòô bàř', ' fòô bàř'),
array('fòô bàř ', 'fòô bàř '),
array('foo bar', '--foo bar', '-'),
array('fòô bàř', 'òòfòô bàř', 'ò', 'UTF-8'),
array("fòô bàř \n\t", "\n\t fòô bàř \n\t", null, 'UTF-8'),
array('fòô', 'fòô', null, 'UTF-8'), // narrow no-break space (U+202F)
array('fòô', 'fòô', null, 'UTF-8'), // medium mathematical space (U+205F)
array('fòô', ' fòô', null, 'UTF-8') // spaces U+2000 to U+200A
);
}
public function trimRightProvider()
{
return array(
array(' foo bar', ' foo bar '),
array('foo bar', 'foo bar '),
array(' foo bar', ' foo bar'),
array("\n\t foo bar", "\n\t foo bar \n\t"),
array(' fòô bàř', ' fòô bàř '),
array('fòô bàř', 'fòô bàř '),
array(' fòô bàř', ' fòô bàř'),
array('foo bar', 'foo bar--', '-'),
array('fòô bàř', 'fòô bàřòò', 'ò', 'UTF-8'),
array("\n\t fòô bàř", "\n\t fòô bàř \n\t", null, 'UTF-8'),
array('fòô', 'fòô', null, 'UTF-8'), // narrow no-break space (U+202F)
array('fòô', 'fòô', null, 'UTF-8'), // medium mathematical space (U+205F)
array('fòô', 'fòô ', null, 'UTF-8') // spaces U+2000 to U+200A
);
}
@@ -650,6 +849,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'),
@@ -666,6 +867,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'),
@@ -720,8 +923,11 @@ 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'), // thin space
array(true, '  ', 'UTF-8'), // ideographic spaces
array(true, ' ', 'UTF-8'), // no-break space (U+00A0)
array(true, ' ', 'UTF-8'), // spaces U+2000 to U+200A
array(true, '', 'UTF-8'), // narrow no-break space (U+202F)
array(true, '', 'UTF-8'), // medium mathematical space (U+205F)
array(true, ' ', 'UTF-8'), // ideographic space (U+3000)
array(false, ' z', 'UTF-8'),
array(false, ' 1', 'UTF-8'),
);
@@ -730,14 +936,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'),
@@ -761,6 +967,24 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
);
}
public function hasLowerCaseProvider()
{
return array(
array(false, ''),
array(true, 'foobar'),
array(false, 'FOO BAR'),
array(true, 'fOO BAR'),
array(true, 'foO BAR'),
array(true, 'FOO BAr'),
array(true, 'Foobar'),
array(false, 'FÒÔBÀŘ', 'UTF-8'),
array(true, 'fòôbàř', 'UTF-8'),
array(true, 'fòôbàř2', 'UTF-8'),
array(true, 'Fòô bàř', 'UTF-8'),
array(true, 'fòôbÀŘ', 'UTF-8'),
);
}
public function isSerializedProvider()
{
return array(
@@ -788,6 +1012,24 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
);
}
public function hasUpperCaseProvider()
{
return array(
array(false, ''),
array(true, 'FOOBAR'),
array(false, 'foo bar'),
array(true, 'Foo bar'),
array(true, 'FOo bar'),
array(true, 'foo baR'),
array(true, 'fOOBAR'),
array(false, 'fòôbàř', 'UTF-8'),
array(true, 'FÒÔBÀŘ', 'UTF-8'),
array(true, 'FÒÔBÀŘ2', 'UTF-8'),
array(true, 'fÒÔ BÀŘ', 'UTF-8'),
array(true, 'FÒÔBàř', 'UTF-8'),
);
}
public function isHexadecimalProvider()
{
return array(
@@ -835,6 +1077,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 +1097,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'),
@@ -860,4 +1105,26 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase
array('fòô', 'bàř', '[[:alpha:]]{3}', 'fòô', 'msr', 'UTF-8')
);
}
public function htmlEncodeProvider()
{
return array(
array('&amp;', '&'),
array('&quot;', '"'),
array('&#039;', "'", ENT_QUOTES),
array('&lt;', '<'),
array('&gt;', '>'),
);
}
public function htmlDecodeProvider()
{
return array(
array('&', '&amp;'),
array('"', '&quot;'),
array("'", '&#039;', ENT_QUOTES),
array('<', '&lt;'),
array('>', '&gt;'),
);
}
}

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

@@ -1,12 +1,29 @@
<?php
$base = realpath(dirname(__FILE__) . '/..');
require("$base/src/StaticStringy.php");
require __DIR__ . '/../src/StaticStringy.php';
use Stringy\StaticStringy as S;
class StaticStringyTestCase extends CommonTest
{
/**
* @dataProvider indexOfProvider()
*/
public function testIndexOf($expected, $str, $subStr, $offset = 0, $encoding = null)
{
$result = S::indexOf($str, $subStr, $offset, $encoding);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider indexOfLastProvider()
*/
public function testIndexOfLast($expected, $str, $subStr, $offset = 0, $encoding = null)
{
$result = S::indexOfLast($str, $subStr, $offset, $encoding);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider charsProvider()
*/
@@ -134,9 +151,9 @@ class StaticStringyTestCase extends CommonTest
/**
* @dataProvider toAsciiProvider()
*/
public function testToAscii($expected, $str)
public function testToAscii($expected, $str, $removeUnsupported = true)
{
$result = S::toAscii($str);
$result = S::toAscii($str, $removeUnsupported);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
@@ -245,6 +262,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()
*/
@@ -276,6 +303,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()
*/
@@ -353,9 +402,31 @@ class StaticStringyTestCase extends CommonTest
/**
* @dataProvider trimProvider()
*/
public function testTrim($expected, $str)
public function testTrim($expected, $str, $chars = null, $encoding = null)
{
$result = S::trim($str);
$result = S::trim($str, $chars, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider trimLeftProvider()
*/
public function testTrimLeft($expected, $str, $chars = null,
$encoding = null)
{
$result = S::trimLeft($str, $chars, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider trimRightProvider()
*/
public function testTrimRight($expected, $str, $chars = null,
$encoding = null)
{
$result = S::trimRight($str, $chars, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
@@ -534,6 +605,16 @@ class StaticStringyTestCase extends CommonTest
$this->assertEquals($expected, $result);
}
/**
* @dataProvider hasLowerCaseProvider()
*/
public function testHasLowerCase($expected, $str, $encoding = null)
{
$result = S::hasLowerCase($str, $encoding);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider isSerializedProvider()
*/
@@ -554,6 +635,16 @@ class StaticStringyTestCase extends CommonTest
$this->assertEquals($expected, $result);
}
/**
* @dataProvider hasUpperCaseProvider()
*/
public function testHasUpperCase($expected, $str, $encoding = null)
{
$result = S::hasUpperCase($str, $encoding);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider isHexadecimalProvider()
*/
@@ -596,4 +687,24 @@ class StaticStringyTestCase extends CommonTest
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider htmlEncodeProvider()
*/
public function testHtmlEncode($expected, $str, $flags = ENT_COMPAT, $encoding = null)
{
$result = S::htmlEncode($str, $flags, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider htmlDecodeProvider()
*/
public function testHtmlDecode($expected, $str, $flags = ENT_COMPAT, $encoding = null)
{
$result = S::htmlDecode($str, $flags, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
}

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;
@@ -10,9 +9,9 @@ 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->encoding);
$this->assertEquals('UTF-8', $stringy->getEncoding());
}
/**
@@ -57,15 +56,15 @@ 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->encoding);
$this->assertEquals('UTF-8', $stringy->getEncoding());
}
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);
}
@@ -154,6 +153,24 @@ class StringyTestCase extends CommonTest
unset($stringy[1]);
}
/**
* @dataProvider indexOfProvider()
*/
public function testIndexOf($expected, $str, $subStr, $offset = 0, $encoding = null)
{
$result = S::create($str, $encoding)->indexOf($subStr, $offset);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider indexOfLastProvider()
*/
public function testIndexOfLast($expected, $str, $subStr, $offset = 0, $encoding = null)
{
$result = S::create($str, $encoding)->indexOfLast($subStr, $offset);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider charsProvider()
*/
@@ -173,7 +190,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);
}
@@ -184,7 +201,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);
}
@@ -196,7 +213,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);
}
@@ -208,7 +225,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);
}
@@ -220,7 +237,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);
}
@@ -232,7 +249,19 @@ 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);
}
/**
* @dataProvider delimitProvider()
*/
public function testDelimit($expected, $str, $delimiter, $encoding = null)
{
$stringy = S::create($str, $encoding);
$result = $stringy->delimit($delimiter);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -244,7 +273,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);
}
@@ -257,7 +286,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);
}
@@ -269,7 +298,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);
}
@@ -281,7 +310,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);
}
@@ -293,7 +322,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);
}
@@ -301,11 +330,11 @@ class StringyTestCase extends CommonTest
/**
* @dataProvider toAsciiProvider()
*/
public function testToAscii($expected, $str)
public function testToAscii($expected, $str, $removeUnsupported = true)
{
$stringy = S::create($str);
$result = $stringy->toAscii();
$this->assertInstanceOf('Stringy\Stringy', $result);
$result = $stringy->toAscii($removeUnsupported);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -318,7 +347,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);
}
@@ -340,7 +369,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);
}
@@ -353,7 +382,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);
}
@@ -366,7 +395,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);
}
@@ -404,7 +433,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);
}
@@ -416,7 +445,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);
}
@@ -428,7 +457,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);
}
@@ -440,7 +481,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);
}
@@ -452,7 +493,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);
}
@@ -470,6 +511,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()
*/
@@ -477,7 +544,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);
}
@@ -490,7 +557,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);
}
@@ -503,7 +570,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);
}
@@ -515,7 +595,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);
}
@@ -529,7 +609,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));
@@ -546,11 +626,37 @@ class StringyTestCase extends CommonTest
/**
* @dataProvider trimProvider()
*/
public function testTrim($expected, $str)
public function testTrim($expected, $str, $chars = null, $encoding = null)
{
$stringy = S::create($str);
$result = $stringy->trim();
$this->assertInstanceOf('Stringy\Stringy', $result);
$stringy = S::create($str, $encoding);
$result = $stringy->trim($chars);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
/**
* @dataProvider trimLeftProvider()
*/
public function testTrimLeft($expected, $str, $chars = null,
$encoding = null)
{
$stringy = S::create($str, $encoding);
$result = $stringy->trimLeft($chars);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
/**
* @dataProvider trimRightProvider()
*/
public function testTrimRight($expected, $str, $chars = null,
$encoding = null)
{
$stringy = S::create($str, $encoding);
$result = $stringy->trimRight($chars);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
@@ -563,7 +669,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);
}
@@ -576,7 +695,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);
}
@@ -601,7 +720,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);
}
@@ -613,7 +732,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);
}
@@ -625,7 +744,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);
}
@@ -637,7 +756,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);
}
@@ -649,7 +768,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);
}
@@ -661,7 +780,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);
}
@@ -673,7 +792,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);
}
@@ -685,7 +804,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);
}
@@ -750,6 +869,18 @@ class StringyTestCase extends CommonTest
$this->assertEquals($str, $stringy);
}
/**
* @dataProvider hasLowerCaseProvider()
*/
public function testHasLowerCase($expected, $str, $encoding = null)
{
$stringy = S::create($str, $encoding);
$result = $stringy->hasLowerCase();
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
/**
* @dataProvider isSerializedProvider()
*/
@@ -774,6 +905,18 @@ class StringyTestCase extends CommonTest
$this->assertEquals($str, $stringy);
}
/**
* @dataProvider hasUpperCaseProvider()
*/
public function testHasUpperCase($expected, $str, $encoding = null)
{
$stringy = S::create($str, $encoding);
$result = $stringy->hasUpperCase();
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
/**
* @dataProvider isHexadecimalProvider()
*/
@@ -807,7 +950,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);
}
@@ -820,7 +963,31 @@ 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);
}
/**
* @dataProvider htmlEncodeProvider()
*/
public function testHtmlEncode($expected, $str, $flags = ENT_COMPAT, $encoding = null)
{
$stringy = S::create($str, $encoding);
$result = $stringy->htmlEncode($flags);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
/**
* @dataProvider htmlDecodeProvider()
*/
public function testHtmlDecode($expected, $str, $flags = ENT_COMPAT, $encoding = null)
{
$stringy = S::create($str, $encoding);
$result = $stringy->htmlDecode($flags);
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}