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

55 Commits
2.2.0 ... 2.4.0

Author SHA1 Message Date
Daniel St. Jules
edbda419cb 2.4.0 2017-03-02 15:43:29 -05:00
Daniel St. Jules
e8afcffc7c Add ў and Ў to charsArray 2017-03-02 15:33:26 -05:00
Daniel St. Jules
986260239d Fix safeTruncate tests 2017-03-02 15:18:53 -05:00
forevermatt
841600867d Fix safeTruncate to handle strings without spaces and those where the first word is longer than the desired truncation length
Before this, calling safeTruncate with a string without spaces and a truncate length less than the string length would return an empty string.
2017-03-02 15:18:53 -05:00
Daniel St. Jules
845e8d693d Merge pull request #153 from vpassapera/feature/fix-phpdoc
Fixes phpdoc for objects extending stringy.
2017-03-01 00:33:19 -05:00
Daniel St. Jules
b35270671c Merge pull request #143 from fgambino/patch-1
Add full width character forms to ascii map
2017-02-28 23:54:27 -05:00
Daniel St. Jules
0aab4361bf Merge pull request #157 from OlivierBarbier/master
Reuse substr method
2017-02-28 23:46:09 -05:00
Daniel St. Jules
df777da6ac Add endsWithAny 2017-02-28 23:41:49 -05:00
Daniel St. Jules
ded4d41d44 Use table for linking to methods 2017-02-28 23:31:03 -05:00
Daniel St. Jules
569736327a Fix readme link 2017-02-28 23:24:33 -05:00
Daniel St. Jules
6f2e2851ac Add startsWithAny to readme 2017-02-28 23:23:43 -05:00
Daniel St. Jules
553bf37acb Merge pull request #151 from vikpe/master
Add documentation for stripWhitespace()
2017-02-28 23:16:59 -05:00
Olivier Barbier
916f79221e Reuse substr method 2017-02-16 12:13:56 +01:00
Victor Passapera
d71d4f0ad6 Fixes phpdoc for objects extending stringy. 2017-01-19 22:42:06 -08:00
Daniel St. Jules
de93eab01f Merge pull request #147 from mimmi20/master
New method request: startsWithAny()
2016-12-23 12:46:28 -08:00
Thomas Müller
9b6404d5c3 update array syntax 2016-12-23 21:28:39 +01:00
Viktor Persson
27a4f11f2e Added documentation for stripWhitespace(). 2016-12-22 10:37:27 +01:00
Daniel St. Jules
46de78bda9 Merge pull request #150 from vikpe/master
Add stripWhitespace
2016-12-22 01:03:59 -08:00
Daniel St. Jules
cb14fc2e6b Change private to protected to facilitate extending class 2016-12-21 23:28:07 -08:00
Daniel St. Jules
090a15f2fd Fix #142 - Fix and improve exception in supportsEncoding 2016-12-21 23:25:46 -08:00
Viktor Persson
d80347e72a Add stripWhitespace 2016-12-20 19:40:02 +01:00
Thomas Müller
0491ed8db8 add startsWithAny function 2016-10-31 19:54:19 +01:00
Frank Gambino
eb445b55ef Use utf-8 representation of the wide space char 2016-09-29 09:35:01 -04:00
Frank Gambino
91b153d30e Add wide non-breaking space 2016-09-29 09:26:35 -04:00
Frank Gambino
9ebdf88b71 Add full width character forms to ascii map
Reference: http://www.fileformat.info/info/unicode/block/halfwidth_and_fullwidth_forms/list.htm
2016-09-29 09:19:33 -04:00
Daniel St. Jules
0607751e17 Merge pull request #139 from tomeh/documentation-fixes
Updated documentation.
2016-06-14 13:50:55 -07:00
Tom Harris
6507f0ac44 Updated documentation.
Fixed presumed typos.
2016-06-14 21:13:57 +01:00
Daniel St. Jules
4e214a5195 2.3.2 2016-05-02 08:18:10 -07:00
Daniel St. Jules
fcc2969210 Merge pull request #137 from danielstjules/mbstring
Fix #134: Improve support without mbstring
2016-05-02 08:14:50 -07:00
Daniel St. Jules
30d1742082 Work on full support with mbstring module 2016-05-01 19:16:24 -07:00
Daniel St. Jules
bd90918858 2.3.1 2016-03-21 13:26:21 -07:00
Daniel St. Jules
a2d1ec535a Fix #129: Always use root namespace for mbstring functions 2016-03-21 13:22:27 -07:00
Daniel St. Jules
b953a85d2c Add capture group test to regexReplaceProvider 2016-03-19 17:57:04 -07:00
Daniel St. Jules
e07a07a076 Add capture group example to readme 2016-03-19 17:53:09 -07:00
Daniel St. Jules
c4d785d29f Fix changelog date 2016-03-19 17:34:20 -07:00
Daniel St. Jules
5554477962 2.3.0 2016-03-19 17:33:13 -07:00
Daniel St. Jules
87c1a47355 Support older verisons of composer 2016-03-19 17:21:08 -07:00
Daniel St. Jules
6d558974ba Merge pull request #120 from lucasmichot/feature/master/useless-else
Remove some useless else.
2016-02-10 13:20:49 -08:00
Daniel St. Jules
5a9b987f9a Merge pull request #124 from lucasmichot/feature/master/integrates-polyfill
Add polyfill
2016-02-09 16:59:23 -08:00
Lucas Michot
e3d397fa74 Add polyfill 2016-02-10 01:56:06 +01:00
Daniel St. Jules
ffc3fa5ff9 Merge pull request #112 from lucasmichot/feature/master/polyfill
WIP - Allows Stringy to work without ext-mbstring
2016-02-09 16:43:13 -08:00
Lucas Michot
c3f25577ed Avoid duplicate jobs 2016-02-10 01:38:59 +01:00
Lucas Michot
5a4629662c Add tests matrix 2016-02-10 01:28:12 +01:00
Lucas Michot
823e50a340 Allows Stringy to work without ext-mbstring 2016-01-08 18:35:53 +01:00
Daniel St. Jules
9d77c49fca Merge pull request #117 from lucasmichot/feature/master/phpunit-autoload
Let phpunit load autoload.php
2016-01-08 09:32:17 -08:00
Daniel St. Jules
a074d2a2ac Merge pull request #118 from lucasmichot/feature/master/import
Avoid FQN in code
2016-01-08 09:30:30 -08:00
Daniel St. Jules
b7cfa84219 Merge pull request #119 from lucasmichot/feature/master/export-ignore-editorconfig
Do not export .editorconfig
2016-01-08 09:25:15 -08:00
Lucas Michot
e3be6a56ea Composer install for travisCI tests. 2016-01-08 18:22:09 +01:00
Lucas Michot
bdbd4d7541 Let phpunit load autoload.php 2016-01-08 18:01:20 +01:00
Lucas Michot
8419369f3b Add some imports 2016-01-08 18:01:13 +01:00
Lucas Michot
a3dde38a2f Do not export .editorconfig 2016-01-08 18:00:43 +01:00
Lucas Michot
59ce593086 Remove some useless else. 2016-01-08 18:00:23 +01:00
Daniel St. Jules
54cf92c89c Merge pull request #115 from behzadsh/master
Add Persian characters in Stringy::charsArray()
2015-12-27 11:17:23 -05:00
Behzad Shabani
d320bf8704 Add Persian characters in Stringy::charsArray() 2015-12-27 16:03:33 +03:30
Daniel St. Jules
2de4c4aee3 Add badges 2015-12-26 08:13:47 -08:00
11 changed files with 713 additions and 347 deletions

1
.gitattributes vendored
View File

@@ -1,5 +1,6 @@
* text=auto
.editorconfig export-ignore
.gitattributes export-ignore
.gitignore export-ignore
.travis.yml export-ignore

View File

@@ -1,12 +1,43 @@
language: php
php:
- 5.6
- 5.5
- 5.4
- 5.3
- 7.0
- hhvm
# This triggers builds to run on the new TravisCI infrastructure.
# See: http://docs.travis-ci.com/user/workers/container-based-infrastructure/
sudo: false
matrix:
fast_finish: true
include:
- php: 5.3
env: polyfill='true'
- php: 5.3
env: polyfill='false'
- php: 5.4
env: polyfill='true'
- php: 5.4
env: polyfill='false'
- php: 5.5
env: polyfill='true'
- php: 5.5
env: polyfill='false'
- php: 5.6
env: polyfill='true'
- php: 5.6
env: polyfill='false'
- php: 7.0
env: polyfill='true'
- php: 7.0
env: polyfill='false'
install: travis_retry composer install --no-interaction --prefer-source
before_script:
- travis_retry composer self-update
- travis_retry composer install --no-interaction --prefer-source
- if [[ $polyfill = 'false' ]]; then travis_retry composer remove symfony/polyfill-mbstring; fi
script:
- vendor/bin/phpunit

View File

@@ -1,3 +1,27 @@
### 2.4.0 (2017-03-02)
* Add startsWithAny
* Add endsWithAny
* Add stripWhitespace
* Fix error handling for unsupported encodings
* Change private methods to protected for extending class
* Fix safeTruncate for strings without spaces
* Additional char support in toAscii, e.g. full width chars and wide
non-breaking space
### 2.3.2 (2016-05-02)
* Improve support without mbstring
### 2.3.1 (2016-03-21)
* Always use root namespace for mbstring functions
### 2.3.0 (2016-03-19)
* Add Persian characters in Stringy::charsArray()
* Use symfony/polyfill-mbstring to avoid dependency on ext-mbstring
### 2.2.0 (2015-12-20)
* isJSON now returns false for empty strings

256
README.md
View File

@@ -9,6 +9,8 @@ s('string')->toTitleCase()->ensureRight('y') == 'Stringy'
```
[![Build Status](https://api.travis-ci.org/danielstjules/Stringy.svg?branch=master)](https://travis-ci.org/danielstjules/Stringy)
[![Total Downloads](https://poser.pugx.org/danielstjules/stringy/downloads)](https://packagist.org/packages/danielstjules/stringy)
[![License](https://poser.pugx.org/danielstjules/stringy/license)](https://packagist.org/packages/danielstjules/stringy)
* [Why?](#why)
* [Installation](#installation)
@@ -19,83 +21,128 @@ s('string')->toTitleCase()->ensureRight('y') == 'Stringy'
* [Class methods](#class-methods)
* [create](#createmixed-str--encoding-)
* [Instance methods](#instance-methods)
* [append](#appendstring-string)
* [at](#atint-index)
* [between](#betweenstring-start-string-end--int-offset)
* [camelize](#camelize)
* [chars](#chars)
* [collapseWhitespace](#collapsewhitespace)
* [contains](#containsstring-needle--boolean-casesensitive--true-)
* [containsAll](#containsallarray-needles--boolean-casesensitive--true-)
* [containsAny](#containsanyarray-needles--boolean-casesensitive--true-)
* [countSubstr](#countsubstrstring-substring--boolean-casesensitive--true-)
* [dasherize](#dasherize)
* [delimit](#delimitint-delimiter)
* [endsWith](#endswithstring-substring--boolean-casesensitive--true-)
* [ensureLeft](#ensureleftstring-substring)
* [ensureRight](#ensurerightstring-substring)
* [first](#firstint-n)
* [getEncoding](#getencoding)
* [hasLowerCase](#haslowercase)
* [hasUpperCase](#hasuppercase)
* [htmlDecode](#htmldecode)
* [htmlEncode](#htmlencode)
* [humanize](#humanize)
* [indexOf](#indexofstring-needle--offset--0-)
* [indexOfLast](#indexoflaststring-needle--offset--0-)
* [insert](#insertint-index-string-substring)
* [isAlpha](#isalpha)
* [isAlphanumeric](#isalphanumeric)
* [isBase64](#isbase64)
* [isBlank](#isblank)
* [isHexadecimal](#ishexadecimal)
* [isJson](#isjson)
* [isLowerCase](#islowercase)
* [isSerialized](#isserialized)
* [isUpperCase](#isuppercase)
* [last](#last)
* [length](#length)
* [lines](#lines)
* [longestCommonPrefix](#longestcommonprefixstring-otherstr)
* [longestCommonSuffix](#longestcommonsuffixstring-otherstr)
* [longestCommonSubstring](#longestcommonsubstringstring-otherstr)
* [lowerCaseFirst](#lowercasefirst)
* [pad](#padint-length--string-padstr-----string-padtype--right-)
* [padBoth](#padbothint-length--string-padstr----)
* [padLeft](#padleftint-length--string-padstr----)
* [padRight](#padrightint-length--string-padstr----)
* [prepend](#prependstring-string)
* [regexReplace](#regexreplacestring-pattern-string-replacement--string-options--msr)
* [removeLeft](#removeleftstring-substring)
* [removeRight](#removerightstring-substring)
* [repeat](#repeatmultiplier)
* [replace](#replacestring-search-string-replacement)
* [reverse](#reverse)
* [safeTruncate](#safetruncateint-length--string-substring---)
* [shuffle](#shuffle)
* [slugify](#slugify-string-replacement----)
* [startsWith](#startswithstring-substring--boolean-casesensitive--true-)
* [slice](#sliceint-start--int-end-)
* [split](#splitstring-pattern--int-limit-)
* [substr](#substrint-start--int-length-)
* [surround](#surroundstring-substring)
* [swapCase](#swapcase)
* [tidy](#tidy)
* [titleize](#titleize-array-ignore)
* [toAscii](#toascii)
* [toBoolean](#toboolean)
* [toLowerCase](#tolowercase)
* [toSpaces](#tospaces-tablength--4-)
* [toTabs](#totabs-tablength--4-)
* [toTitleCase](#totitlecase)
* [toUpperCase](#touppercase)
* [trim](#trim-string-chars)
* [trimLeft](#trimleft-string-chars)
* [trimRight](#trimright-string-chars)
* [truncate](#truncateint-length--string-substring---)
* [underscored](#underscored)
* [upperCamelize](#uppercamelize)
* [upperCaseFirst](#uppercasefirst)
<table>
<tr>
<td>[append](#appendstring-string)</td>
<td>[at](#atint-index)</td>
<td>[between](#betweenstring-start-string-end--int-offset)</td>
<td>[camelize](#camelize)</td>
</tr>
<tr>
<td>[chars](#chars)</td>
<td>[collapseWhitespace](#collapsewhitespace)</td>
<td>[contains](#containsstring-needle--boolean-casesensitive--true-)</td>
<td>[containsAll](#containsallarray-needles--boolean-casesensitive--true-)</td>
</tr>
<tr>
<td>[containsAny](#containsanyarray-needles--boolean-casesensitive--true-)</td>
<td>[countSubstr](#countsubstrstring-substring--boolean-casesensitive--true-)</td>
<td>[dasherize](#dasherize)</td>
<td>[delimit](#delimitint-delimiter)</td>
</tr>
<tr>
<td>[endsWith](#endswithstring-substring--boolean-casesensitive--true-)</td>
<td>[endsWithAny](#endsWithAnystring-substrings--boolean-casesensitive--true-)</td>
<td>[ensureLeft](#ensureleftstring-substring)</td>
<td>[ensureRight](#ensurerightstring-substring)</td>
</tr>
<tr>
<td>[first](#firstint-n)</td>
<td>[getEncoding](#getencoding)</td>
<td>[hasLowerCase](#haslowercase)</td>
<td>[hasUpperCase](#hasuppercase)</td>
</tr>
<tr>
<td>[htmlDecode](#htmldecode)</td>
<td>[htmlEncode](#htmlencode)</td>
<td>[humanize](#humanize)</td>
<td>[indexOf](#indexofstring-needle--offset--0-)</td>
</tr>
<tr>
<td>[indexOfLast](#indexoflaststring-needle--offset--0-)</td>
<td>[insert](#insertint-index-string-substring)</td>
<td>[isAlpha](#isalpha)</td>
<td>[isAlphanumeric](#isalphanumeric)</td>
</tr>
<tr>
<td>[isBase64](#isbase64)</td>
<td>[isBlank](#isblank)</td>
<td>[isHexadecimal](#ishexadecimal)</td>
<td>[isJson](#isjson)</td>
</tr>
<tr>
<td>[isLowerCase](#islowercase)</td>
<td>[isSerialized](#isserialized)</td>
<td>[isUpperCase](#isuppercase)</td>
<td>[last](#last)</td>
</tr>
<tr>
<td>[length](#length)</td>
<td>[lines](#lines)</td>
<td>[longestCommonPrefix](#longestcommonprefixstring-otherstr)</td>
<td>[longestCommonSuffix](#longestcommonsuffixstring-otherstr)</td>
</tr>
<tr>
<td>[longestCommonSubstring](#longestcommonsubstringstring-otherstr)</td>
<td>[lowerCaseFirst](#lowercasefirst)</td>
<td>[pad](#padint-length--string-padstr-----string-padtype--right-)</td>
<td>[padBoth](#padbothint-length--string-padstr----)</td>
</tr>
<tr>
<td>[padLeft](#padleftint-length--string-padstr----)</td>
<td>[padRight](#padrightint-length--string-padstr----)</td>
<td>[prepend](#prependstring-string)</td>
<td>[regexReplace](#regexreplacestring-pattern-string-replacement--string-options--msr)</td>
</tr>
<tr>
<td>[removeLeft](#removeleftstring-substring)</td>
<td>[removeRight](#removerightstring-substring)</td>
<td>[repeat](#repeatmultiplier)</td>
<td>[replace](#replacestring-search-string-replacement)</td>
</tr>
<tr>
<td>[reverse](#reverse)</td>
<td>[safeTruncate](#safetruncateint-length--string-substring---)</td>
<td>[shuffle](#shuffle)</td>
<td>[slugify](#slugify-string-replacement----)</td>
</tr>
<tr>
<td>[startsWith](#startswithstring-substring--boolean-casesensitive--true-)</td>
<td>[startsWithAny](#startswithanystring-substrings--boolean-casesensitive--true-)</td>
<td>[slice](#sliceint-start--int-end-)</td>
<td>[split](#splitstring-pattern--int-limit-)</td>
</tr>
<tr>
<td>[stripWhitespace](#stripwhitespace)</td>
<td>[substr](#substrint-start--int-length-)</td>
<td>[surround](#surroundstring-substring)</td>
<td>[swapCase](#swapcase)</td>
</tr>
<tr>
<td>[tidy](#tidy)</td>
<td>[titleize](#titleize-array-ignore)</td>
<td>[toAscii](#toascii)</td>
<td>[toBoolean](#toboolean)</td>
</tr>
<tr>
<td>[toLowerCase](#tolowercase)</td>
<td>[toSpaces](#tospaces-tablength--4-)</td>
<td>[toTabs](#totabs-tablength--4-)</td>
<td>[toTitleCase](#totitlecase)</td>
</tr>
<tr>
<td>[toUpperCase](#touppercase)</td>
<td>[trim](#trim-string-chars)</td>
<td>[trimLeft](#trimleft-string-chars)</td>
<td>[trimRight](#trimright-string-chars)</td>
</tr>
<tr>
<td>[truncate](#truncateint-length--string-substring---)</td>
<td>[underscored](#underscored)</td>
<td>[upperCamelize](#uppercamelize)</td>
<td>[upperCaseFirst](#uppercasefirst)</td>
</tr>
</table>
* [Extensions](#extensions)
* [Tests](#tests)
* [License](#license)
@@ -129,7 +176,7 @@ in your composer.json file:
```json
"require": {
"danielstjules/stringy": "~2.2"
"danielstjules/stringy": "~2.4"
}
```
@@ -152,11 +199,13 @@ And in either case, I'd suggest using an alias.
use Stringy\Stringy as S;
```
Please note that Stringy relies on the `mbstring` PHP module for its underlying
multibyte support. This is a non-default, but very common module. For example,
with debian and ubuntu, it's included in libapache2-mod-php5, php5-cli, and
php5-fpm. For OSX users, it's a default for any version of PHP installed with
homebrew. If compiling PHP from scratch, it can be included with the
Please note that Stringy relies on the `mbstring` module for its underlying
multibyte support. If the module is not found, Stringy will use
[symfony/polyfill-mbstring](https://github.com/symfony/polyfill-mbstring).
ex-mbstring is a non-default, but very common module. For example, with debian
and ubuntu, it's included in libapache2-mod-php5, php5-cli, and php5-fpm. For
OSX users, it's a default for any version of PHP installed with homebrew.
If compiling PHP from scratch, it can be included with the
`--enable-mbstring` flag.
## OO and Chaining
@@ -235,9 +284,9 @@ integer, boolean, etc.
```php
use Stringy\StaticStringy as S;
// Translates to Stringy::create('fòôbàř', 'UTF-8')->slice(0, 3);
// Translates to Stringy::create('fòôbàř')->slice(0, 3);
// Returns a Stringy object with the string "fòô"
S::slice('fòôbàř', 0, 3, 'UTF-8');
S::slice('fòôbàř', 0, 3);
```
## Class methods
@@ -251,7 +300,7 @@ then returns the initialized object. Throws an InvalidArgumentException
if the first argument is an array or object without a __toString method.
```php
$stringy = S::create('fòôbàř', 'UTF-8'); // 'fòôbàř'
$stringy = S::create('fòôbàř'); // 'fòôbàř'
```
## Instance Methods
@@ -387,6 +436,16 @@ setting $caseSensitive to false.
s('fòôbàř')->endsWith('bàř', true); // true
```
##### endsWithAny(string[] $substrings [, boolean $caseSensitive = true ])
Returns true if the string ends with any of $substrings, false otherwise.
By default, the comparison is case-sensitive, but can be made insensitive
by setting $caseSensitive to false.
```php
s('fòôbàř')->endsWith(['bàř', 'baz'], true); // true
```
##### ensureLeft(string $substring)
Ensures that the string begins with $substring. If it doesn't, it's prepended.
@@ -416,7 +475,7 @@ s('fòôbàř')->first(3); // 'fòô'
Returns the encoding used by the Stringy object.
```php
s('fòôbàř', 'UTF-8')->getEncoding(); // 'UTF-8'
s('fòôbàř')->getEncoding(); // 'UTF-8'
```
##### hasLowerCase()
@@ -682,7 +741,8 @@ to a lack of support in the bundled version of Oniguruma in PHP < 5.6,
and current versions of HHVM (3.8 and below).
```php
s('fòô ')->regexReplace('f[òô]+\s', 'bàř', 'msr'); // 'bàř'
s('fòô ')->regexReplace('f[òô]+\s', 'bàř'); // 'bàř'
s('fò')->regexReplace('(ò)', '\\1ô'); // 'fòô'
```
##### removeLeft(string $substring)
@@ -768,6 +828,16 @@ by setting $caseSensitive to false.
s('FÒÔbàřbaz')->startsWith('fòôbàř', false); // true
```
##### startsWithAny(string[] $substrings [, boolean $caseSensitive = true ])
Returns true if the string begins with any of $substrings, false
otherwise. By default the comparison is case-sensitive, but can be made
insensitive by setting $caseSensitive to false.
```php
s('FÒÔbàřbaz')->startsWith(['fòô', 'bàř'], false); // true
```
##### slice(int $start [, int $end ])
Returns the substring beginning at $start, and up to, but not including
@@ -789,6 +859,16 @@ results.
s('foo,bar,baz')->split(',', 2); // ['foo', 'bar']
```
##### stripWhitespace()
Strip all whitespace characters. This includes tabs and newline
characters, as well as multibyte whitespace such as the thin space
and ideographic space.
```php
s(' Ο συγγραφέας ')->stripWhitespace(); // 'Οσυγγραφέας'
```
##### substr(int $start [, int $length ])
Returns the substring beginning at $start with the specified $length.

View File

@@ -16,7 +16,7 @@
],
"require": {
"php": ">=5.3.0",
"ext-mbstring": "*"
"symfony/polyfill-mbstring": "~1.1"
},
"require-dev": {
"phpunit/phpunit": "~4.0"

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit processIsolation="false"
<phpunit bootstrap="vendor/autoload.php"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false">
<testsuites>

View File

@@ -2,6 +2,10 @@
namespace Stringy;
use BadMethodCallException;
use ReflectionClass;
use ReflectionMethod;
/**
* Class StaticStringy
*
@@ -107,12 +111,14 @@ class StaticStringy
* @param mixed[] $arguments
*
* @return Stringy
*
* @throws \BadMethodCallException
*/
public static function __callStatic($name, $arguments)
{
if (!static::$methodArgs) {
$stringyClass = new \ReflectionClass('Stringy\Stringy');
$methods = $stringyClass->getMethods(\ReflectionMethod::IS_PUBLIC);
$stringyClass = new ReflectionClass('Stringy\Stringy');
$methods = $stringyClass->getMethods(ReflectionMethod::IS_PUBLIC);
foreach ($methods as $method) {
$params = $method->getNumberOfParameters() + 2;
@@ -121,7 +127,7 @@ class StaticStringy
}
if (!isset(static::$methodArgs[$name])) {
throw new \BadMethodCallException($name . ' is not a valid method');
throw new BadMethodCallException($name . ' is not a valid method');
}
$numArgs = count($arguments);

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,5 @@
<?php
require __DIR__ . '/../src/Create.php';
use function Stringy\create as s;
class CreateTestCase extends PHPUnit_Framework_TestCase

View File

@@ -1,7 +1,5 @@
<?php
require __DIR__ . '/../src/StaticStringy.php';
use Stringy\StaticStringy as S;
class StaticStringyTestCase extends PHPUnit_Framework_TestCase

View File

@@ -1,7 +1,5 @@
<?php
require __DIR__ . '/../src/Stringy.php';
use Stringy\Stringy as S;
class StringyTestCase extends PHPUnit_Framework_TestCase
@@ -846,6 +844,36 @@ class StringyTestCase extends PHPUnit_Framework_TestCase
);
}
/**
* @dataProvider startsWithProviderAny()
*/
public function testStartsWithAny($expected, $str, $substrings,
$caseSensitive = true, $encoding = null)
{
$stringy = S::create($str, $encoding);
$result = $stringy->startsWithAny($substrings, $caseSensitive);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
public function startsWithProviderAny()
{
return array(
array(true, 'foo bars', array('foo bar')),
array(true, 'FOO bars', array('foo bar'), false),
array(true, 'FOO bars', array('foo bar', 'foo BAR'), false),
array(true, 'FÒÔ bàřs', array('foo bar', 'fòô bàř'), false, 'UTF-8'),
array(true, 'fòô bàřs', array('foo bar', 'fòô BÀŘ'), false, 'UTF-8'),
array(false, 'foo bar', array('bar')),
array(false, 'foo bar', array('foo bars')),
array(false, 'FOO bar', array('foo bars')),
array(false, 'FOO bars', array('foo BAR')),
array(false, 'FÒÔ bàřs', array('fòô bàř'), true, 'UTF-8'),
array(false, 'fòô bàřs', array('fòô BÀŘ'), true, 'UTF-8'),
);
}
/**
* @dataProvider endsWithProvider()
*/
@@ -876,6 +904,36 @@ class StringyTestCase extends PHPUnit_Framework_TestCase
);
}
/**
* @dataProvider endsWithAnyProvider()
*/
public function testEndsWithAny($expected, $str, $substrings,
$caseSensitive = true, $encoding = null)
{
$stringy = S::create($str, $encoding);
$result = $stringy->endsWithAny($substrings, $caseSensitive);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
public function endsWithAnyProvider()
{
return array(
array(true, 'foo bars', array('foo', 'o bars')),
array(true, 'FOO bars', array('foo', 'o bars'), false),
array(true, 'FOO bars', array('foo', 'o BARs'), false),
array(true, 'FÒÔ bàřs', array('foo', 'ô bàřs'), false, 'UTF-8'),
array(true, 'fòô bàřs', array('foo', 'ô BÀŘs'), false, 'UTF-8'),
array(false, 'foo bar', array('foo')),
array(false, 'foo bar', array('foo', 'foo bars')),
array(false, 'FOO bar', array('foo', 'foo bars')),
array(false, 'FOO bars', array('foo', 'foo BARS')),
array(false, 'FÒÔ bàřs', array('fòô', 'fòô bàřs'), true, 'UTF-8'),
array(false, 'fòô bàřs', array('fòô', 'fòô BÀŘS'), true, 'UTF-8'),
);
}
/**
* @dataProvider toBooleanProvider()
*/
@@ -1351,18 +1409,18 @@ class StringyTestCase extends PHPUnit_Framework_TestCase
array('Test foo...', 'Test foo bar', 11, '...'),
array('Test...', 'Test foo bar', 8, '...'),
array('Test...', 'Test foo bar', 7, '...'),
array('...', 'Test foo bar', 4, '...'),
array('T...', 'Test foo bar', 4, '...'),
array('Test....', 'Test foo bar', 11, '....'),
array('Test fòô bàř', 'Test fòô bàř', 12, '', 'UTF-8'),
array('Test fòô', 'Test fòô bàř', 11, '', 'UTF-8'),
array('Test fòô', 'Test fòô bàř', 8, '', 'UTF-8'),
array('Test', 'Test fòô bàř', 7, '', 'UTF-8'),
array('Test', 'Test fòô bàř', 4, '', 'UTF-8'),
array('Test fòô bàř', 'Test fòô bàř', 12, 'ϰϰ', 'UTF-8'),
array('Test fòôϰϰ', 'Test fòô bàř', 11, 'ϰϰ', 'UTF-8'),
array('Testϰϰ', 'Test fòô bàř', 8, 'ϰϰ', 'UTF-8'),
array('Testϰϰ', 'Test fòô bàř', 7, 'ϰϰ', 'UTF-8'),
array('ϰϰ', 'Test fòô bàř', 4, 'ϰϰ', 'UTF-8'),
array('Tëst fòô bàř', 'Tëst fòô bàř', 12, '', 'UTF-8'),
array('Tëst fòô', 'Tëst fòô bàř', 11, '', 'UTF-8'),
array('Tëst fòô', 'Tëst fòô bàř', 8, '', 'UTF-8'),
array('Tëst', 'Tëst fòô bàř', 7, '', 'UTF-8'),
array('Tëst', 'Tëst fòô bàř', 4, '', 'UTF-8'),
array('Tëst fòô bàř', 'Tëst fòô bàř', 12, 'ϰϰ', 'UTF-8'),
array('Tëst fòôϰϰ', 'Tëst fòô bàř', 11, 'ϰϰ', 'UTF-8'),
array('Tëstϰϰ', 'Tëst fòô bàř', 8, 'ϰϰ', 'UTF-8'),
array('Tëstϰϰ', 'Tëst fòô bàř', 7, 'ϰϰ', 'UTF-8'),
array('ϰϰ', 'Tëst fòô bàř', 4, 'ϰϰ', 'UTF-8'),
array('What are your plans...', 'What are your plans today?', 22, '...')
);
}
@@ -1729,6 +1787,36 @@ class StringyTestCase extends PHPUnit_Framework_TestCase
);
}
/**
* @dataProvider stripWhitespaceProvider()
*/
public function testStripWhitespace($expected, $str, $encoding = null)
{
$stringy = S::create($str, $encoding);
$result = $stringy->stripWhitespace();
$this->assertStringy($result);
$this->assertEquals($expected, $result);
$this->assertEquals($str, $stringy);
}
public function stripWhitespaceProvider()
{
return array(
array('foobar', ' foo bar '),
array('teststring', 'test string'),
array('Οσυγγραφέας', ' Ο συγγραφέας '),
array('123', ' 123 '),
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('123', '  123  ', 'UTF-8'),
array('', ' '),
array('', ''),
);
}
/**
* @dataProvider substrProvider()
*/
@@ -2374,6 +2462,7 @@ class StringyTestCase extends PHPUnit_Framework_TestCase
array('foo', 'bar', '[[:alpha:]]{3}', 'foo'),
array('', '', '', '', 'msr', 'UTF-8'),
array('bàř', 'fòô ', 'f[òô]+\s', 'bàř', 'msr', 'UTF-8'),
array('fòô', 'fò', '(ò)', '\\1ô', 'msr', 'UTF-8'),
array('fòô', 'bàř', '[[:alpha:]]{3}', 'fòô', 'msr', 'UTF-8')
);
}