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

180 Commits
1.8.0 ... 2.x

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
Daniel St. Jules
fc39b70953 2.2 2015-12-20 16:49:59 -08:00
Daniel St. Jules
9b61dcc771 Remove y char 2015-12-20 16:45:53 -08:00
Daniel St. Jules
b85a84d0b9 Fix #108 Improve char coverage 2015-12-20 16:44:46 -08:00
Daniel St. Jules
e5c3043d75 Style fixes 2015-12-20 13:22:02 -08:00
Daniel St. Jules
49a7405a2a Remove package annotation from #105 2015-12-20 13:19:29 -08:00
Daniel St. Jules
63109ce85c Add @method lines to StaticStringy 2015-12-20 13:08:08 -08:00
Daniel St. Jules
b223a2c320 Small fixes from #105 2015-12-20 12:08:36 -08:00
Daniel St. Jules
264eed18dd Merge pull request #111 from lucasmichot/feature/master/gitattributes
Add a basic .gitattributes file and avoid some exports
2015-12-20 14:51:11 -05:00
Daniel St. Jules
d990a41a1a Update isBase64 to return true if an empty string 2015-12-20 11:46:33 -08:00
Marcel Pociot
318db789b1 Added isBase64 method 2015-12-20 11:44:18 -08:00
Daniel St. Jules
f086c67ac7 Merge pull request #114 from danielstjules/reflection
Reflection
2015-12-20 14:37:45 -05:00
Daniel St. Jules
ee59d586f2 PHP 5.3 support with reflection 2015-12-20 11:35:48 -08:00
samuelwilliams
3c7bc662a6 :: is dynamically generated. 2015-12-20 17:01:52 +11:00
Daniel St. Jules
2072e667e9 Merge pull request #109 from lucasmichot/feature/master/editorconfig
Add a .editorconfig file
2015-12-08 13:29:02 -05:00
Lucas Michot
b65da66ae8 Add a .gitattributes file and avoid some exports 2015-12-06 14:20:38 +01:00
Lucas Michot
604ddc0528 Add a .editorconfig file 2015-12-06 14:11:58 +01:00
Daniel St. Jules
abd5505e98 Merge pull request #103 from danielkesselberg/master
Update for German umlaut transformation
2015-10-19 22:54:55 -07:00
Daniel Kesselberg
ee4b89c2f8 Update for German umlaut transformation (Ä => AE, Ö => UE, Ü => UE, ä => ae, ö => oe, ü => ue) 2015-09-24 10:47:35 +02:00
Daniel St. Jules
ac04be8416 Add note on PHP 7 compatibility 2015-09-09 22:17:45 -07:00
Daniel St. Jules
41336996a1 Fix ensureRight doc comment 2015-09-09 22:06:27 -07:00
Daniel St. Jules
a8793ff711 Merge pull request #100 from joshdifabio/patch-1
Fix copy/paste mistake in README
2015-09-09 22:05:46 -07:00
Daniel St. Jules
183e529e15 Merge pull request #102 from Big-Shark/newTravisInfrastructure
Changed travis infrastructure
2015-09-09 21:59:17 -07:00
Daniel St. Jules
4673754054 Fix: isJSON now returns false for empty strings 2015-09-09 21:24:11 -07:00
Big_Shark
83671e721a Changed travis infrastructure 2015-09-10 11:19:33 +07:00
Daniel St. Jules
c5f370c46d Merge pull request #101 from Big-Shark/php7
Added php7 for travis
2015-09-09 21:18:47 -07:00
Big_Shark
436d269622 Added php7 for travis 2015-09-10 11:16:21 +07:00
Josh Di Fabio
c09de057a1 Fix copy/paste mistake in README 2015-09-08 13:37:21 +01:00
Daniel St. Jules
efb10020f6 2.1 2015-09-02 23:50:48 -07:00
Daniel St. Jules
ae74e66369 Update readme notes on StaticStringy 2015-09-02 23:47:07 -07:00
Daniel St. Jules
f6475e1288 Stringy::create str defaults to empty string 2015-09-02 23:46:48 -07:00
Daniel St. Jules
ff36c79892 Add test for StaticStringy invocation 2015-09-02 23:37:17 -07:00
Daniel St. Jules
8f40b3495d String is now optional in Stringy constructor 2015-09-02 23:35:32 -07:00
Daniel St. Jules
e237f30d94 Bring back StaticStringy as a __callStatic wrapper 2015-09-02 00:12:25 -07:00
Daniel St. Jules
ad6d32080f Update titleize description in readme 2015-07-29 02:09:00 -07:00
Daniel St. Jules
7377aabf61 Fix titleize example 2015-07-29 02:05:16 -07:00
Daniel St. Jules
01fb889a1a 2.0.0 2015-07-29 01:36:15 -07:00
Daniel St. Jules
775d004629 Check offset in camelize 2015-07-29 01:31:53 -07:00
Daniel St. Jules
fe266445f7 Revise why section in readme 2015-07-28 23:59:56 -07:00
Daniel St. Jules
dd95144bf8 Add mbstring to readme example 2015-07-28 23:41:28 -07:00
Daniel St. Jules
812f227f11 Add why section 2015-07-28 23:28:23 -07:00
Daniel St. Jules
6667ca1aed Updating examples, adding tests 2015-07-28 23:06:44 -07:00
Daniel St. Jules
cde0740118 Add note on 1.x documentation 2015-07-28 22:24:47 -07:00
Daniel St. Jules
fa22b94abf Issue #82: titleize now lowercases, no longer preserves acronyms 2015-07-28 22:21:33 -07:00
Daniel St. Jules
f12b40cc29 Strip leading dashes and underscores with camelize 2015-07-28 22:07:04 -07:00
Daniel St. Jules
e1c562b7e8 Update php version compatibility notes 2015-07-27 12:31:40 -07:00
Daniel St. Jules
a39ed63627 Fix split for PHP 5.3 2015-07-26 23:49:50 -07:00
Daniel St. Jules
f34af92850 Re-order functions in Stringy.php 2015-07-26 23:41:35 -07:00
Daniel St. Jules
9165957971 Update htmlEncode and htmlDecode docs 2015-07-25 22:25:44 -07:00
Daniel St. Jules
b3f1bf5174 Update example in readme 2015-07-25 22:20:56 -07:00
Daniel St. Jules
b9cf4b6ae3 Added lines 2015-07-25 22:19:36 -07:00
Daniel St. Jules
cce314f4a5 Add note on syntax in examples 2015-07-25 20:33:34 -07:00
Daniel St. Jules
4a971302f7 Comment fix 2015-07-25 20:07:23 -07:00
Daniel St. Jules
3dcc801483 Use php 5.6 creation in examples 2015-07-25 20:05:34 -07:00
Daniel St. Jules
fe7b54a4e7 Added split 2015-07-25 19:58:50 -07:00
Daniel St. Jules
5e3ac6231c Added slice 2015-07-25 12:59:23 -07:00
Daniel St. Jules
342ef7c3dd Add between 2015-07-24 13:34:50 -07:00
Daniel St. Jules
9d5a06cf37 Update intro code 2015-07-24 00:09:10 -07:00
Daniel St. Jules
2d34e72cde Added repeat 2015-07-23 23:53:33 -07:00
Daniel St. Jules
bded15d683 Added toBoolean 2015-07-23 23:40:21 -07:00
Daniel St. Jules
6b74918cc9 Pending tests 2015-07-23 22:47:46 -07:00
Daniel St. Jules
804aa3e700 Add notes on mbstring to readme 2015-07-22 23:52:36 -07:00
Daniel St. Jules
aef6f0c200 Add append and prepend 2015-07-22 23:30:02 -07:00
Daniel St. Jules
f77d9903fa Reformatting readme 2015-07-22 23:08:19 -07:00
Daniel St. Jules
c673cd3edf Remove StaticStringy from readme 2015-07-22 18:37:33 -07:00
Daniel St. Jules
0d92d7e810 Remove StaticStringy 2015-07-22 18:15:54 -07:00
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
14 changed files with 4058 additions and 3921 deletions

16
.editorconfig Normal file
View File

@@ -0,0 +1,16 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[*.yml]
indent_style = space
indent_size = 2

8
.gitattributes vendored Normal file
View File

@@ -0,0 +1,8 @@
* text=auto
.editorconfig export-ignore
.gitattributes export-ignore
.gitignore export-ignore
.travis.yml export-ignore
phpunit.xml.dist export-ignore
tests export-ignore

View File

@@ -1,7 +1,43 @@
language: php
php:
- 5.6
- 5.5
- 5.4
- 5.3
- 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,75 @@
### 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
* Update for German umlaut transformation
* Use reflection to generate method list for StaticStringy
* Added isBase64 method
* Improved toAscii char coverage
### 2.1.0 (2015-09-02)
* Added simplified StaticStringy class
* str in Stringy::create and constructor is now optional
### 2.0.0 (2015-07-29)
* Removed StaticStringy class
* Added append, prepend, toBoolean, repeat, between, slice, split, and lines
* camelize/upperCamelize now strip leading dashes and underscores
* titleize converts to lowercase, thus no longer preserving acronyms
### 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

1142
README.md

File diff suppressed because it is too large Load Diff

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,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit processIsolation="false"
<phpunit bootstrap="vendor/autoload.php"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false">
<testsuites>
<testsuite name="Stringy">
<file>tests/CommonTest.php</file>
<file>tests/StringyTest.php</file>
<file>tests/StaticStringyTest.php</file>
<file phpVersion="5.6.0">tests/CreateTest.php</file>

View File

@@ -2,16 +2,18 @@
namespace Stringy;
/**
* Invokes Stringy::create and returns the generated Stringy object 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);
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

@@ -2,839 +2,147 @@
namespace Stringy;
use BadMethodCallException;
use ReflectionClass;
use ReflectionMethod;
/**
* Class StaticStringy
*
* @method static string append(string $str, string $stringAppend, string $encoding = null)
* @method static string at(string $str, int $index, string $encoding = null)
* @method static string between(string $str, string $start, string $end, int $offset = 0, string $encoding = null)
* @method static string camelize(string $str, string $encoding = null)
* @method static string chars(string $str, string $encoding = null)
* @method static string collapseWhitespace(string $str, string $encoding = null)
* @method static bool contains(string $str, string $needle, bool $caseSensitive = true, string $encoding = null)
* @method static bool containsAll(string $str, string $needle, bool $caseSensitive = true, string $encoding = null)
* @method static bool containsAny(string $str, string $needle, bool $caseSensitive = true, string $encoding = null)
* @method static int count(string $str, string $encoding = null)
* @method static int countSubstr(string $str, string $substring, bool $caseSensitive = true, string $encoding = null)
* @method static string dasherize(string $str, string $encoding = null)
* @method static string delimit(string $str, string $delimiter, string $encoding = null)
* @method static bool endsWith(string $str, string $substring, bool $caseSensitive = true, string $encoding = null)
* @method static string ensureLeft(string $str, string $substring, string $encoding = null)
* @method static string ensureRight(string $str, string $substring, string $encoding = null)
* @method static string first(string $str, int $n, string $encoding = null)
* @method static bool hasLowerCase(string $str, string $encoding = null)
* @method static bool hasUpperCase(string $str, string $encoding = null)
* @method static string htmlDecode(string $str, int $flags = ENT_COMPAT, string $encoding = null)
* @method static string htmlEncode(string $str, int $flags = ENT_COMPAT, string $encoding = null)
* @method static string humanize(string $str, string $encoding = null)
* @method static int indexOf(string $str, string $needle, int $offset = 0, string $encoding = null)
* @method static int indexOfLast(string $str, string $needle, int $offset = 0, string $encoding = null)
* @method static string insert(string $str, string $substring, int $index = 0, string $encoding = null)
* @method static bool isAlpha(string $str, string $encoding = null)
* @method static bool isAlphanumeric(string $str, string $encoding = null)
* @method static bool isBase64(string $str, string $encoding = null)
* @method static bool isBlank(string $str, string $encoding = null)
* @method static bool isHexadecimal(string $str, string $encoding = null)
* @method static bool isJson(string $str, string $encoding = null)
* @method static bool isLowerCase(string $str, string $encoding = null)
* @method static bool isSerialized(string $str, string $encoding = null)
* @method static bool isUpperCase(string $str, string $encoding = null)
* @method static string last(string $str, string $encoding = null)
* @method static int length(string $str, string $encoding = null)
* @method static Stringy[] lines(string $str, string $encoding = null)
* @method static string longestCommonPrefix(string $str, string $otherStr, string $encoding = null)
* @method static string longestCommonSuffix(string $str, string $otherStr, string $encoding = null)
* @method static string longestCommonSubstring(string $str, string $otherStr, string $encoding = null)
* @method static string lowerCaseFirst(string $str, string $encoding = null)
* @method static string pad(string $str, int $length, string $padStr = ' ', string $padType = 'right', string $encoding = null)
* @method static string padBoth(string $str, int $length, string $padStr = ' ', string $encoding = null)
* @method static string padLeft(string $str, int $length, string $padStr = ' ', string $encoding = null)
* @method static string padRight(string $str, int $length, string $padStr = ' ', string $encoding = null)
* @method static string prepend(string $str, string $string, string $encoding = null)
* @method static string regexReplace(string $str, string $pattern, string $replacement, string $options = 'msr', string $encoding = null)
* @method static string removeLeft(string $str, string $substring, string $encoding = null)
* @method static string removeRight(string $str, string $substring, string $encoding = null)
* @method static string repeat(string $str, int $multiplier, string $encoding = null)
* @method static string replace(string $str, string $search, string $replacement, string $encoding = null)
* @method static string reverse(string $str, string $encoding = null)
* @method static string safeTruncate(string $str, int $length, string $substring = '', string $encoding = null)
* @method static string shuffle(string $str, string $encoding = null)
* @method static string slugify(string $str, string $replacement = '-', string $encoding = null)
* @method static bool startsWith(string $str, string $substring, bool $caseSensitive = true, string $encoding = null)
* @method static string slice(string $str, int $start, int $end = null, string $encoding = null)
* @method static string split(string $str, string $pattern, int $limit = null, string $encoding = null)
* @method static string substr(string $str, int $start, int $length = null, string $encoding = null)
* @method static string surround(string $str, string $substring, string $encoding = null)
* @method static string swapCase(string $str, string $encoding = null)
* @method static string tidy(string $str, string $encoding = null)
* @method static string titleize(string $str, string $encoding = null)
* @method static string toAscii(string $str, bool $removeUnsupported = true, string $encoding = null)
* @method static bool toBoolean(string $str, string $encoding = null)
* @method static string toLowerCase(string $str, string $encoding = null)
* @method static string toSpaces(string $str, int $tabLength = 4, string $encoding = null)
* @method static string toTabs(string $str, int $tabLength = 4, string $encoding = null)
* @method static string toTitleCase(string $str, string $encoding = null)
* @method static string toUpperCase(string $str, string $encoding = null)
* @method static string trim(string $str, string $chars = null, string $encoding = null)
* @method static string trimLeft(string $str, string $chars = null, string $encoding = null)
* @method static string trimRight(string $str, string $chars = null, string $encoding = null)
* @method static string truncate(string $str, int $length, string $substring = '', string $encoding = null)
* @method static string underscored(string $str, string $encoding = null)
* @method static string upperCamelize(string $str, string $encoding = null)
* @method static string upperCaseFirst(string $str, string $encoding = null)
*/
class StaticStringy
{
/**
* Returns an array consisting of the characters in the string.
* A mapping of method names to the numbers of arguments it accepts. Each
* should be two more than the equivalent Stringy method. Necessary as
* static methods place the optional $encoding as the last parameter.
*
* @param string $str String for which to return the chars
* @param string $encoding The character encoding
* @return array An array of string chars
* @var string[]
*/
public static function chars($str, $encoding = null)
{
return Stringy::create($str, $encoding)->chars();
}
protected static $methodArgs = null;
/**
* Converts the first character of the supplied string to upper case.
* Creates an instance of Stringy and invokes the given method with the
* rest of the passed arguments. The optional encoding is expected to be
* the last argument. For example, the following:
* StaticStringy::slice('fòôbàř', 0, 3, 'UTF-8'); translates to
* Stringy::create('fòôbàř', 'UTF-8')->slice(0, 3);
* The result is not cast, so the return value may be of type Stringy,
* integer, boolean, etc.
*
* @param string $str String to modify
* @param string $encoding The character encoding
* @return string String with the first character being upper case
* @param string $name
* @param mixed[] $arguments
*
* @return Stringy
*
* @throws \BadMethodCallException
*/
public static function upperCaseFirst($str, $encoding = null)
public static function __callStatic($name, $arguments)
{
return (string) Stringy::create($str, $encoding)->upperCaseFirst();
}
if (!static::$methodArgs) {
$stringyClass = new ReflectionClass('Stringy\Stringy');
$methods = $stringyClass->getMethods(ReflectionMethod::IS_PUBLIC);
/**
* Converts the first character of the supplied string to lower case.
*
* @param string $str String to modify
* @param string $encoding The character encoding
* @return string String with the first character being lower case
*/
public static function lowerCaseFirst($str, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->lowerCaseFirst();
}
foreach ($methods as $method) {
$params = $method->getNumberOfParameters() + 2;
static::$methodArgs[$method->name] = $params;
}
}
/**
* Returns a camelCase version of the string. Trims surrounding spaces,
* capitalizes letters following digits, spaces, dashes and underscores,
* and removes spaces, dashes, as well as underscores.
*
* @param string $str String to convert to camelCase
* @param string $encoding The character encoding
* @return string String in camelCase
*/
public static function camelize($str, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->camelize();
}
if (!isset(static::$methodArgs[$name])) {
throw new BadMethodCallException($name . ' is not a valid method');
}
/**
* Returns an UpperCamelCase version of the supplied string. It trims
* surrounding spaces, capitalizes letters following digits, spaces, dashes
* and underscores, and removes spaces, dashes, underscores.
*
* @param string $str String to convert to UpperCamelCase
* @param string $encoding The character encoding
* @return string String in UpperCamelCase
*/
public static function upperCamelize($str, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->upperCamelize();
}
$numArgs = count($arguments);
$str = ($numArgs) ? $arguments[0] : '';
/**
* Returns a lowercase and trimmed string separated by dashes. Dashes are
* inserted before uppercase characters (with the exception of the first
* character of the string), and in place of spaces as well as underscores.
*
* @param string $str String to convert
* @param string $encoding The character encoding
* @return string Dasherized string
*/
public static function dasherize($str, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->dasherize();
}
if ($numArgs === static::$methodArgs[$name]) {
$args = array_slice($arguments, 1, -1);
$encoding = $arguments[$numArgs - 1];
} else {
$args = array_slice($arguments, 1);
$encoding = null;
}
/**
* Returns a lowercase and trimmed string separated by underscores.
* Underscores are inserted before uppercase characters (with the exception
* of the first character of the string), and in place of spaces as well as
* dashes.
*
* @param string $str String to convert
* @param string $encoding The character encoding
* @return string Underscored string
*/
public static function underscored($str, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->underscored();
}
$stringy = Stringy::create($str, $encoding);
/**
* Returns a case swapped version of the string.
*
* @param string $str String to swap case
* @param string $encoding The character encoding
* @return string String with each character's case swapped
*/
public static function swapCase($str, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->swapCase();
}
/**
* Returns a trimmed string with the first letter of each word capitalized.
* Ignores the case of other letters, preserving any acronyms. Also accepts
* an array, $ignore, allowing you to list words not to be capitalized.
*
* @param string $str String to titleize
* @param string $encoding The character encoding
* @param array $ignore An array of words not to capitalize
* @return string Titleized string
*/
public static function titleize($str, $ignore = null, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->titleize($ignore);
}
/**
* Capitalizes the first word of the string, replaces underscores with
* spaces, and strips '_id'.
*
* @param string $str String to humanize
* @param string $encoding The character encoding
* @return string A humanized string
*/
public static function humanize($str, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->humanize();
}
/**
* Returns a string with smart quotes, ellipsis characters, and dashes from
* Windows-1252 (commonly used in Word documents) replaced by their ASCII
* equivalents.
*
* @param string $str String to remove special chars
* @return string String with those characters removed
*/
public static function tidy($str)
{
return (string) Stringy::create($str)->tidy();
}
/**
* Trims the string and replaces consecutive whitespace characters with a
* single space. This includes tabs and newline characters, as well as
* multibyte whitespace such as the thin space and ideographic space.
*
* @param string $str The string to cleanup whitespace
* @param string $encoding The character encoding
* @return string The trimmed string with condensed whitespace
*/
public static function collapseWhitespace($str, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->collapseWhitespace();
}
/**
* 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.
*
* @param string $str A string with non-ASCII characters
* @return string A string containing only ASCII characters
*/
public static function toAscii($str)
{
return (string) Stringy::create($str)->toAscii();
}
/**
* Pads the string to a given length with $padStr. If length is less than
* or equal to the length of the string, no padding takes places. The
* default string used for padding is a space, and the default type (one of
* 'left', 'right', 'both') is 'right'. Throws an InvalidArgumentException
* if $padType isn't one of those 3 values.
*
* @param string $str String to pad
* @param int $length Desired string length after padding
* @param string $padStr String used to pad, defaults to space
* @param string $padType One of 'left', 'right', 'both'
* @param string $encoding The character encoding
* @return string The padded string
* @throws \InvalidArgumentException If $padType isn't one of 'right',
* 'left' or 'both'
*/
public static function pad($str, $length, $padStr = ' ', $padType = 'right',
$encoding = null)
{
return (string) Stringy::create($str, $encoding)
->pad($length, $padStr, $padType);
}
/**
* Returns a new string of a given length such that the beginning of the
* string is padded. Alias for pad() with a $padType of 'left'.
*
* @param string $str String to pad
* @param int $length Desired string length after padding
* @param string $padStr String used to pad, defaults to space
* @param string $encoding The character encoding
* @return string The padded string
*/
public static function padLeft($str, $length, $padStr = ' ', $encoding = null)
{
return (string) Stringy::create($str, $encoding)
->padLeft($length, $padStr);
}
/**
* Returns a new string of a given length such that the end of the string
* is padded. Alias for pad() with a $padType of 'right'.
*
* @param string $str String to pad
* @param int $length Desired string length after padding
* @param string $padStr String used to pad, defaults to space
* @param string $encoding The character encoding
* @return string The padded string
*/
public static function padRight($str, $length, $padStr = ' ', $encoding = null)
{
return (string) Stringy::create($str, $encoding)
->padRight($length, $padStr);
}
/**
* Returns a new string of a given length such that both sides of the
* string are padded. Alias for pad() with a $padType of 'both'.
*
* @param string $str String to pad
* @param int $length Desired string length after padding
* @param string $padStr String used to pad, defaults to space
* @param string $encoding The character encoding
* @return string The padded string
*/
public static function padBoth($str, $length, $padStr = ' ', $encoding = null)
{
return (string) Stringy::create($str, $encoding)
->padBoth($length, $padStr);
}
/**
* Returns true if the string begins with $substring, false otherwise. By
* default, the comparison is case-sensitive, but can be made insensitive
* by setting $caseSensitive to false.
*
* @param string $str String to check the start of
* @param string $substring The substring to look for
* @param bool $caseSensitive Whether or not to enforce case-sensitivity
* @param string $encoding The character encoding
* @return bool Whether or not $str starts with $substring
*/
public static function startsWith($str, $substring, $caseSensitive = true,
$encoding = null)
{
return Stringy::create($str, $encoding)
->startsWith($substring, $caseSensitive);
}
/**
* Returns true if the string ends with $substring, false otherwise. By
* default, the comparison is case-sensitive, but can be made insensitive
* by setting $caseSensitive to false.
*
* @param string $str String to check the end of
* @param string $substring The substring to look for
* @param bool $caseSensitive Whether or not to enforce case-sensitivity
* @param string $encoding The character encoding
* @return bool Whether or not $str ends with $substring
*/
public static function endsWith($str, $substring, $caseSensitive = true,
$encoding = null)
{
return Stringy::create($str, $encoding)
->endsWith($substring, $caseSensitive);
}
/**
* 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.
*
* @param string $str String to convert tabs to spaces
* @param int $tabLength Number of spaces to replace each tab with
* @return string String with tabs switched to spaces
*/
public static function toSpaces($str, $tabLength = 4)
{
return (string) Stringy::create($str)->toSpaces($tabLength);
}
/**
* Converts each occurrence of some consecutive number of spaces, as
* defined by $tabLength, to a tab. By default, each 4 consecutive spaces
* are converted to a tab.
*
* @param string $str String to convert spaces to tabs
* @param int $tabLength Number of spaces to replace with a tab
* @return string String with spaces switched to tabs
*/
public static function toTabs($str, $tabLength = 4)
{
return (string) Stringy::create($str)->toTabs($tabLength);
}
/**
* Converts all characters in the string to lowercase. An alias for PHP's
* mb_strtolower().
*
* @param string $str String to convert case
* @param string $encoding The character encoding
* @return string The lowercase string
*/
public static function toLowerCase($str, $encoding = null)
{
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().
*
* @param string $str String to convert case
* @param string $encoding The character encoding
* @return string The uppercase string
*/
public static function toUpperCase($str, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->toUpperCase();
}
/**
* Converts the string into an URL slug. This includes replacing non-ASCII
* characters with their closest ASCII equivalents, removing remaining
* non-ASCII and non-alphanumeric characters, and replacing whitespace with
* $replacement. The replacement defaults to a single dash, and the string
* is also converted to lowercase.
*
* @param string $str Text to transform into an URL slug
* @param string $replacement The string used to replace whitespace
* @return string The corresponding URL slug
*/
public static function slugify($str, $replacement = '-')
{
return (string) Stringy::create($str)->slugify($replacement);
}
/**
* Returns true if the string contains $needle, 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 string $needle Substring 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 $needle
*/
public static function contains($haystack, $needle, $caseSensitive = true,
$encoding = null)
{
return Stringy::create($haystack, $encoding)
->contains($needle, $caseSensitive);
}
/**
* Returns true if the string contains any $needles, false otherwise. By
* default, the comparison is case-sensitive, but can be made insensitive
* by setting $caseSensitive to false.
*
* @param string $haystack String being checked
* @param array $needles Substrings to look for
* @param bool $caseSensitive Whether or not to enforce case-sensitivity
* @param string $encoding The character encoding
* @return bool Whether or not $haystack contains any $needles
*/
public static function containsAny($haystack, $needles,
$caseSensitive = true, $encoding = null)
{
return Stringy::create($haystack, $encoding)
->containsAny($needles, $caseSensitive);
}
/**
* Returns true if the string contains all $needles, false otherwise. By
* default, the comparison is case-sensitive, but can be made insensitive
* by setting $caseSensitive to false.
*
* @param string $haystack String being checked
* @param array $needles Substrings to look for
* @param bool $caseSensitive Whether or not to enforce case-sensitivity
* @param string $encoding The character encoding
* @return bool Whether or not $haystack contains all $needles
*/
public static function containsAll($haystack, $needles,
$caseSensitive = true, $encoding = null)
{
return Stringy::create($haystack, $encoding)
->containsAll($needles, $caseSensitive);
}
/**
* Surrounds a string with the given substring.
*
* @param string $str The string to surround
* @param string $substring The substring to add to both sides
* @return string The string with the substring prepended and appended
*/
public static function surround($str, $substring)
{
return (string) Stringy::create($str)->surround($substring);
}
/**
* Inserts $substring into the string at the $index provided.
*
* @param string $str String to insert into
* @param string $substring String to be inserted
* @param int $index The index at which to insert the substring
* @param string $encoding The character encoding
* @return string The resulting string after the insertion
*/
public static function insert($str, $substring, $index, $encoding = null)
{
return (string) Stringy::create($str, $encoding)
->insert($substring, $index);
}
/**
* Truncates the string to a given length. If $substring is provided, and
* truncating occurs, the string is further truncated so that the substring
* may be appended without exceeding the desired length.
*
* @param string $str String to truncate
* @param int $length Desired length of the truncated string
* @param string $substring The substring to append if it can fit
* @param string $encoding The character encoding
* @return string The resulting string after truncating
*/
public static function truncate($str, $length, $substring = '',
$encoding = null)
{
return (string) Stringy::create($str, $encoding)
->truncate($length, $substring);
}
/**
* Truncates the string to a given length, while ensuring that it does not
* split words. If $substring is provided, and truncating occurs, the
* string is further truncated so that the substring may be appended without
* exceeding the desired length.
*
* @param string $str String to truncate
* @param int $length Desired length of the truncated string
* @param string $substring The substring to append if it can fit
* @param string $encoding The character encoding
* @return string The resulting string after truncating
*/
public static function safeTruncate($str, $length, $substring = '',
$encoding = null)
{
return (string) Stringy::create($str, $encoding)
->safeTruncate($length, $substring);
}
/**
* Returns a reversed string. A multibyte version of strrev().
*
* @param string $str String to reverse
* @param string $encoding The character encoding
* @return string The reversed string
*/
public static function reverse($str, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->reverse();
}
/**
* A multibyte str_shuffle() function. It returns a string with its
* characters in random order.
*
* @param string $str String to shuffle
* @param string $encoding The character encoding
* @return string The shuffled string
*/
public static function shuffle($str, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->shuffle();
}
/**
* Returns the trimmed string. An alias for PHP's trim() function.
*
* @param string $str String to trim
* @return string Trimmed $str
*/
public static function trim($str)
{
return trim($str);
}
/**
* Returns the longest common prefix between the string and $otherStr.
*
* @param string $str First string for comparison
* @param string $otherStr Second string for comparison
* @param string $encoding The character encoding
* @return string The longest common prefix
*/
public static function longestCommonPrefix($str, $otherStr, $encoding = null)
{
return (string) Stringy::create($str, $encoding)
->longestCommonPrefix($otherStr);
}
/**
* Returns the longest common suffix between the string and $otherStr.
*
* @param string $str First string for comparison
* @param string $otherStr Second string for comparison
* @param string $encoding The character encoding
* @return string The longest common suffix
*/
public static function longestCommonSuffix($str, $otherStr, $encoding = null)
{
return (string) Stringy::create($str, $encoding)
->longestCommonSuffix($otherStr);
}
/**
* Returns the longest common substring between the string and $otherStr.
* In the case of ties, it returns that which occurs first.
*
* @param string $str First string for comparison
* @param string $otherStr Second string for comparison
* @param string $encoding The character encoding
* @return string The longest common substring
*/
public static function longestCommonSubstring($str, $otherStr,
$encoding = null)
{
return (string) Stringy::create($str, $encoding)
->longestCommonSubstring($otherStr);
}
/**
* Returns the length of the string. An alias for PHP's mb_strlen() function.
*
* @param string $str The string to get the length of
* @param string $encoding The character encoding
* @return int The number of characters in $str given the encoding
*/
public static function length($str, $encoding = null)
{
return Stringy::create($str, $encoding)->length();
}
/**
* Returns the substring beginning at $start with the specified $length.
* It differs from the mb_substr() function in that providing a $length of
* null will return the rest of the string, rather than an empty string.
*
* @param string $str The string to get the length of
* @param int $start Position of the first character to use
* @param int $length Maximum number of characters used
* @param string $encoding The character encoding
* @return string The substring of $str
*/
public static function substr($str, $start, $length = null, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->substr($start, $length);
}
/**
* Returns the character at $index, with indexes starting at 0.
*
* @param string $str The string from which to get the char
* @param int $index Position of the character
* @param string $encoding The character encoding
* @return string The character at $index
*/
public static function at($str, $index, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->at($index);
}
/**
* Returns the first $n characters of the string.
*
* @param string $str The string from which to get the substring
* @param int $n Number of chars to retrieve from the start
* @param string $encoding The character encoding
* @return string The first $n characters
*/
public static function first($str, $n, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->first($n);
}
/**
* Returns the last $n characters of the string.
*
* @param string $str The string from which to get the substring
* @param int $n Number of chars to retrieve from the end
* @param string $encoding The character encoding
* @return string The last $n characters
*/
public static function last($str, $n, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->last($n);
}
/**
* Ensures that the string begins with $substring. If it doesn't, it's
* prepended.
*
* @param string $str The string to modify
* @param string $substring The substring to add if not present
* @param string $encoding The character encoding
* @return string The string prefixed by the $substring
*/
public static function ensureLeft($str, $substring, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->ensureLeft($substring);
}
/**
* Ensures that the string begins with $substring. If it doesn't, it's
* appended.
*
* @param string $str The string to modify
* @param string $substring The substring to add if not present
* @param string $encoding The character encoding
* @return string The string suffixed by the $substring
*/
public static function ensureRight($str, $substring, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->ensureRight($substring);
}
/**
* Returns a new string with the prefix $substring removed, if present.
*
* @param string $str String from which to remove the prefix
* @param string $substring The prefix to remove
* @param string $encoding The character encoding
* @return string The string without the prefix $substring
*/
public static function removeLeft($str, $substring, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->removeLeft($substring);
}
/**
* Returns a new string with the suffix $substring removed, if present.
*
* @param string $str String from which to remove the suffix
* @param string $substring The suffix to remove
* @param string $encoding The character encoding
* @return string The string without the suffix $substring
*/
public static function removeRight($str, $substring, $encoding = null)
{
return (string) Stringy::create($str, $encoding)->removeRight($substring);
}
/**
* Returns true if the string contains only alphabetic chars, false
* otherwise.
*
* @param string $str String to check
* @param string $encoding The character encoding
* @return bool Whether or not $str contains only alphabetic chars
*/
public static function isAlpha($str, $encoding = null)
{
return Stringy::create($str, $encoding)->isAlpha();
}
/**
* Returns true if the string contains only alphabetic and numeric chars,
* false otherwise.
*
* @param string $str String to check
* @param string $encoding The character encoding
* @return bool Whether or not $str contains only alphanumeric chars
*/
public static function isAlphanumeric($str, $encoding = null)
{
return Stringy::create($str, $encoding)->isAlphanumeric();
}
/**
* Returns true if the string contains only whitespace chars, false
* otherwise.
*
* @param string $str String to check
* @param string $encoding The character encoding
* @return bool Whether or not $str contains only whitespace characters
*/
public static function isBlank($str, $encoding = null)
{
return Stringy::create($str, $encoding)->isBlank();
}
/**
* Returns true if the string is JSON, false otherwise.
*
* @param string $str String to check
* @param string $encoding The character encoding
* @return bool Whether or not $str is JSON
*/
public static function isJson($str, $encoding = null)
{
return Stringy::create($str, $encoding)->isJson();
}
/**
* Returns true if the string contains only lower case chars, false
* otherwise.
*
* @param string $str String to check
* @param string $encoding The character encoding
* @return bool Whether or not $str contains only lower case characters
*/
public static function isLowerCase($str, $encoding = null)
{
return Stringy::create($str, $encoding)->isLowerCase();
}
/**
* Returns true if the string is serialized, false otherwise.
*
* @param string $str String to check
* @param string $encoding The character encoding
* @return bool Whether or not $str is serialized
*/
public static function isSerialized($str, $encoding = null)
{
return Stringy::create($str, $encoding)->isSerialized();
}
/**
* Returns true if the string contains only upper case chars, false
* otherwise.
*
* @param string $str String to check
* @param string $encoding The character encoding
* @return bool Whether or not $str contains only upper case characters
*/
public static function isUpperCase($str, $encoding = null)
{
return Stringy::create($str, $encoding)->isUpperCase();
}
/**
* Returns true if the string contains only hexadecimal chars, false
* otherwise.
*
* @param string $str String to check
* @param string $encoding The character encoding
* @return bool Whether or not $str contains only hexadecimal characters
*/
public static function isHexadecimal($str, $encoding = null)
{
return Stringy::create($str, $encoding)->isHexadecimal();
}
/**
* Returns the number of occurrences of $substring in the given string.
* By default, the comparison is case-sensitive, but can be made insensitive
* by setting $caseSensitive to false.
*
* @param string $str The string to search through
* @param string $substring The substring to search for
* @param bool $caseSensitive Whether or not to enforce case-sensitivity
* @param string $encoding The character encoding
* @return int The number of $substring occurrences
*/
public static function countSubstr($str, $substring, $caseSensitive = true,
$encoding = null)
{
return Stringy::create($str, $encoding)
->countSubstr($substring, $caseSensitive);
}
/**
* Replaces all occurrences of $search in $str by $replacement.
*
* @param string $str The haystack to search through
* @param string $search The needle to search for
* @param string $replacement The string to replace with
* @param string $encoding The character encoding
* @return string The resulting string after the replacements
*/
public static function replace($str, $search, $replacement, $encoding = null)
{
return (string) Stringy::create($str, $encoding)
->replace($search,$replacement);
}
/**
* Replaces all occurrences of $pattern in $str by $replacement. An alias
* for mb_ereg_replace(). Note that the 'i' option with multibyte patterns
* in mb_ereg_replace() requires PHP 5.4+. This is due to a lack of support
* in the bundled version of Oniguruma in PHP 5.3.
*
* @param string $str The haystack to search through
* @param string $pattern The regular expression pattern
* @param string $replacement The string to replace with
* @param string $options Matching conditions to be used
* @param string $encoding The character encoding
* @return string The resulting string after the replacements
*/
public static function regexReplace($str, $pattern, $replacement,
$options = 'msr', $encoding = null)
{
return (string) Stringy::create($str, $encoding)
->regexReplace($pattern, $replacement, $options, $encoding);
return call_user_func_array(array($stringy, $name), $args);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,968 +0,0 @@
<?php
abstract class CommonTest extends PHPUnit_Framework_TestCase
{
/**
* Asserts that a variable is of a Stringy instance.
*
* @param mixed $actual
*/
public function assertStringy($actual)
{
$this->assertInstanceOf('Stringy\Stringy', $actual);
}
public function charsProvider()
{
return array(
array(array(), ''),
array(array('T', 'e', 's', 't'), 'Test'),
array(array('F', 'ò', 'ô', ' ', 'B', 'à', 'ř'), 'Fòô Bàř', 'UTF-8')
);
}
public function upperCaseFirstProvider()
{
return array(
array('Test', 'Test'),
array('Test', 'test'),
array('1a', '1a'),
array('Σ test', 'σ test', 'UTF-8'),
array(' σ test', ' σ test', 'UTF-8')
);
}
public function lowerCaseFirstProvider()
{
return array(
array('test', 'Test'),
array('test', 'test'),
array('1a', '1a'),
array('σ test', 'Σ test', 'UTF-8'),
array(' Σ test', ' Σ test', 'UTF-8')
);
}
public function camelizeProvider()
{
return array(
array('camelCase', 'CamelCase'),
array('camelCase', 'Camel-Case'),
array('camelCase', 'camel case'),
array('camelCase', 'camel -case'),
array('camelCase', 'camel - case'),
array('camelCase', 'camel_case'),
array('camelCTest', 'camel c test'),
array('stringWith1Number', 'string_with1number'),
array('stringWith22Numbers', 'string-with-2-2 numbers'),
array('1Camel2Case', '1camel2case'),
array('camelΣase', 'camel σase', 'UTF-8'),
array('στανιλCase', 'Στανιλ case', 'UTF-8'),
array('σamelCase', 'σamel Case', 'UTF-8')
);
}
public function upperCamelizeProvider()
{
return array(
array('CamelCase', 'camelCase'),
array('CamelCase', 'Camel-Case'),
array('CamelCase', 'camel case'),
array('CamelCase', 'camel -case'),
array('CamelCase', 'camel - case'),
array('CamelCase', 'camel_case'),
array('CamelCTest', 'camel c test'),
array('StringWith1Number', 'string_with1number'),
array('StringWith22Numbers', 'string-with-2-2 numbers'),
array('1Camel2Case', '1camel2case'),
array('CamelΣase', 'camel σase', 'UTF-8'),
array('ΣτανιλCase', 'στανιλ case', 'UTF-8'),
array('ΣamelCase', 'Σamel Case', 'UTF-8')
);
}
public function dasherizeProvider()
{
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-d-case', 'TestDCase'),
array('test-c-c-test', 'TestCCTest'),
array('string-with1number', 'string_with1number'),
array('string-with-2-2-numbers', 'String-with_2_2 numbers'),
array('1test2case', '1test2case'),
array('dash-σase', 'dash Σase', 'UTF-8'),
array('στανιλ-case', 'Στανιλ case', 'UTF-8'),
array('σash-case', 'Σash Case', 'UTF-8')
);
}
public function underscoredProvider()
{
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('string_with_2_2_numbers', 'String-with_2_2 numbers'),
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(
array('TESTcASE', 'testCase'),
array('tEST-cASE', 'Test-Case'),
array(' - σASH cASE', ' - Σash Case', 'UTF-8'),
array('νΤΑΝΙΛ', 'Ντανιλ', 'UTF-8')
);
}
public function titleizeProvider()
{
$ignore = array('at', 'by', 'for', 'in', 'of', 'on', 'out', 'to', 'the');
return array(
array('Testing The Method', 'testing the method'),
array('Testing the Method', 'testing the method', $ignore, 'UTF-8'),
array('I Like to Watch DVDs at Home', 'i like to watch DVDs at home',
$ignore, 'UTF-8'),
array('Θα Ήθελα Να Φύγει', ' Θα ήθελα να φύγει ', null, 'UTF-8')
);
}
public function humanizeProvider()
{
return array(
array('Author', 'author_id'),
array('Test user', ' _test_user_'),
array('Συγγραφέας', ' συγγραφέας_id ', 'UTF-8')
);
}
public function tidyProvider()
{
return array(
array('"I see..."', '“I see…”'),
array("'This too'", "This too"),
array('test-dash', 'test—dash'),
array('Ο συγγραφέας είπε...', 'Ο συγγραφέας είπε…')
);
}
public function collapseWhitespaceProvider()
{
return array(
array('foo bar', ' foo bar '),
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('', ' '),
array('', ''),
);
}
public function toAsciiProvider()
{
return array(
array('foo bar', 'fòô bàř'),
array(' TEST ', ' ŤÉŚŢ '),
array(' = z = 3', 'φ = ź = 3'),
array('perevirka', 'перевірка'),
array('lysaya gora', 'лысая гора'),
array('shchuka', 'щука'),
array('', '漢字')
);
}
public function padProvider()
{
return array(
// length <= str
array('foo bar', 'foo bar', -1),
array('foo bar', 'foo bar', 7),
array('fòô bàř', 'fòô bàř', 7, ' ', 'right', 'UTF-8'),
// right
array('foo bar ', 'foo bar', 9),
array('foo bar_*', 'foo bar', 9, '_*', 'right'),
array('fòô bàř¬ø¬', 'fòô bàř', 10, '¬ø', 'right', 'UTF-8'),
// left
array(' foo bar', 'foo bar', 9, ' ', 'left'),
array('_*foo bar', 'foo bar', 9, '_*', 'left'),
array('¬ø¬fòô bàř', 'fòô bàř', 10, '¬ø', 'left', 'UTF-8'),
// both
array('foo bar ', 'foo bar', 8, ' ', 'both'),
array('¬fòô bàř¬ø', 'fòô bàř', 10, '¬ø', 'both', 'UTF-8'),
array('¬øfòô bàř¬øÿ', 'fòô bàř', 12, '¬øÿ', 'both', 'UTF-8')
);
}
public function padLeftProvider()
{
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'),
);
}
public function padRightProvider()
{
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'),
);
}
public function padBothProvider()
{
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')
);
}
public function startsWithProvider()
{
return array(
array(true, 'foo bars', 'foo bar'),
array(true, 'FOO bars', 'foo bar', false),
array(true, 'FOO bars', 'foo BAR', false),
array(true, 'FÒÔ bàřs', 'fòô bàř', false, 'UTF-8'),
array(true, 'fòô bàřs', 'fòô BÀŘ', false, 'UTF-8'),
array(false, 'foo bar', 'bar'),
array(false, 'foo bar', 'foo bars'),
array(false, 'FOO bar', 'foo bars'),
array(false, 'FOO bars', 'foo BAR'),
array(false, 'FÒÔ bàřs', 'fòô bàř', true, 'UTF-8'),
array(false, 'fòô bàřs', 'fòô BÀŘ', true, 'UTF-8'),
);
}
public function endsWithProvider()
{
return array(
array(true, 'foo bars', 'o bars'),
array(true, 'FOO bars', 'o bars', false),
array(true, 'FOO bars', 'o BARs', false),
array(true, 'FÒÔ bàřs', 'ô bàřs', false, 'UTF-8'),
array(true, 'fòô bàřs', 'ô BÀŘs', false, 'UTF-8'),
array(false, 'foo bar', 'foo'),
array(false, 'foo bar', 'foo bars'),
array(false, 'FOO bar', 'foo bars'),
array(false, 'FOO bars', 'foo BARS'),
array(false, 'FÒÔ bàřs', 'fòô bàřs', true, 'UTF-8'),
array(false, 'fòô bàřs', 'fòô BÀŘS', true, 'UTF-8'),
);
}
public function toSpacesProvider()
{
return array(
array(' foo bar ', ' foo bar '),
array(' foo bar ', ' foo bar ', 5),
array(' foo bar ', ' foo bar ', 2),
array('foobar', ' foo bar ', 0),
array(" foo\n bar", " foo\n bar"),
array(" fòô\n bàř", " fòô\n bàř")
);
}
public function toTabsProvider()
{
return array(
array(' foo bar ', ' foo bar '),
array(' foo bar ', ' foo bar ', 5),
array(' foo bar ', ' foo bar ', 2),
array(" foo\n bar", " foo\n bar"),
array(" fòô\n bàř", " fòô\n bàř")
);
}
public function toLowerCaseProvider()
{
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 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(
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 slugifyProvider()
{
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('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_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, '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, '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, '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, '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(
array('__foobar__', 'foobar', '__'),
array('test', 'test', ''),
array('**', '', '*'),
array('¬fòô bàř¬', 'fòô bàř', '¬'),
array('ßå∆˚ test ßå∆˚', ' test ', 'ßå∆˚')
);
}
public function insertProvider()
{
return array(
array('foo bar', 'oo bar', 'f', 0),
array('foo bar', 'f bar', 'oo', 1),
array('f bar', 'f bar', 'oo', 20),
array('foo bar', 'foo ba', 'r', 6),
array('fòô bàř', 'òô bàř', 'f', 0, 'UTF-8'),
array('fòô bàř', 'f bàř', 'òô', 1, 'UTF-8'),
array('fòô bàř', 'fòô bà', 'ř', 6, 'UTF-8')
);
}
public function truncateProvider()
{
return array(
array('Test foo bar', 'Test foo bar', 12),
array('Test foo ba', 'Test foo bar', 11),
array('Test foo', 'Test foo bar', 8),
array('Test fo', 'Test foo bar', 7),
array('Test', 'Test foo bar', 4),
array('Test foo bar', 'Test foo bar', 12, '...'),
array('Test foo...', 'Test foo bar', 11, '...'),
array('Test ...', 'Test foo bar', 8, '...'),
array('Test...', 'Test foo bar', 7, '...'),
array('T...', 'Test foo bar', 4, '...'),
array('Test fo....', 'Test foo bar', 11, '....'),
array('Test fòô bàř', 'Test fòô bàř', 12, '', 'UTF-8'),
array('Test fòô bà', 'Test fòô bàř', 11, '', 'UTF-8'),
array('Test fòô', 'Test fòô bàř', 8, '', 'UTF-8'),
array('Test fò', '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 fϰϰ', 'Test fòô bàř', 8, 'ϰϰ', 'UTF-8'),
array('Test ϰϰ', 'Test fòô bàř', 7, 'ϰϰ', 'UTF-8'),
array('Teϰϰ', 'Test fòô bàř', 4, 'ϰϰ', 'UTF-8'),
array('What are your pl...', 'What are your plans today?', 19, '...')
);
}
public function safeTruncateProvider()
{
return array(
array('Test foo bar', 'Test foo bar', 12),
array('Test foo', 'Test foo bar', 11),
array('Test foo', 'Test foo bar', 8),
array('Test', 'Test foo bar', 7),
array('Test', 'Test foo bar', 4),
array('Test foo bar', 'Test foo bar', 12, '...'),
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('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('What are your plans...', 'What are your plans today?', 22, '...')
);
}
public function reverseProvider()
{
return array(
array('', ''),
array('raboof', 'foobar'),
array('řàbôòf', 'fòôbàř', 'UTF-8'),
array('řàb ôòf', 'fòô bàř', 'UTF-8'),
array('∂∆ ˚åß', 'ßå˚ ∆∂', 'UTF-8')
);
}
public function shuffleProvider()
{
return array(
array('foo bar'),
array('∂∆ ˚åß', 'UTF-8'),
array('å´¥©¨ˆßå˚ ∆∂˙©å∑¥øœ¬', 'UTF-8')
);
}
public function trimProvider()
{
return array(
array('foo bar', ' foo bar '),
array('foo bar', ' foo bar'),
array('foo bar', 'foo bar '),
array('foo bar', "\n\t foo bar \n\t"),
array('fòô bàř', ' fòô bàř '),
array('fòô bàř', ' fòô bàř'),
array('fòô bàř', 'fòô bàř '),
array('fòô bàř', "\n\t fòô bàř \n\t")
);
}
public function longestCommonPrefixProvider()
{
return array(
array('foo', 'foobar', 'foo bar'),
array('foo bar', 'foo bar', 'foo bar'),
array('f', 'foo bar', 'far boo'),
array('', 'toy car', 'foo bar'),
array('', 'foo bar', ''),
array('fòô', 'fòôbar', 'fòô bar', 'UTF-8'),
array('fòô bar', 'fòô bar', 'fòô bar', 'UTF-8'),
array('fò', 'fòô bar', 'fòr bar', 'UTF-8'),
array('', 'toy car', 'fòô bar', 'UTF-8'),
array('', 'fòô bar', '', 'UTF-8'),
);
}
public function longestCommonSuffixProvider()
{
return array(
array('bar', 'foobar', 'foo bar'),
array('foo bar', 'foo bar', 'foo bar'),
array('ar', 'foo bar', 'boo far'),
array('', 'foo bad', 'foo bar'),
array('', 'foo bar', ''),
array('bàř', 'fòôbàř', 'fòô bàř', 'UTF-8'),
array('fòô bàř', 'fòô bàř', 'fòô bàř', 'UTF-8'),
array(' bàř', 'fòô bàř', 'fòr bàř', 'UTF-8'),
array('', 'toy car', 'fòô bàř', 'UTF-8'),
array('', 'fòô bàř', '', 'UTF-8'),
);
}
public function longestCommonSubstringProvider()
{
return array(
array('foo', 'foobar', 'foo bar'),
array('foo bar', 'foo bar', 'foo bar'),
array('oo ', 'foo bar', 'boo far'),
array('foo ba', 'foo bad', 'foo bar'),
array('', 'foo bar', ''),
array('fòô', 'fòôbàř', 'fòô bàř', 'UTF-8'),
array('fòô bàř', 'fòô bàř', 'fòô bàř', 'UTF-8'),
array(' bàř', 'fòô bàř', 'fòr bàř', 'UTF-8'),
array(' ', 'toy car', 'fòô bàř', 'UTF-8'),
array('', 'fòô bàř', '', 'UTF-8'),
);
}
public function lengthProvider()
{
return array(
array(11, ' foo bar '),
array(1, 'f'),
array(0, ''),
array(7, 'fòô bàř', 'UTF-8')
);
}
public function substrProvider()
{
return array(
array('foo bar', 'foo bar', 0),
array('bar', 'foo bar', 4),
array('bar', 'foo bar', 4, null),
array('o b', 'foo bar', 2, 3),
array('', 'foo bar', 4, 0),
array('fòô bàř', 'fòô bàř', 0, null, 'UTF-8'),
array('bàř', 'fòô bàř', 4, null, 'UTF-8'),
array('ô b', 'fòô bàř', 2, 3, 'UTF-8'),
array('', 'fòô bàř', 4, 0, 'UTF-8')
);
}
public function atProvider()
{
return array(
array('f', 'foo bar', 0),
array('o', 'foo bar', 1),
array('r', 'foo bar', 6),
array('', 'foo bar', 7),
array('f', 'fòô bàř', 0, 'UTF-8'),
array('ò', 'fòô bàř', 1, 'UTF-8'),
array('ř', 'fòô bàř', 6, 'UTF-8'),
array('', 'fòô bàř', 7, 'UTF-8'),
);
}
public function firstProvider()
{
return array(
array('', 'foo bar', -5),
array('', 'foo bar', 0),
array('f', 'foo bar', 1),
array('foo', 'foo bar', 3),
array('foo bar', 'foo bar', 7),
array('foo bar', 'foo bar', 8),
array('', 'fòô bàř', -5, 'UTF-8'),
array('', 'fòô bàř', 0, 'UTF-8'),
array('f', 'fòô bàř', 1, 'UTF-8'),
array('fòô', 'fòô bàř', 3, 'UTF-8'),
array('fòô bàř', 'fòô bàř', 7, 'UTF-8'),
array('fòô bàř', 'fòô bàř', 8, 'UTF-8'),
);
}
public function lastProvider()
{
return array(
array('', 'foo bar', -5),
array('', 'foo bar', 0),
array('r', 'foo bar', 1),
array('bar', 'foo bar', 3),
array('foo bar', 'foo bar', 7),
array('foo bar', 'foo bar', 8),
array('', 'fòô bàř', -5, 'UTF-8'),
array('', 'fòô bàř', 0, 'UTF-8'),
array('ř', 'fòô bàř', 1, 'UTF-8'),
array('bàř', 'fòô bàř', 3, 'UTF-8'),
array('fòô bàř', 'fòô bàř', 7, 'UTF-8'),
array('fòô bàř', 'fòô bàř', 8, 'UTF-8'),
);
}
public function ensureLeftProvider()
{
return array(
array('foobar', 'foobar', 'f'),
array('foobar', 'foobar', 'foo'),
array('foo/foobar', 'foobar', 'foo/'),
array('http://foobar', 'foobar', 'http://'),
array('http://foobar', 'http://foobar', 'http://'),
array('fòôbàř', 'fòôbàř', 'f', 'UTF-8'),
array('fòôbàř', 'fòôbàř', 'fòô', 'UTF-8'),
array('fòô/fòôbàř', 'fòôbàř', 'fòô/', 'UTF-8'),
array('http://fòôbàř', 'fòôbàř', 'http://', 'UTF-8'),
array('http://fòôbàř', 'http://fòôbàř', 'http://', 'UTF-8'),
);
}
public function ensureRightProvider()
{
return array(
array('foobar', 'foobar', 'r'),
array('foobar', 'foobar', 'bar'),
array('foobar/bar', 'foobar', '/bar'),
array('foobar.com/', 'foobar', '.com/'),
array('foobar.com/', 'foobar.com/', '.com/'),
array('fòôbàř', 'fòôbàř', 'ř', 'UTF-8'),
array('fòôbàř', 'fòôbàř', 'bàř', 'UTF-8'),
array('fòôbàř/bàř', 'fòôbàř', '/bàř', 'UTF-8'),
array('fòôbàř.com/', 'fòôbàř', '.com/', 'UTF-8'),
array('fòôbàř.com/', 'fòôbàř.com/', '.com/', 'UTF-8'),
);
}
public function removeLeftProvider()
{
return array(
array('foo bar', 'foo bar', ''),
array('oo bar', 'foo bar', 'f'),
array('bar', 'foo bar', 'foo '),
array('foo bar', 'foo bar', 'oo'),
array('foo bar', 'foo bar', 'oo bar'),
array('fòô bàř', 'fòô bàř', '', 'UTF-8'),
array('òô bàř', 'fòô bàř', 'f', 'UTF-8'),
array('bàř', 'fòô bàř', 'fòô ', 'UTF-8'),
array('fòô bàř', 'fòô bàř', 'òô', 'UTF-8'),
array('fòô bàř', 'fòô bàř', 'òô bàř', 'UTF-8')
);
}
public function removeRightProvider()
{
return array(
array('foo bar', 'foo bar', ''),
array('foo ba', 'foo bar', 'r'),
array('foo', 'foo bar', ' bar'),
array('foo bar', 'foo bar', 'ba'),
array('foo bar', 'foo bar', 'foo ba'),
array('fòô bàř', 'fòô bàř', '', 'UTF-8'),
array('fòô bà', 'fòô bàř', 'ř', 'UTF-8'),
array('fòô', 'fòô bàř', ' bàř', 'UTF-8'),
array('fòô bàř', 'fòô bàř', 'bà', 'UTF-8'),
array('fòô bàř', 'fòô bàř', 'fòô bà', 'UTF-8')
);
}
public function isAlphaProvider()
{
return array(
array(true, ''),
array(true, 'foobar'),
array(false, 'foo bar'),
array(false, 'foobar2'),
array(true, 'fòôbàř', 'UTF-8'),
array(false, 'fòô bàř', 'UTF-8'),
array(false, 'fòôbàř2', 'UTF-8'),
array(true, 'ҠѨњфгШ', 'UTF-8'),
array(false, 'ҠѨњ¨ˆфгШ', 'UTF-8'),
array(true, '丹尼爾', 'UTF-8')
);
}
public function isAlphanumericProvider()
{
return array(
array(true, ''),
array(true, 'foobar1'),
array(false, 'foo bar'),
array(false, 'foobar2"'),
array(false, "\nfoobar\n"),
array(true, 'fòôbàř1', 'UTF-8'),
array(false, 'fòô bàř', 'UTF-8'),
array(false, 'fòôbàř2"', 'UTF-8'),
array(true, 'ҠѨњфгШ', 'UTF-8'),
array(false, 'ҠѨњ¨ˆфгШ', 'UTF-8'),
array(true, '丹尼爾111', 'UTF-8'),
array(true, انيال1', 'UTF-8'),
array(false, انيال1 ', 'UTF-8')
);
}
public function isBlankProvider()
{
return array(
array(true, ''),
array(true, ' '),
array(true, "\n\t "),
array(true, "\n\t \v\f"),
array(false, "\n\t a \v\f"),
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(false, ' z', 'UTF-8'),
array(false, ' 1', 'UTF-8'),
);
}
public function isJsonProvider()
{
return array(
array(true, ''),
array(true, '123'),
array(true, '{"foo": "bar"}'),
array(false, '{"foo":"bar",}'),
array(false, '{"foo"}'),
array(true, '["foo"]'),
array(false, '{"foo": "bar"]'),
array(true, '123', 'UTF-8'),
array(true, '{"fòô": "bàř"}', 'UTF-8'),
array(false, '{"fòô":"bàř",}', 'UTF-8'),
array(false, '{"fòô"}', 'UTF-8'),
array(false, '["fòô": "bàř"]', 'UTF-8'),
array(true, '["fòô"]', 'UTF-8'),
array(false, '{"fòô": "bàř"]', 'UTF-8'),
);
}
public function isLowerCaseProvider()
{
return array(
array(true, ''),
array(true, 'foobar'),
array(false, 'foo bar'),
array(false, 'Foobar'),
array(true, 'fòôbàř', 'UTF-8'),
array(false, 'fòôbàř2', 'UTF-8'),
array(false, 'fòô bàř', 'UTF-8'),
array(false, 'fòôbÀŘ', 'UTF-8'),
);
}
public function isSerializedProvider()
{
return array(
array(false, ''),
array(true, 'a:1:{s:3:"foo";s:3:"bar";}'),
array(false, 'a:1:{s:3:"foo";s:3:"bar"}'),
array(true, serialize(array('foo' => 'bar'))),
array(true, 'a:1:{s:5:"fòô";s:5:"bàř";}', 'UTF-8'),
array(false, 'a:1:{s:5:"fòô";s:5:"bàř"}', 'UTF-8'),
array(true, serialize(array('fòô' => 'bár')), 'UTF-8'),
);
}
public function isUpperCaseProvider()
{
return array(
array(true, ''),
array(true, 'FOOBAR'),
array(false, 'FOO BAR'),
array(false, 'fOOBAR'),
array(true, 'FÒÔBÀŘ', 'UTF-8'),
array(false, 'FÒÔBÀŘ2', 'UTF-8'),
array(false, 'FÒÔ BÀŘ', 'UTF-8'),
array(false, 'FÒÔBàř', 'UTF-8'),
);
}
public function isHexadecimalProvider()
{
return array(
array(true, ''),
array(true, 'abcdef'),
array(true, 'ABCDEF'),
array(true, '0123456789'),
array(true, '0123456789AbCdEf'),
array(false, '0123456789x'),
array(false, 'ABCDEFx'),
array(true, 'abcdef', 'UTF-8'),
array(true, 'ABCDEF', 'UTF-8'),
array(true, '0123456789', 'UTF-8'),
array(true, '0123456789AbCdEf', 'UTF-8'),
array(false, '0123456789x', 'UTF-8'),
array(false, 'ABCDEFx', 'UTF-8'),
);
}
public function countSubstrProvider()
{
return array(
array(0, '', 'foo'),
array(0, 'foo', 'bar'),
array(1, 'foo bar', 'foo'),
array(2, 'foo bar', 'o'),
array(0, '', 'fòô', 'UTF-8'),
array(0, 'fòô', 'bàř', 'UTF-8'),
array(1, 'fòô bàř', 'fòô', 'UTF-8'),
array(2, 'fôòô bàř', 'ô', 'UTF-8'),
array(0, 'fÔÒÔ bàř', 'ô', 'UTF-8'),
array(0, 'foo', 'BAR', false),
array(1, 'foo bar', 'FOo', false),
array(2, 'foo bar', 'O', false),
array(1, 'fòô bàř', 'fÒÔ', false, 'UTF-8'),
array(2, 'fôòô bàř', 'Ô', false, 'UTF-8'),
array(2, 'συγγραφέας', 'Σ', false, 'UTF-8')
);
}
public function replaceProvider()
{
return array(
array('', '', '', ''),
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 ', ''),
array('', '', '', '', 'UTF-8'),
array('fòô', '', '', 'fòô', 'UTF-8'),
array('fòô', '\s', '\s', 'fòô', 'UTF-8'),
array('fòô bàř', 'fòô bàř', '', '', 'UTF-8'),
array('bàř', 'fòô bàř', 'fòô ', '', 'UTF-8'),
array('far bàř', 'fòô bàř', 'fòô', 'far', 'UTF-8'),
array('bàř bàř', 'fòô bàř fòô bàř', 'fòô ', '', 'UTF-8'),
);
}
public function regexReplaceProvider()
{
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'),
array('bàř', 'fòô ', 'f[òô]+\s', 'bàř', 'msr', 'UTF-8'),
array('fòô', 'bàř', '[[:alpha:]]{3}', 'fòô', 'msr', 'UTF-8')
);
}
}

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,630 +1,60 @@
<?php
require __DIR__ . '/../src/StaticStringy.php';
use Stringy\StaticStringy as S;
class StaticStringyTestCase extends CommonTest
class StaticStringyTestCase extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider charsProvider()
* @expectedException BadMethodCallException
*/
public function testChars($expected, $str, $encoding = null)
public function testBadMethodCall()
{
$result = S::chars($str, $encoding);
$this->assertInternalType('array', $result);
foreach ($result as $char) {
$this->assertInternalType('string', $char);
$result = S::invalidMethod('foo');
}
public function testEmptyArgsInvocation()
{
$result = S::toLowerCase();
$this->assertEquals('', (string) $result);
}
public function testInvocation()
{
$result = S::toLowerCase('FOOBAR');
$this->assertEquals('foobar', (string) $result);
}
public function testPartialArgsInvocation()
{
$result = S::slice('foobar', 0, 3);
$this->assertEquals('foo', (string) $result);
}
public function testFullArgsInvocation()
{
$result = S::slice('fòôbàř', 0, 3, 'UTF-8');
$this->assertEquals('fòô', (string) $result);
}
/**
* Use reflection to ensure that all argument numbers are correct. Each
* static method should accept 2 more arguments than their Stringy
* equivalent.
*/
public function testArgumentNumbers()
{
$staticStringyClass = new ReflectionClass('Stringy\StaticStringy');
$stringyClass = new ReflectionClass('Stringy\Stringy');
// getStaticPropertyValue can't access protected properties
$properties = $staticStringyClass->getStaticProperties();
foreach ($properties['methodArgs'] as $method => $expected) {
$num = $stringyClass->getMethod($method)
->getNumberOfParameters() + 2;
$this->assertEquals($expected, $num,
'Invalid num args for ' . $method);
}
$this->assertEquals($expected, $result);
}
/**
* @dataProvider upperCaseFirstProvider()
*/
public function testUpperCaseFirst($expected, $str, $encoding = null)
{
$result = S::upperCaseFirst($str, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider lowerCaseFirstProvider()
*/
public function testLowerCaseFirst($expected, $str, $encoding = null)
{
$result = S::lowerCaseFirst($str, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider camelizeProvider()
*/
public function testCamelize($expected, $str, $encoding = null)
{
$result = S::camelize($str, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider upperCamelizeProvider()
*/
public function testUpperCamelize($expected, $str, $encoding = null)
{
$result = S::upperCamelize($str, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider dasherizeProvider()
*/
public function testDasherize($expected, $str, $encoding = null)
{
$result = S::dasherize($str, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider underscoredProvider()
*/
public function testUnderscored($expected, $str, $encoding = null)
{
$result = S::underscored($str, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider swapCaseProvider()
*/
public function testSwapCase($expected, $str, $encoding = null)
{
$result = S::swapCase($str, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider titleizeProvider()
*/
public function testTitleize($expected, $str, $ignore = null,
$encoding = null)
{
$result = S::titleize($str, $ignore, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider humanizeProvider()
*/
public function testHumanize($expected, $str, $encoding = null)
{
$result = S::humanize($str, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider tidyProvider()
*/
public function testTidy($expected, $str)
{
$result = S::tidy($str);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider collapseWhitespaceProvider()
*/
public function testCollapseWhitespace($expected, $str, $encoding = null)
{
$result = S::collapseWhitespace($str, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider toAsciiProvider()
*/
public function testToAscii($expected, $str)
{
$result = S::toAscii($str);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider padProvider()
*/
public function testPad($expected, $str, $length, $padStr = ' ',
$padType = 'right', $encoding = null)
{
$result = S::pad($str, $length, $padStr, $padType, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @expectedException \InvalidArgumentException
*/
public function testPadException()
{
$result = S::pad('string', 5, 'foo', 'bar');
}
/**
* @dataProvider padLeftProvider()
*/
public function testPadLeft($expected, $str, $length, $padStr = ' ',
$encoding = null)
{
$result = S::padLeft($str, $length, $padStr, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider padRightProvider()
*/
public function testPadRight($expected, $str, $length, $padStr = ' ',
$encoding = null)
{
$result = S::padRight($str, $length, $padStr, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider padBothProvider()
*/
public function testPadBoth($expected, $str, $length, $padStr = ' ',
$encoding = null)
{
$result = S::padBoth($str, $length, $padStr, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider startsWithProvider()
*/
public function testStartsWith($expected, $str, $substring,
$caseSensitive = true, $encoding = null)
{
$result = S::startsWith($str, $substring, $caseSensitive, $encoding);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider endsWithProvider()
*/
public function testEndsWith($expected, $str, $substring,
$caseSensitive = true, $encoding = null)
{
$result = S::endsWith($str, $substring, $caseSensitive, $encoding);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider toSpacesProvider()
*/
public function testToSpaces($expected, $str, $tabLength = 4)
{
$result = S::toSpaces($str, $tabLength);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider toTabsProvider()
*/
public function testToTabs($expected, $str, $tabLength = 4)
{
$result = S::toTabs($str, $tabLength);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider toLowerCaseProvider()
*/
public function testToLowerCase($expected, $str, $encoding = null)
{
$result = S::toLowerCase($str, $encoding);
$this->assertInternalType('string', $result);
$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()
*/
public function testToUpperCase($expected, $str, $encoding = null)
{
$result = S::toUpperCase($str, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider slugifyProvider()
*/
public function testSlugify($expected, $str, $replacement = '-')
{
$result = S::slugify($str, $replacement);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider containsProvider()
*/
public function testContains($expected, $haystack, $needle,
$caseSensitive = true, $encoding = null)
{
$result = S::contains($haystack, $needle, $caseSensitive, $encoding);
$this->assertInternalType('boolean', $result);
$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()
*/
public function testSurround($expected, $str, $substring)
{
$result = S::surround($str, $substring);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider insertProvider()
*/
public function testInsert($expected, $str, $substring, $index,
$encoding = null)
{
$result = S::insert($str, $substring, $index, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider truncateProvider()
*/
public function testTruncate($expected, $str, $length, $substring = '',
$encoding = null)
{
$result = S::truncate($str, $length, $substring, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider safeTruncateProvider()
*/
public function testSafeTruncate($expected, $str, $length, $substring = '',
$encoding = null)
{
$result = S::safeTruncate($str, $length, $substring, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider reverseProvider()
*/
public function testReverse($expected, $str, $encoding = null)
{
$result = S::reverse($str, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider shuffleProvider()
*/
public function testShuffle($str, $encoding = null)
{
$result = S::shuffle($str, $encoding);
$encoding = $encoding ?: mb_internal_encoding();
$this->assertInternalType('string', $result);
$this->assertEquals(mb_strlen($str, $encoding),
mb_strlen($result, $encoding));
// We'll make sure that the chars are present after shuffle
for ($i = 0; $i < mb_strlen($str, $encoding); $i++) {
$char = mb_substr($str, $i, 1, $encoding);
$countBefore = mb_substr_count($str, $char, $encoding);
$countAfter = mb_substr_count($result, $char, $encoding);
$this->assertEquals($countBefore, $countAfter);
}
}
/**
* @dataProvider trimProvider()
*/
public function testTrim($expected, $str)
{
$result = S::trim($str);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider longestCommonPrefixProvider()
*/
public function testLongestCommonPrefix($expected, $str, $otherStr,
$encoding = null)
{
$result = S::longestCommonPrefix($str, $otherStr, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider longestCommonSuffixProvider()
*/
public function testLongestCommonSuffix($expected, $str, $otherStr,
$encoding = null)
{
$result = S::longestCommonSuffix($str, $otherStr, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider longestCommonSubstringProvider()
*/
public function testLongestCommonSubstring($expected, $str, $otherStr,
$encoding = null)
{
$result = S::longestCommonSubstring($str, $otherStr, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider lengthProvider()
*/
public function testLength($expected, $str, $encoding = null)
{
$result = S::length($str, $encoding);
$this->assertEquals($expected, $result);
$this->assertInternalType('int', $result);
}
/**
* @dataProvider substrProvider()
*/
public function testSubstr($expected, $str, $start, $length = null,
$encoding = null)
{
$result = S::substr($str, $start, $length, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider atProvider()
*/
public function testAt($expected, $str, $index, $encoding = null)
{
$result = S::at($str, $index, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider firstProvider()
*/
public function testFirst($expected, $str, $n, $encoding = null)
{
$result = S::first($str, $n, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider lastProvider()
*/
public function testLast($expected, $str, $n, $encoding = null)
{
$result = S::last($str, $n, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider ensureLeftProvider()
*/
public function testEnsureLeft($expected, $str, $substring, $encoding = null)
{
$result = S::ensureLeft($str, $substring, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider ensureRightProvider()
*/
public function testEnsureRight($expected, $str, $substring, $encoding = null)
{
$result = S::ensureRight($str, $substring, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider removeLeftProvider()
*/
public function testRemoveLeft($expected, $str, $substring, $encoding = null)
{
$result = S::removeLeft($str, $substring, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider removeRightProvider()
*/
public function testRemoveRight($expected, $str, $substring, $encoding = null)
{
$result = S::removeRight($str, $substring, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider isAlphaProvider()
*/
public function testIsAlpha($expected, $str, $encoding = null)
{
$result = S::isAlpha($str, $encoding);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider isAlphanumericProvider()
*/
public function testIsAlphanumeric($expected, $str, $encoding = null)
{
$result = S::isAlphanumeric($str, $encoding);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider isBlankProvider()
*/
public function testIsBlank($expected, $str, $encoding = null)
{
$result = S::isBlank($str, $encoding);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider isJsonProvider()
*/
public function testIsJson($expected, $str, $encoding = null)
{
$result = S::isJson($str, $encoding);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider isLowerCaseProvider()
*/
public function testIsLowerCase($expected, $str, $encoding = null)
{
$result = S::isLowerCase($str, $encoding);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider isSerializedProvider()
*/
public function testIsSerialized($expected, $str, $encoding = null)
{
$result = S::isSerialized($str, $encoding);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider isUpperCaseProvider()
*/
public function testIsUpperCase($expected, $str, $encoding = null)
{
$result = S::isUpperCase($str, $encoding);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider isHexadecimalProvider()
*/
public function testIsHexadecimal($expected, $str, $encoding = null)
{
$result = S::isHexadecimal($str, $encoding);
$this->assertInternalType('boolean', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider countSubstrProvider()
*/
public function testCountSubstr($expected, $str, $substring,
$caseSensitive = true, $encoding = null)
{
$result = S::countSubstr($str, $substring, $caseSensitive, $encoding);
$this->assertInternalType('int', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider replaceProvider()
*/
public function testReplace($expected, $str, $search, $replacement,
$encoding = null)
{
$result = S::replace($str, $search, $replacement, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
/**
* @dataProvider regexReplaceProvider()
*/
public function testRegexReplace($expected, $str, $pattern, $replacement,
$options = 'msr', $encoding = null)
{
$result = S::regexReplace($str, $pattern, $replacement, $options, $encoding);
$this->assertInternalType('string', $result);
$this->assertEquals($expected, $result);
}
}

File diff suppressed because it is too large Load Diff