38 Commits
0.1.4 ... 0.1.9

Author SHA1 Message Date
xevolic
140acd1eb3 Merge pull request #2 from wiosna-dev/fix/UW-2934_Add_support_for_PHP_8.2
[UW-2934] chore(deps): enabled gedmo/doctrine-extensions in version 3.11 or higher
2023-03-09 15:23:55 +01:00
Tomasz Kuter
4eaca747e7 [UW-2934] chore(deps): enabled gedmo/doctrine-extensions in version 3.11 or higher 2023-02-14 20:06:29 +01:00
Krzysztof Nizioł
28a11d611c Merge branch 'master' of github.com:meritoo/common-library 2019-03-25 09:23:57 +01:00
Meritoo
5022efb9a3 Minor refactoring 2019-03-24 22:19:45 +01:00
Meritoo
56b058ca1d Size, e.g. of image 2019-03-24 22:15:54 +01:00
Meritoo
eade6a25ad Collection > the getByIndex() method > returns element with given index 2019-03-16 19:58:02 +01:00
Meritoo
9f6af6b6a4 Collection > create trait (to make it more flexible) 2019-03-16 12:37:35 +01:00
Krzysztof Nizioł
df36e050e7 Merge branch 'master' of github.com:meritoo/common-library 2019-03-05 10:21:44 +01:00
Meritoo
a021870ebd Minor refactoring 2019-03-05 10:18:45 +01:00
Meritoo
d88ead92fe Tests > use @dataProvider 2019-03-05 10:18:35 +01:00
Meritoo
5ebde80646 Tests > use "Meritoo\Test\Common" namespace (instead of "Meritoo\Common\Test") 2019-03-04 19:35:42 +01:00
Meritoo
fe40d9caee ValueObject > Human > represents a human 2019-03-04 19:25:38 +01:00
Meritoo
ba6c185ed9 Tests > missing tests 2019-03-04 19:24:23 +01:00
Meritoo
c175fcd126 Minor refactoring 2019-03-04 19:22:07 +01:00
Meritoo
2247000a8a Documentation > Value Objects > add missing information 2019-03-04 18:52:07 +01:00
Meritoo
924e492e11 Arrays > refactoring & more tests 2019-02-24 23:21:55 +01:00
Krzysztof Nizioł
ddd558a7d4 Merge remote-tracking branch 'meritoo/master' 2019-02-23 13:29:37 +01:00
Meritoo
ede9a182b4 Changelog > update > enter latest modifications 2019-02-23 12:47:10 +01:00
Meritoo
fad0aa607a Changelog > update > enter latest modifications 2019-02-23 11:58:13 +01:00
Meritoo
3a38c09ce2 ValueObject > Company > represents a company 2019-02-22 20:38:13 +01:00
Meritoo
07a04d86f0 ValueObject > BankAccount > represents bank account 2019-02-22 20:37:16 +01:00
Meritoo
0c7e27b884 ValueObject > Address > represents address of company, institution, user etc. 2019-02-22 20:35:43 +01:00
Meritoo
421d336498 Tests > ValueObject > Version > fix namespace 2019-02-22 14:19:32 +01:00
Meritoo
292c5e6d4f Arrays > getNonEmptyValues() method > returns non-empty values, e.g. without "" (empty string), null or []
Arrays > getNonEmptyValuesAsString() method > returns non-empty values concatenated by given separator
2019-02-22 14:19:17 +01:00
Meritoo
79c09a26a6 Regex > createSlug() method > returns slug for given value 2019-02-21 23:26:36 +01:00
Meritoo
d46548d102 Miscellaneous > variableDump() method > remove, because unnecessary 2019-02-21 23:10:15 +01:00
Meritoo
651c4f2259 Minor refactoring 2019-02-21 23:09:42 +01:00
Meritoo
8c3c85608a Tests > Regex > minor update 2019-02-21 16:54:06 +01:00
Meritoo
22c96f0a18 Tests > Regex > fix "The mode is not binary-safe ('b' is missing)" bug 2019-02-21 16:51:18 +01:00
Meritoo
aa93cd8e25 Tests > Regex > remove unnecessary @throws tags 2019-02-21 16:50:20 +01:00
Meritoo
4391baed3d Fix "Argument 3 of Meritoo\Common\Utilities\Date::getDateDifference expects int|null, string(days) provided" bug 2019-02-04 22:43:07 +01:00
Meritoo
b879dbd803 .gitignore > minor update 2019-01-27 14:54:20 +01:00
Meritoo
7233fdac52 Phing > update configuration 2019-01-27 14:54:02 +01:00
Meritoo
ec5129ad6b Tests > Date > more test cases 2018-11-09 23:39:01 +01:00
Krzysztof Nizioł
e31af27c01 Merge branch 'master' of github.com:meritoo/common-library
# Conflicts:
#	README.md
2018-09-06 22:01:00 +02:00
Krzysztof Niziol
3bcda8e906 composer.json - update name of this package (name of vendor, actually) 2017-11-08 14:52:19 +01:00
Krzysztof Niziol
1641c50d1d composer.json - update name of this package 2017-11-07 16:34:49 +01:00
Krzysztof Niziol
afbbdfe437 composer.json - update name of this package 2017-11-07 15:24:51 +01:00
91 changed files with 5981 additions and 1047 deletions

48
.gitignore vendored
View File

@@ -1,5 +1,5 @@
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Environment-related parameters ### Environment-related parameters
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
.env .env
@@ -51,42 +51,15 @@
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
### Compiled source ### JetBrains template
# ------------------------------------------------------------------------------
*.com
*.class
*.dll
*.exe
*.o
*.so
# ------------------------------------------------------------------------------
### Shell scripts
# ------------------------------------------------------------------------------
/*.sh
# ------------------------------------------------------------------------------
### JetBrains
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
/.idea /.idea
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
### NetBeans template ### macOS template
# ------------------------------------------------------------------------------
nbproject/private/
nbbuild/
dist/
nbdist/
nbactions.xml
.nb-gradle/
# ------------------------------------------------------------------------------
### OSX template
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# General
.DS_Store .DS_Store
.AppleDouble .AppleDouble
.LSOverride .LSOverride
@@ -104,6 +77,7 @@ Icon
.TemporaryItems .TemporaryItems
.Trashes .Trashes
.VolumeIcon.icns .VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share # Directories potentially created on remote AFP share
.AppleDB .AppleDB
@@ -127,16 +101,23 @@ Temporary Items
# Linux trash folder which might appear on any partition or disk # Linux trash folder which might appear on any partition or disk
.Trash-* .Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
### Windows template ### Windows template
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Windows image file caches # Windows thumbnail cache files
Thumbs.db Thumbs.db
ehthumbs.db ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file # Folder config file
Desktop.ini [Dd]esktop.ini
# Recycle Bin used on file shares # Recycle Bin used on file shares
$RECYCLE.BIN/ $RECYCLE.BIN/
@@ -144,6 +125,7 @@ $RECYCLE.BIN/
# Windows Installer files # Windows Installer files
*.cab *.cab
*.msi *.msi
*.msix
*.msm *.msm
*.msp *.msp

View File

@@ -2,6 +2,33 @@
Common and useful classes, methods, exceptions etc. Common and useful classes, methods, exceptions etc.
# 0.1.8
1. Size, e.g. of image
# 0.1.7
1. Collection > create trait (to make it more flexible)
# 0.1.6
1. Arrays > refactoring & more tests
2. ValueObject > Human > represents a human
3. Tests > use `Meritoo\Test\Common` namespace (instead of `Meritoo\Common\Test`)
4. Tests > use @dataProvider
# 0.1.5
1. Tests > Date > one more test case
2. Phing > update configuration
3. Miscellaneous > variableDump() method > remove, because unnecessary
4. Regex > createSlug() method > returns slug for given value
5. Arrays > getNonEmptyValues() method > returns non-empty values, e.g. without "" (empty string), null or []
6. Arrays > getNonEmptyValuesAsString() method > returns non-empty values concatenated by given separator
7. ValueObject > Company > represents a company
8. ValueObject > BankAccount > represents bank account
9. ValueObject > Address > represents address of company, institution, user etc.
# 0.1.4 # 0.1.4
1. Phing > update configuration 1. Phing > update configuration

View File

@@ -6,10 +6,22 @@ Common and useful classes, methods, exceptions etc.
# Installation # Installation
In your `composer.json` add address of repository into `repositories` section:
```json
"repositories": [
(...)
{
"type": "vcs",
"url": "https://github.com/wiosna-dev/common-library"
}
]
```
Run [Composer](https://getcomposer.org) to install this package in your project: Run [Composer](https://getcomposer.org) to install this package in your project:
```bash ```bash
composer require meritoo/common-library composer require wiosna-dev/common-library
``` ```
> [How to install Composer?](https://getcomposer.org/download) > [How to install Composer?](https://getcomposer.org/download)
@@ -20,6 +32,8 @@ composer require meritoo/common-library
2. [Collection of elements](docs/Collection-of-elements.md) 2. [Collection of elements](docs/Collection-of-elements.md)
3. [Exceptions](docs/Static-methods.md) 3. [Exceptions](docs/Static-methods.md)
4. [Static methods](docs/Static-methods.md) 4. [Static methods](docs/Static-methods.md)
1. [Arrays](docs/Static-methods/Arrays.md)
2. [Regex](docs/Static-methods/Regex.md)
5. [Value Objects](docs/Value-Objects.md) 5. [Value Objects](docs/Value-Objects.md)
# Development # Development

View File

@@ -1 +1 @@
0.1.4 0.1.8

View File

@@ -1,5 +1,5 @@
{ {
"name": "meritoo/common-library", "name": "wiosna-dev/common-library",
"description": "Useful classes, methods, extensions etc.", "description": "Useful classes, methods, extensions etc.",
"license": "MIT", "license": "MIT",
"authors": [ "authors": [
@@ -11,10 +11,14 @@
], ],
"require": { "require": {
"php": ">=5.6", "php": ">=5.6",
"ext-dom": "*",
"ext-fileinfo": "*",
"ext-json": "*",
"ext-simplexml": "*",
"ext-intl": "*", "ext-intl": "*",
"ext-pcre": "*", "ext-pcre": "*",
"doctrine/orm": "^2.5", "doctrine/orm": "^2.5",
"gedmo/doctrine-extensions": "^2.4" "gedmo/doctrine-extensions": "^2.4 || ^3.11"
}, },
"require-dev": { "require-dev": {
"friendsofphp/php-cs-fixer": "^2.2", "friendsofphp/php-cs-fixer": "^2.2",
@@ -32,7 +36,7 @@
}, },
"autoload-dev": { "autoload-dev": {
"psr-4": { "psr-4": {
"Meritoo\\Common\\Test\\": "tests/" "Meritoo\\Test\\Common\\": "tests/"
} }
}, },
"config": { "config": {

View File

@@ -48,6 +48,8 @@ class MimeTypesTest extends BaseTestCase
2. [Collection of elements](Collection-of-elements.md) 2. [Collection of elements](Collection-of-elements.md)
3. [Exceptions](Exceptions.md) 3. [Exceptions](Exceptions.md)
4. [Static methods](Static-methods.md) 4. [Static methods](Static-methods.md)
1. [Arrays](Static-methods/Arrays.md)
2. [Regex](Static-methods/Regex.md)
5. [Value Objects](Value-Objects.md) 5. [Value Objects](Value-Objects.md)
[‹ Back to `Readme`](../README.md) [‹ Back to `Readme`](../README.md)

View File

@@ -46,6 +46,8 @@ var_dump($simpleCollection->has('dolor')); // bool(true)
2. [**Collection of elements**](Collection-of-elements.md) 2. [**Collection of elements**](Collection-of-elements.md)
3. [Exceptions](Exceptions.md) 3. [Exceptions](Exceptions.md)
4. [Static methods](Static-methods.md) 4. [Static methods](Static-methods.md)
1. [Arrays](Static-methods/Arrays.md)
2. [Regex](Static-methods/Regex.md)
5. [Value Objects](Value-Objects.md) 5. [Value Objects](Value-Objects.md)
[‹ Back to `Readme`](../README.md) [‹ Back to `Readme`](../README.md)

View File

@@ -57,6 +57,8 @@ class UnknownSimpleTypeException extends UnknownTypeException
2. [Collection of elements](Collection-of-elements.md) 2. [Collection of elements](Collection-of-elements.md)
3. [**Exceptions**](Exceptions.md) 3. [**Exceptions**](Exceptions.md)
4. [Static methods](Static-methods.md) 4. [Static methods](Static-methods.md)
1. [Arrays](Static-methods/Arrays.md)
2. [Regex](Static-methods/Regex.md)
5. [Value Objects](Value-Objects.md) 5. [Value Objects](Value-Objects.md)
[‹ Back to `Readme`](../README.md) [‹ Back to `Readme`](../README.md)

View File

@@ -19,6 +19,8 @@ var_dump($firstElement); // string(5) "lorem"
2. [Collection of elements](Collection-of-elements.md) 2. [Collection of elements](Collection-of-elements.md)
3. [Exceptions](Exceptions.md) 3. [Exceptions](Exceptions.md)
4. [**Static methods**](Static-methods.md) 4. [**Static methods**](Static-methods.md)
1. [Arrays](Static-methods/Arrays.md)
2. [Regex](Static-methods/Regex.md)
5. [Value Objects](Value-Objects.md) 5. [Value Objects](Value-Objects.md)
[‹ Back to `Readme`](../README.md) [‹ Back to `Readme`](../README.md)

View File

@@ -0,0 +1,78 @@
# Meritoo Common Library
Common and useful classes, methods, exceptions etc.
# Arrays
> Useful methods related to arrays
Class: `Meritoo\Common\Utilities\Arrays`
File: `src/Utilities/Arrays.php`
### getNonEmptyValues(array $values)
> Returns non-empty values, e.g. without "" (empty string), null or []
##### Arguments
- `array $values` - The values to filter
##### Example 1
- values: `[]` (no values)
- result: `[]` (an empty array)
##### Example 2
- values: `[null, ""]` (all empty values)
- result: `[]` (an empty array)
##### Example 3
- values: `["test 1", "", 123, null, 0]`
- result: `["test 1", 123, 0]`
### getNonEmptyValuesAsString(array $values, $separator = ', ')
> Returns non-empty values concatenated by given separator
##### Arguments
- `array $values` - The values to filter
- `[string $separator]` - (optional) Separator used to implode the values. Default: ", ".
##### Example 1
- values: `[]` (no values)
- separator: default or any other string
- result: `""` (an empty string)
##### Example 2
- values: `[null, ""]` (all empty values)
- separator: default or any other string
- result: `""` (an empty string)
##### Example 3
- values: `["test 1", "", 123, null, 0]`
- separator: `", "` (default)
- result: `"test 1, 123, 0"`
##### Example 4
- values: `["test 1", "", 123, null, 0]`
- separator: `" | "`
- result: `"test 1 | 123 | 0"`
# More
1. [Base test case (with common methods and data providers)](../Base-test-case.md)
2. [Collection of elements](../Collection-of-elements.md)
3. [Exceptions](../Exceptions.md)
4. [Static methods](../Static-methods.md)
1. [**Arrays**](Arrays.md)
2. [Regex](Regex.md)
5. [Value Objects](../Value-Objects.md)
[‹ Back to `Readme`](../../README.md)

View File

@@ -0,0 +1,45 @@
# Meritoo Common Library
Common and useful classes, methods, exceptions etc.
# Regex
> Useful methods related to regular expressions
Class: `Meritoo\Common\Utilities\Regex`
File: `src/Utilities/Regex.php`
### createSlug($value)
> Returns slug for given value
##### Arguments
- `string $value` - Value that should be transformed to slug
##### Example 1
- value: non-scalar or `null`
- result: `false`
##### Example 2
- value: `""` (an empty string)
- result: `""` (an empty string)
##### Example 3
- value: `"Lorem ipsum. Dolor sit 12.34 amet."`
- result: `"lorem-ipsum-dolor-sit-1234-amet"`
# More
1. [Base test case (with common methods and data providers)](../Base-test-case.md)
2. [Collection of elements](../Collection-of-elements.md)
3. [Exceptions](../Exceptions.md)
4. [Static methods](../Static-methods.md)
1. [Arrays](../Static-methods/Arrays.md)
2. [**Regex**](Regex.md)
5. [Value Objects](../Value-Objects.md)
[‹ Back to `Readme`](../../README.md)

View File

@@ -4,7 +4,240 @@ Common and useful classes, methods, exceptions etc.
# Value Objects # Value Objects
Located in `Meritoo\Common\ValueObject` namespace. Located in `Meritoo\Common\ValueObject` namespace and in `src/ValueObject/` directory.
### Address
##### Namespace
`Meritoo\Common\ValueObject\Address`
##### Info
Represents address of company, institution, user etc. Contains properties:
1. `$street` - the street
2. `$buildingNumber` - the number of building
3. `$flatNumber` - the number of flat
4. `$zipCode` - the zip code
5. `$city` - the city, location
##### New instance
New instance can be created using constructor
```php
new Address('New York', '00123', '4th Avenue', '10', '200');
```
##### Methods
Has getters for each property, e.g. `getFlatNumber()` or `getZipCode()`, and 1 extra method:
```php
getFullStreet()
```
that returns name of street with related numbers (building & flat number).
Example:
```php
$address = new Address('New York', '00123', '4th Avenue', '10', '200');
$fullStreet = $address->getFullStreet(); // "4th Avenue 10/200"
```
##### Conversion to string (the `__toString()` method)
Instance of `Address` may be represented as string that contains all non-empty properties separated by `, `.
Example:
```php
$address = new Address('New York', '00123', '4th Avenue', '10', '200');
$asString = (string)$address; // "4th Avenue 10/200, 00123, New York"
```
### BankAccount
##### Namespace
`Meritoo\Common\ValueObject\BankAccount`
##### Info
Represents bank account. Contains properties:
1. `$bankName` - name of bank
2. `$accountNumber` - number of bank's account
##### New instance
New instance can be created using constructor
```php
new BankAccount('Bank of America', '1234567890')
```
##### Methods
Has getters for each property `getBankName()` and `getAccountNumber()`.
##### Conversion to string (the `__toString()` method)
Instance of `BankAccount` may be represented as string that contains all non-empty properties separated by `, `.
Example:
```php
$bank = new BankAccount('Bank of America', '1234567890');
$asString = (string)$bank; // "Bank of America, 1234567890"
```
### Company
##### Namespace
`Meritoo\Common\ValueObject\Company`
##### Info
Represents a company. Contains properties:
1. `$name` - name of company
2. `$address` - address of company
3. `$bankAccount` - bank account of company
##### New instance
New instance can be created using constructor:
```php
new Company(
'Test 1',
new Address('New York', '00123', '4th Avenue', '10', '200'),
new BankAccount('Bank 1', '12345')
);
```
##### Methods
Has getters for each property `getName()`, `getAddress()` and `getBankAccount()`.
##### Conversion to string (the `__toString()` method)
Instance of `Company` may be represented as string that contains all non-empty properties separated by `, `.
Example:
```php
$company = new Company(
'Test 1',
new Address('New York', '00123', '4th Avenue', '10', '200'),
new BankAccount('Bank 1', '12345')
);
$asString = (string)$company; // "Test 1, 4th Avenue 10/200, 00123, New York, Bank 1, 12345"
```
### Human
##### Namespace
`Meritoo\Common\ValueObject\Human`
##### Info
Represents human. Based on `\Meritoo\Common\Traits\ValueObject\HumanTrait` trait. Contains properties same as `HumanTrait` trait:
1. `$firstName` - first name
2. `$lastName` - last name
3. `$email` - email address
4. `$birthDate` - birth date
##### New instance
New instance can be created using constructor:
```php
new Human('John', 'Scott', 'john@scott.com', new \DateTime('2001-01-01'));
```
##### Methods
Has getters for each property, e.g. `getFirstName()`, `getEmail()` etc.
##### Conversion to string (the `__toString()` method)
Instance of `Human` may be represented as string that contains first name, last name and email address (if provided).
Example:
```php
$human1 = new Human('John', 'Scott');
$asString1 = (string)$human1; // "John Scott"
$human2 = new Human('John', 'Scott', 'john@scott.com', new \DateTime('2001-01-01'));
$asString2 = (string)$human2; // "John Scott <john@scott.com>"
```
### Size
##### Namespace
`Meritoo\Common\ValueObject\Size`
##### Info
Size, e.g. of image. Contains properties:
1. `width` - the width
2. `height` - the height
3. `unit` - unit used when width or height should be returned with unit, default: `"px"`
4. `separator` - separator used when converting to string, default: `" x "`
##### New instance
New instance can be created using static methods:
1. `fromArray()` - creates new instance from given array
```php
// Using default "px" unit
Size::fromArray([200, 100]);
// With custom "mm" unit
Size::fromArray([200, 100], 'mm');
```
2. `fromString()` - creates new instance from given string
```php
// Using default "px" unit and default " x " separator
Size::fromString('200 x 100');
// With custom "mm" unit and " X " separator
Size::fromString('200 X 100', 'mm', ' X ');
```
##### Methods
Has:
- getters and setters for `width` and `height` properties.
- setter for `separator` property
- `toString()` and `toArray()` methods that returns size represented as string and array
##### Conversion to string (using `__toString()` method)
Instance of `Size` may be represented as string that contains width and height separated by separator (default: `" x "`).
Example:
```php
$size = Size::fromArray([200, 100]);
// With default separator
$asString1 = (string)$size; // "200 x 100"
// With custom separator
$size->setSeparator('X');
$asString2 = (string)$size; // "200X100"
```
### Version ### Version
@@ -14,7 +247,7 @@ Located in `Meritoo\Common\ValueObject` namespace.
##### Info ##### Info
Represents version of software. Contains 3 properties: Represents version of software. Contains properties:
1. `$majorPart` - the "major" part of version 1. `$majorPart` - the "major" part of version
2. `$minorPart` - the "minor" part of version 2. `$minorPart` - the "minor" part of version
3. `$patchPart` - the "patch" part of version 3. `$patchPart` - the "patch" part of version
@@ -42,12 +275,29 @@ New instance can be created using:
Version::fromString('1.0.2'); Version::fromString('1.0.2');
``` ```
##### Methods
Has getters for each property: `getMajorPart()`, `getMinorPart()`, `getPatchPart()`.
##### Conversion to string (using `__toString()` method)
Instance of `Version` may be represented as string that contains all properties separated by `.` (`$majorPart`.`$minorPart`.`$patchPart`).
Example:
```php
$version = new Version(1, 0, 2);
$asString = (string)$version; // "1.0.2"
```
# More # More
1. [Base test case (with common methods and data providers)](Base-test-case.md) 1. [Base test case (with common methods and data providers)](Base-test-case.md)
2. [Collection of elements](Collection-of-elements.md) 2. [Collection of elements](Collection-of-elements.md)
3. [Exceptions](Exceptions.md) 3. [Exceptions](Exceptions.md)
4. [Static methods](Static-methods.md) 4. [Static methods](Static-methods.md)
1. [Arrays](Static-methods/Arrays.md)
2. [Regex](Static-methods/Regex.md)
5. [**Value Objects**](Value-Objects.md) 5. [**Value Objects**](Value-Objects.md)
[&lsaquo; Back to `Readme`](../README.md) [&lsaquo; Back to `Readme`](../README.md)

View File

@@ -7,7 +7,7 @@ EXPECTED_SIGNATURE="$(curl -L https://composer.github.io/installer.sig)"
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
ACTUAL_SIGNATURE="$(php -r "echo hash_file('SHA384', 'composer-setup.php');")" ACTUAL_SIGNATURE="$(php -r "echo hash_file('SHA384', 'composer-setup.php');")"
if [ "$EXPECTED_SIGNATURE" != "$ACTUAL_SIGNATURE" ] if [[ "$EXPECTED_SIGNATURE" != "$ACTUAL_SIGNATURE" ]]
then then
>&2 echo 'ERROR: Invalid installer signature' >&2 echo 'ERROR: Invalid installer signature'
rm composer-setup.php rm composer-setup.php
@@ -17,4 +17,4 @@ fi
php composer-setup.php --quiet php composer-setup.php --quiet
RESULT=$? RESULT=$?
rm composer-setup.php rm composer-setup.php
exit $RESULT exit ${RESULT}

View File

@@ -9,10 +9,9 @@
namespace Meritoo\Common\Collection; namespace Meritoo\Common\Collection;
use ArrayAccess; use ArrayAccess;
use ArrayIterator;
use Countable; use Countable;
use IteratorAggregate; use IteratorAggregate;
use Meritoo\Common\Utilities\Arrays; use Meritoo\Common\Traits\CollectionTrait;
/** /**
* Collection of elements. * Collection of elements.
@@ -23,12 +22,7 @@ use Meritoo\Common\Utilities\Arrays;
*/ */
class Collection implements Countable, ArrayAccess, IteratorAggregate class Collection implements Countable, ArrayAccess, IteratorAggregate
{ {
/** use CollectionTrait;
* The elements of collection
*
* @var array
*/
private $elements;
/** /**
* Class constructor * Class constructor
@@ -39,246 +33,4 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
{ {
$this->elements = $elements; $this->elements = $elements;
} }
/**
* {@inheritdoc}
* Required by interface Countable
*/
public function count()
{
return count($this->elements);
}
/**
* {@inheritdoc}
* Required by interface ArrayAccess
*/
public function offsetExists($offset)
{
return $this->exists($offset);
}
/**
* {@inheritdoc}
* Required by interface ArrayAccess
*/
public function offsetGet($offset)
{
if ($this->exists($offset)) {
return $this->elements[$offset];
}
return null;
}
/**
* {@inheritdoc}
* Required by interface ArrayAccess
*/
public function offsetSet($offset, $value)
{
$this->elements[$offset] = $value;
}
/**
* {@inheritdoc}
* Required by interface ArrayAccess
*/
public function offsetUnset($offset)
{
if ($this->exists($offset)) {
unset($this->elements[$offset]);
}
}
/**
* {@inheritdoc}
* Required by interface IteratorAggregate
*/
public function getIterator()
{
return new ArrayIterator($this->elements);
}
/**
* Adds given element (at the end of collection)
*
* @param mixed $element The element to add
* @param mixed $index (optional) Index / key of the element
* @return $this
*/
public function add($element, $index = null)
{
if (null === $index || '' === $index) {
$this->elements[] = $element;
} else {
$this->elements[$index] = $element;
}
return $this;
}
/**
* Adds given elements (at the end of collection)
*
* @param array|Collection $elements The elements to add
* @param bool|false $useIndexes (optional) If is set to true, indexes of given elements will be used in
* this collection. Otherwise - not.
* @return $this
*/
public function addMultiple($elements, $useIndexes = false)
{
if (!empty($elements)) {
foreach ($elements as $index => $element) {
if (!$useIndexes) {
$index = null;
}
$this->add($element, $index);
}
}
return $this;
}
/**
* Prepends given element (adds given element at the beginning of collection)
*
* @param mixed $element The element to prepend
* @return $this
*/
public function prepend($element)
{
array_unshift($this->elements, $element);
return $this;
}
/**
* Removes given element
*
* @param mixed $element The element to remove
* @return $this
*/
public function remove($element)
{
if ($this->count() > 0) {
foreach ($this->elements as $index => $existing) {
if ($element === $existing) {
unset($this->elements[$index]);
break;
}
}
}
return $this;
}
/**
* Returns information if collection is empty
*
* @return bool
*/
public function isEmpty()
{
return empty($this->elements);
}
/**
* Returns information if given element is first in the collection
*
* @param mixed $element The element to verify
* @return bool
*/
public function isFirst($element)
{
return reset($this->elements) === $element;
}
/**
* Returns information if given element is last in the collection
*
* @param mixed $element The element to verify
* @return bool
*/
public function isLast($element)
{
return end($this->elements) === $element;
}
/**
* Returns information if the collection has given element, iow. if given element exists in the collection
*
* @param mixed $element The element to verify
* @return bool
*/
public function has($element)
{
$index = Arrays::getIndexOf($this->elements, $element);
return null !== $index && false !== $index;
}
/**
* Returns previous element for given element
*
* @param mixed $element The element to verify
* @return mixed|null
*/
public function getPrevious($element)
{
return Arrays::getPreviousElement($this->elements, $element);
}
/**
* Returns next element for given element
*
* @param mixed $element The element to verify
* @return mixed|null
*/
public function getNext($element)
{
return Arrays::getNextElement($this->elements, $element);
}
/**
* Returns the first element in the collection
*
* @return mixed
*/
public function getFirst()
{
return Arrays::getFirstElement($this->elements);
}
/**
* Returns the last element in the collection
*
* @return mixed
*/
public function getLast()
{
return Arrays::getLastElement($this->elements);
}
/**
* Returns an array representation of the collection
*
* @return array
*/
public function toArray()
{
return $this->elements;
}
/**
* Returns information if element with given index/key exists
*
* @param string|int $index The index/key of element
* @return bool
*/
private function exists($index)
{
return isset($this->elements[$index]) || array_key_exists($index, $this->elements);
}
} }

View File

@@ -28,13 +28,13 @@ class DisabledMethodException extends Exception
public static function create($disabledMethod, $alternativeMethod = '') public static function create($disabledMethod, $alternativeMethod = '')
{ {
$template = 'Method %s() cannot be called, because is disabled.'; $template = 'Method %s() cannot be called, because is disabled.';
$message = sprintf($template, $disabledMethod);
if (!empty($alternativeMethod)) { if (!empty($alternativeMethod)) {
$template .= ' Use %s() instead.'; $template = '%s Use %s() instead.';
$message = sprintf($template, $message, $alternativeMethod);
} }
$message = sprintf($template, $disabledMethod, $alternativeMethod);
return new static($message); return new static($message);
} }
} }

View File

@@ -0,0 +1,33 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Exception\ValueObject;
/**
* An exception used while dimensions of size, passed to the instance of Size class, are invalid
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
class InvalidSizeDimensionsException extends \Exception
{
/**
* Creates exception
*
* @param int $width The width
* @param int $height The height
* @return InvalidSizeDimensionsException
*/
public static function create($width, $height)
{
$template = 'Dimensions of size should be positive, but they are not: %d, %d. Is there everything ok?';
$message = sprintf($template, $width, $height);
return new static($message);
}
}

View File

@@ -0,0 +1,67 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Traits\Collection;
/**
* Trait for the Collection required by ArrayAccess interface
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
trait ArrayAccessTrait
{
/**
* {@inheritdoc}
*/
public function offsetExists($offset)
{
return $this->exists($offset);
}
/**
* {@inheritdoc}
*/
public function offsetGet($offset)
{
if ($this->exists($offset)) {
return $this->elements[$offset];
}
return null;
}
/**
* {@inheritdoc}
*/
public function offsetSet($offset, $value)
{
$this->elements[$offset] = $value;
}
/**
* {@inheritdoc}
*/
public function offsetUnset($offset)
{
if ($this->exists($offset)) {
unset($this->elements[$offset]);
}
}
/**
* Returns information if element with given index/key exists
*
* @param string|int $index The index/key of element
* @return bool
*/
private function exists($index)
{
return isset($this->elements[$index]) || array_key_exists($index, $this->elements);
}
}

View File

@@ -0,0 +1,26 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Traits\Collection;
/**
* Trait for the Collection required by Countable interface
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
trait CountableTrait
{
/**
* {@inheritdoc}
*/
public function count()
{
return count($this->elements);
}
}

View File

@@ -0,0 +1,28 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Traits\Collection;
use ArrayIterator;
/**
* Trait for the Collection required by IteratorAggregate interface
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
trait IteratorAggregateTrait
{
/**
* {@inheritdoc}
*/
public function getIterator()
{
return new ArrayIterator($this->elements);
}
}

View File

@@ -0,0 +1,215 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Traits\Collection;
use Meritoo\Common\Collection\Collection;
use Meritoo\Common\Utilities\Arrays;
/**
* Main trait for the Collection
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
trait MainTrait
{
/**
* The elements of collection
*
* @var array
*/
private $elements;
/**
* Adds given element (at the end of collection)
*
* @param mixed $element The element to add
* @param mixed $index (optional) Index / key of the element
* @return $this
*/
public function add($element, $index = null)
{
if (null === $index || '' === $index) {
$this->elements[] = $element;
} else {
$this->elements[$index] = $element;
}
return $this;
}
/**
* Adds given elements (at the end of collection)
*
* @param array|Collection $elements The elements to add
* @param bool|false $useIndexes (optional) If is set to true, indexes of given elements will be used in
* this collection. Otherwise - not.
* @return $this
*/
public function addMultiple($elements, $useIndexes = false)
{
if (!empty($elements)) {
foreach ($elements as $index => $element) {
if ($useIndexes) {
$this->add($element, $index);
continue;
}
$this->add($element);
}
}
return $this;
}
/**
* Prepends given element (adds given element at the beginning of collection)
*
* @param mixed $element The element to prepend
* @return $this
*/
public function prepend($element)
{
array_unshift($this->elements, $element);
return $this;
}
/**
* Removes given element
*
* @param mixed $element The element to remove
* @return $this
*/
public function remove($element)
{
if ($this->count() > 0) {
foreach ($this->elements as $index => $existing) {
if ($element === $existing) {
unset($this->elements[$index]);
break;
}
}
}
return $this;
}
/**
* Returns information if collection is empty
*
* @return bool
*/
public function isEmpty()
{
return empty($this->elements);
}
/**
* Returns information if given element is first in the collection
*
* @param mixed $element The element to verify
* @return bool
*/
public function isFirst($element)
{
return reset($this->elements) === $element;
}
/**
* Returns information if given element is last in the collection
*
* @param mixed $element The element to verify
* @return bool
*/
public function isLast($element)
{
return end($this->elements) === $element;
}
/**
* Returns information if the collection has given element, iow. if given element exists in the collection
*
* @param mixed $element The element to verify
* @return bool
*/
public function has($element)
{
$index = Arrays::getIndexOf($this->elements, $element);
return null !== $index && false !== $index;
}
/**
* Returns previous element for given element
*
* @param mixed $element The element to verify
* @return mixed|null
*/
public function getPrevious($element)
{
return Arrays::getPreviousElement($this->elements, $element);
}
/**
* Returns next element for given element
*
* @param mixed $element The element to verify
* @return mixed|null
*/
public function getNext($element)
{
return Arrays::getNextElement($this->elements, $element);
}
/**
* Returns the first element in the collection
*
* @return mixed
*/
public function getFirst()
{
return Arrays::getFirstElement($this->elements);
}
/**
* Returns the last element in the collection
*
* @return mixed
*/
public function getLast()
{
return Arrays::getLastElement($this->elements);
}
/**
* Returns element with given index
*
* @param mixed $index Index / key of the element
* @return mixed|null
*/
public function getByIndex($index)
{
if (isset($this->elements[$index])) {
return $this->elements[$index];
}
return null;
}
/**
* Returns representation of object as array
*
* @return array
*/
public function toArray()
{
return $this->elements;
}
}

View File

@@ -0,0 +1,28 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Traits;
use Meritoo\Common\Traits\Collection\ArrayAccessTrait;
use Meritoo\Common\Traits\Collection\CountableTrait;
use Meritoo\Common\Traits\Collection\IteratorAggregateTrait;
use Meritoo\Common\Traits\Collection\MainTrait;
/**
* Trait for the Collection
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
trait CollectionTrait
{
use MainTrait;
use CountableTrait;
use ArrayAccessTrait;
use IteratorAggregateTrait;
}

View File

@@ -0,0 +1,137 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Traits\ValueObject;
/**
* Methods and properties related to human
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
trait HumanTrait
{
/**
* First name
*
* @var string
*/
protected $firstName;
/**
* Last name
*
* @var string
*/
protected $lastName;
/**
* Email address
*
* @var string
*/
protected $email;
/**
* Birth date
*
* @var \DateTime
*/
protected $birthDate;
/**
* Class constructor
*
* @param string $firstName First name
* @param string $lastName Last name
* @param string $email (optional) Email address
* @param \DateTime $birthDate (optional) Birth date
*/
public function __construct($firstName, $lastName, $email = null, \DateTime $birthDate = null)
{
$this->firstName = $firstName;
$this->lastName = $lastName;
$this->email = $email;
$this->birthDate = $birthDate;
}
/**
* Returns representation of object as string
*
* @return string
*/
public function __toString()
{
$template = '%s';
if ('' !== $this->email && null !== $this->email) {
$template .= ' <%s>';
}
return sprintf($template, $this->getFullName(), $this->email);
}
/**
* Returns first name
*
* @return string
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* Returns last name
*
* @return string
*/
public function getLastName()
{
return $this->lastName;
}
/**
* Returns email address
*
* @return string|null
*/
public function getEmail()
{
return $this->email;
}
/**
* Returns birth date
*
* @return \DateTime|null
*/
public function getBirthDate()
{
return $this->birthDate;
}
/**
* Returns the full name
*
* @param bool $firstNameFirst (optional) If is set to true, first name is the first part. Otherwise - last name.
* @return string
*/
public function getFullName($firstNameFirst = true)
{
$beginning = $this->lastName;
$finish = $this->firstName;
if ($firstNameFirst) {
$beginning = $this->firstName;
$finish = $this->lastName;
}
return trim(sprintf('%s %s', $beginning, $finish));
}
}

View File

@@ -9,7 +9,7 @@
namespace Meritoo\Common\Utilities; namespace Meritoo\Common\Utilities;
/** /**
* Useful arrays methods * Useful methods related to arrays
* *
* @author Meritoo <github@meritoo.pl> * @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl> * @copyright Meritoo <http://www.meritoo.pl>
@@ -27,80 +27,114 @@ class Arrays
* Converts given array's column to string. * Converts given array's column to string.
* Recursive call is made for multi-dimensional arrays. * Recursive call is made for multi-dimensional arrays.
* *
* @param array $array Array data to be converted * @param array $array Data to be converted
* @param string|int $arrayColumnKey (optional) Column name * @param string|int $arrayColumnKey (optional) Column name. Default: "".
* @param string $separator (optional) Separator used in resultant string * @param string $separator (optional) Separator used between values. Default: ",".
* @return string * @return string|null
*/ */
public static function values2string(array $array, $arrayColumnKey = '', $separator = ',') public static function values2string(array $array, $arrayColumnKey = '', $separator = ',')
{ {
$effect = ''; /*
* No elements?
if (!empty($array)) { * Nothing to do
foreach ($array as $key => $value) { */
if (!empty($effect) && if (empty($array)) {
( return null;
empty($arrayColumnKey) || (!is_array($value) && $key === $arrayColumnKey)
)
) {
$effect .= $separator;
} }
$values = [];
foreach ($array as $key => $value) {
$appendMe = null;
if (is_array($value)) { if (is_array($value)) {
$effect .= self::values2string($value, $arrayColumnKey, $separator); $appendMe = self::values2string($value, $arrayColumnKey, $separator);
} else { } elseif (empty($arrayColumnKey)) {
if (empty($arrayColumnKey)) { $appendMe = $value;
$effect .= $value;
} elseif ($key === $arrayColumnKey) { } elseif ($key === $arrayColumnKey) {
$effect .= $array[$arrayColumnKey]; $appendMe = $array[$arrayColumnKey];
}
}
}
} }
return $effect; /*
* Part to append is unknown?
* Let's go to next part
*/
if (null === $appendMe) {
continue;
}
$values[] = $appendMe;
}
/*
* No values found?
* Nothing to do
*/
if (empty($values)) {
return null;
}
return implode($separator, $values);
} }
/** /**
* Converts given array to string with keys, e.g. abc=1&def=2 or abc="1" def="2" * Converts given array to string with keys, e.g. abc=1&def=2 or abc="1" def="2"
* *
* @param array $array Array data to be converted * @param array $array Data to be converted
* @param string $separator (optional) Separator used between name-value pairs in resultant string * @param string $separator (optional) Separator used between name-value pairs. Default: ",".
* @param string $valuesKeysSeparator (optional) Separator used between name and value in resultant string * @param string $valuesKeysSeparator (optional) Separator used between name and value. Default: "=".
* @param string $valuesWrapper (optional) Wrapper used to wrap values, e.g. double-quote: key="value" * @param string $valuesWrapper (optional) Wrapper used to wrap values, e.g. double-quote: key="value".
* @return string * Default: "".
* @return string|null
*/ */
public static function valuesKeys2string($array, $separator = ',', $valuesKeysSeparator = '=', $valuesWrapper = '') public static function valuesKeys2string(
{ array $array,
$effect = ''; $separator = ',',
$valuesKeysSeparator = '=',
$valuesWrapper = ''
) {
/*
* No elements?
* Nothing to do
*/
if (empty($array)) {
return null;
}
$result = '';
if (is_array($array) && !empty($array)) {
foreach ($array as $key => $value) { foreach ($array as $key => $value) {
if (!empty($effect)) { if (!empty($result)) {
$effect .= $separator; $result .= $separator;
} }
if (!empty($valuesWrapper)) { if (!empty($valuesWrapper)) {
$value = sprintf('%s%s%s', $valuesWrapper, $value, $valuesWrapper); $value = sprintf('%s%s%s', $valuesWrapper, $value, $valuesWrapper);
} }
$effect .= $key . $valuesKeysSeparator . $value; $result .= $key . $valuesKeysSeparator . $value;
}
} }
return $effect; return $result;
} }
/** /**
* Converts given array's rows to csv string * Converts given array's rows to csv string
* *
* @param array $array Array data to be converted. It have to be an array that represents database table. * @param array $array Data to be converted. It have to be an array that represents database table.
* @param string $separator (optional) Separator used in resultant string * @param string $separator (optional) Separator used between values. Default: ",".
* @return string * @return string|null
*/ */
public static function values2csv($array, $separator = ',') public static function values2csv(array $array, $separator = ',')
{ {
if (is_array($array) && !empty($array)) { /*
* No elements?
* Nothing to do
*/
if (empty($array)) {
return null;
}
$rows = []; $rows = [];
$lineSeparator = "\n"; $lineSeparator = "\n";
@@ -111,20 +145,19 @@ class Arrays
*/ */
if (is_array($row) && !empty($row)) { if (is_array($row) && !empty($row)) {
foreach ($row as &$value) { foreach ($row as $key => $value) {
$value = html_entity_decode($value); $row[$key] = html_entity_decode($value);
} }
$rows[] = implode($separator, $row); $rows[] = implode($separator, $row);
} }
} }
if (!empty($rows)) { if (empty($rows)) {
return implode($lineSeparator, $rows); return '';
}
} }
return ''; return implode($lineSeparator, $rows);
} }
/** /**
@@ -244,12 +277,20 @@ class Arrays
/** /**
* Returns breadcrumb (a path) to the last element of array * Returns breadcrumb (a path) to the last element of array
* *
* @param array $array The array to get the breadcrumb * @param array $array Data to get the breadcrumb
* @param string $separator (optional) Separator used to stick the elements * @param string $separator (optional) Separator used to stick the elements. Default: "/".
* @return string * @return string|null
*/ */
public static function getLastElementBreadCrumb($array, $separator = '/') public static function getLastElementBreadCrumb(array $array, $separator = '/')
{ {
/*
* No elements?
* Nothing to do
*/
if (empty($array)) {
return null;
}
$keys = array_keys($array); $keys = array_keys($array);
$keysCount = count($keys); $keysCount = count($keys);
@@ -352,45 +393,45 @@ class Arrays
return null; return null;
} }
$effect = ''; $result = '';
$counter = 0; $counter = 0;
$arrayCount = count($array); $arrayCount = count($array);
$array = self::quoteStrings($array); $arrayPrepared = self::quoteStrings($array);
$isMultiDimensional = self::isMultiDimensional($array); $isMultiDimensional = self::isMultiDimensional($arrayPrepared);
/* /*
* Name of the variable was not provided and it's a multi dimensional array? * Name of the variable was not provided and it's a multi dimensional array?
* Let's create the name, because variable is required for later usage (related to multi dimensional array) * Let's create the name, because variable is required for later usage (related to multi dimensional array)
*/ */
if (self::isMultiDimensional($array) && empty($jsVariableName)) { if (empty($jsVariableName) && $isMultiDimensional) {
$jsVariableName = 'autoGeneratedVariable'; $jsVariableName = 'autoGeneratedVariable';
} }
if (!empty($jsVariableName) && is_string($jsVariableName)) { if (!empty($jsVariableName) && is_string($jsVariableName)) {
$effect .= sprintf('var %s = ', $jsVariableName); $result .= sprintf('var %s = ', $jsVariableName);
} }
$effect .= 'new Array('; $result .= 'new Array(';
if ($preserveIndexes || $isMultiDimensional) { if ($preserveIndexes || $isMultiDimensional) {
$effect .= $arrayCount; $result .= $arrayCount;
$effect .= ');'; $result .= ');';
} }
foreach ($array as $index => $value) { foreach ($arrayPrepared as $index => $value) {
++$counter; ++$counter;
if (is_array($value)) { if (is_array($value)) {
$variable = $index; $variable = $index;
if (is_integer($index)) { if (is_int($index)) {
$variable = 'value_' . $variable; $variable = 'value_' . $variable;
} }
$value = self::array2JavaScript($value, $variable, $preserveIndexes); $value = self::array2JavaScript($value, $variable, $preserveIndexes);
if (!empty($value)) { if (null !== $value && '' !== $value) {
/* /*
* Add an empty line for the 1st iteration only. Required to avoid missing empty line after * Add an empty line for the 1st iteration only. Required to avoid missing empty line after
* declaration of variable: * declaration of variable:
@@ -399,21 +440,20 @@ class Arrays
* autoGeneratedVariable[1] = new Array(...); * autoGeneratedVariable[1] = new Array(...);
*/ */
if (1 === $counter) { if (1 === $counter) {
$effect .= "\n"; $result .= "\n";
} }
$effect .= $value . "\n"; $result .= $value . "\n";
$effect .= sprintf('%s[%s] = %s;', $jsVariableName, Miscellaneous::quoteValue($index), $variable); $result .= sprintf('%s[%s] = %s;', $jsVariableName, Miscellaneous::quoteValue($index), $variable);
if ($counter !== $arrayCount) { if ($counter !== $arrayCount) {
$effect .= "\n"; $result .= "\n";
} }
} }
} else { } elseif ($preserveIndexes) {
if ($preserveIndexes) {
if (!empty($jsVariableName)) { if (!empty($jsVariableName)) {
$index = Miscellaneous::quoteValue($index); $index = Miscellaneous::quoteValue($index);
$effect .= sprintf("\n%s[%s] = %s;", $jsVariableName, $index, $value); $result .= sprintf("\n%s[%s] = %s;", $jsVariableName, $index, $value);
} }
} else { } else {
$format = '%s'; $format = '%s';
@@ -422,30 +462,34 @@ class Arrays
$format .= ', '; $format .= ', ';
} }
$effect .= sprintf($format, $value); $result .= sprintf($format, $value);
}
} }
} }
if (!$preserveIndexes && !$isMultiDimensional) { if (!$preserveIndexes && !$isMultiDimensional) {
$effect .= ');'; $result .= ');';
} }
return $effect; return $result;
} }
/** /**
* Quotes (adds quotes) to elements of an array that are strings * Quotes (adds quotes) to elements that are strings and returns new array (with quoted elements)
* *
* @param array $array The array to check for string values * @param array $array The array to check for string values
* @return array * @return array|null
*/ */
public static function quoteStrings($array) public static function quoteStrings(array $array)
{ {
$effect = $array; /*
* No elements?
* Nothing to do
*/
if (empty($array)) {
return null;
}
if (is_array($array) && !empty($array)) { $result = [];
$effect = [];
foreach ($array as $index => $value) { foreach ($array as $index => $value) {
if (is_array($value)) { if (is_array($value)) {
@@ -456,11 +500,10 @@ class Arrays
} }
} }
$effect[$index] = $value; $result[$index] = $value;
}
} }
return $effect; return $result;
} }
/** /**
@@ -474,7 +517,7 @@ class Arrays
{ {
if (is_string($item)) { if (is_string($item)) {
if ($last) { if ($last) {
$item = substr($item, 0, strlen($item) - 1); $item = substr($item, 0, -1);
} else { } else {
$item = substr($item, 1); $item = substr($item, 1);
} }
@@ -499,6 +542,14 @@ class Arrays
*/ */
public static function getLastKey(array $array) public static function getLastKey(array $array)
{ {
/*
* No elements?
* Nothing to do
*/
if (empty($array)) {
return null;
}
$keys = array_keys($array); $keys = array_keys($array);
return end($keys); return end($keys);
@@ -517,7 +568,7 @@ class Arrays
* No elements or the element does not exist? * No elements or the element does not exist?
* Nothing to do * Nothing to do
*/ */
if (empty($array) || !in_array($item, $array)) { if (empty($array) || !in_array($item, $array, true)) {
return false; return false;
} }
@@ -547,29 +598,28 @@ class Arrays
* @param bool $before (optional) If is set to true, all elements before given needle are removed. Otherwise - all * @param bool $before (optional) If is set to true, all elements before given needle are removed. Otherwise - all
* after needle. * after needle.
*/ */
public static function removeElements(&$array, $needle, $before = true) public static function removeElements(array &$array, $needle, $before = true)
{ {
if (is_array($array) && !empty($array)) { if (!empty($array)) {
if (!$before) { if (!$before) {
$array = array_reverse($array, true); $array = array_reverse($array, true);
} }
foreach ($array as $key => &$value) { foreach ($array as $key => &$value) {
$remove = false; $remove = false;
$isArray = is_array($value);
if (is_array($value)) { if ($isArray) {
self::removeElements($value, $needle, $before); self::removeElements($value, $needle, $before);
if (is_array($value) && empty($value)) { if ($isArray && empty($value)) {
$remove = true; $remove = true;
} }
} else { } elseif ($value === $needle) {
if ($value === $needle) {
break; break;
} else { } else {
$remove = true; $remove = true;
} }
}
if ($remove) { if ($remove) {
unset($array[$key]); unset($array[$key]);
@@ -592,7 +642,7 @@ class Arrays
* value will be used with it's key, because other will be overridden. * value will be used with it's key, because other will be overridden.
* Otherwise - values are preserved and keys assigned to that values are * Otherwise - values are preserved and keys assigned to that values are
* returned as an array. * returned as an array.
* @return array * @return array|null
* *
* Example of $ignoreDuplicatedValues = false: * Example of $ignoreDuplicatedValues = false:
* - provided array * - provided array
@@ -618,7 +668,7 @@ class Arrays
* Nothing to do * Nothing to do
*/ */
if (empty($array)) { if (empty($array)) {
return []; return null;
} }
$replaced = []; $replaced = [];
@@ -729,8 +779,9 @@ class Arrays
* ] * ]
* *
* @param string $string The string to be converted * @param string $string The string to be converted
* @param string $separator (optional) Separator used between name-value pairs in the string * @param string $separator (optional) Separator used between name-value pairs in the string.
* @param string $valuesKeysSeparator (optional) Separator used between name and value in the string * Default: "|".
* @param string $valuesKeysSeparator (optional) Separator used between name and value in the string. Default: ":".
* @return array * @return array
*/ */
public static function string2array($string, $separator = '|', $valuesKeysSeparator = ':') public static function string2array($string, $separator = '|', $valuesKeysSeparator = ':')
@@ -749,7 +800,7 @@ class Arrays
foreach ($exploded as $item) { foreach ($exploded as $item) {
$exploded2 = explode($valuesKeysSeparator, $item); $exploded2 = explode($valuesKeysSeparator, $item);
if (2 == count($exploded2)) { if (2 === count($exploded2)) {
$key = trim($exploded2[0]); $key = trim($exploded2[0]);
$value = trim($exploded2[1]); $value = trim($exploded2[1]);
@@ -764,54 +815,52 @@ class Arrays
* Returns information if given keys exist in given array * Returns information if given keys exist in given array
* *
* @param array $keys The keys to find * @param array $keys The keys to find
* @param array $array The array which maybe contains keys * @param array $array The array that maybe contains keys
* @param bool $explicit (optional) If is set to true, all keys should exist in given array. Otherwise - not all. * @param bool $explicit (optional) If is set to true, all keys should exist in given array. Otherwise - not all.
* @return bool * @return bool
*/ */
public static function areKeysInArray($keys, $array, $explicit = true) public static function areKeysInArray(array $keys, array $array, $explicit = true)
{ {
$effect = false; $result = false;
if (is_array($array) && !empty($array)) { if (!empty($array)) {
$firstKey = true; $firstKey = true;
foreach ($keys as $key) { foreach ($keys as $key) {
$exists = array_key_exists($key, $array); $exists = array_key_exists($key, $array);
if ($firstKey) { if ($firstKey) {
$effect = $exists; $result = $exists;
$firstKey = false; $firstKey = false;
} else { } elseif ($explicit) {
if ($explicit) { $result = $result && $exists;
$effect = $effect && $exists;
if (!$effect) { if (!$result) {
break; break;
} }
} else { } else {
$effect = $effect || $exists; $result = $result || $exists;
if ($effect) { if ($result) {
break; break;
} }
} }
} }
} }
}
return $effect; return $result;
} }
/** /**
* Returns paths of the last elements * Returns paths of the last elements
* *
* @param array $array The array with elements * @param array $array The array with elements
* @param string $separator (optional) Separator used in resultant strings. Default: ".". * @param string $separator (optional) Separator used between elements. Default: ".".
* @param string $parentPath (optional) Path of the parent element. Default: "". * @param string $parentPath (optional) Path of the parent element. Default: "".
* @param string|array $stopIfMatchedBy (optional) Patterns of keys or paths that matched will stop the process * @param string|array $stopIfMatchedBy (optional) Patterns of keys or paths that matched will stop the process
* of path building and including children of those keys or paths (recursive * of path building and including children of those keys or paths (recursive
* will not be used for keys in lower level of given array) * will not be used for keys in lower level of given array). Default: "".
* @return array * @return array|null
* *
* Examples - $stopIfMatchedBy argument: * Examples - $stopIfMatchedBy argument:
* a) "\d+" * a) "\d+"
@@ -827,7 +876,7 @@ class Arrays
* Nothing to do * Nothing to do
*/ */
if (empty($array)) { if (empty($array)) {
return []; return null;
} }
if (!empty($stopIfMatchedBy)) { if (!empty($stopIfMatchedBy)) {
@@ -839,6 +888,7 @@ class Arrays
foreach ($array as $key => $value) { foreach ($array as $key => $value) {
$path = $key; $path = $key;
$stopRecursion = false; $stopRecursion = false;
$valueIsArray = is_array($value);
/* /*
* If the path of parent element is delivered, * If the path of parent element is delivered,
@@ -871,7 +921,7 @@ class Arrays
* or * or
* - the process is stopped, recursive is not used * - the process is stopped, recursive is not used
*/ */
if (!is_array($value) || (is_array($value) && empty($value)) || $stopRecursion) { if (!$valueIsArray || ($valueIsArray && empty($value)) || $stopRecursion) {
$paths[$path] = $value; $paths[$path] = $value;
continue; continue;
} }
@@ -879,7 +929,7 @@ class Arrays
/* /*
* Let's iterate through the next level, using recursive * Let's iterate through the next level, using recursive
*/ */
if (is_array($value)) { if ($valueIsArray) {
$recursivePaths = self::getLastElementsPaths($value, $separator, $path, $stopIfMatchedBy); $recursivePaths = self::getLastElementsPaths($value, $separator, $path, $stopIfMatchedBy);
$paths += $recursivePaths; $paths += $recursivePaths;
} }
@@ -912,12 +962,13 @@ class Arrays
* first level only. * first level only.
* @return bool * @return bool
*/ */
public static function areAllKeysMatchedByPattern($array, $pattern, $firstLevelOnly = false) public static function areAllKeysMatchedByPattern(array $array, $pattern, $firstLevelOnly = false)
{ {
/* /*
* It's not an array or it's empty array? * No elements?
* Nothing to do
*/ */
if (!is_array($array) || (is_array($array) && empty($array))) { if (empty($array)) {
return false; return false;
} }
@@ -961,10 +1012,10 @@ class Arrays
* *
* @param array $array The array to check * @param array $array The array to check
* @param bool $firstLevelOnly (optional) If is set to true, all keys / indexes are checked. Otherwise - from the * @param bool $firstLevelOnly (optional) If is set to true, all keys / indexes are checked. Otherwise - from the
* first level only. * first level only (default behaviour).
* @return bool * @return bool
*/ */
public static function areAllKeysIntegers($array, $firstLevelOnly = false) public static function areAllKeysIntegers(array $array, $firstLevelOnly = false)
{ {
$pattern = '\d+'; $pattern = '\d+';
@@ -1002,9 +1053,17 @@ class Arrays
*/ */
public static function getValueByKeysPath(array $array, array $keys) public static function getValueByKeysPath(array $array, array $keys)
{ {
/*
* No elements?
* Nothing to do
*/
if (empty($array)) {
return null;
}
$value = null; $value = null;
if (!empty($array) && self::issetRecursive($array, $keys)) { if (self::issetRecursive($array, $keys)) {
foreach ($keys as $key) { foreach ($keys as $key) {
$value = $array[$key]; $value = $array[$key];
array_shift($keys); array_shift($keys);
@@ -1048,9 +1107,16 @@ class Arrays
*/ */
public static function issetRecursive(array $array, array $keys) public static function issetRecursive(array $array, array $keys)
{ {
/*
* No elements?
* Nothing to do
*/
if (empty($array)) {
return false;
}
$isset = false; $isset = false;
if (!empty($array)) {
foreach ($keys as $key) { foreach ($keys as $key) {
$isset = isset($array[$key]); $isset = isset($array[$key]);
@@ -1065,7 +1131,6 @@ class Arrays
break; break;
} }
}
return $isset; return $isset;
} }
@@ -1100,7 +1165,8 @@ class Arrays
$recursiveValues = self::getAllValuesOfKey($value, $key); $recursiveValues = self::getAllValuesOfKey($value, $key);
if (!empty($recursiveValues)) { if (!empty($recursiveValues)) {
$values = array_merge($values, $recursiveValues); $merged = array_merge($values, $recursiveValues);
$values = $merged;
} }
} }
} }
@@ -1118,11 +1184,18 @@ class Arrays
* @param string $keyName (optional) Name of key which will contain the position value * @param string $keyName (optional) Name of key which will contain the position value
* @param int $startPosition (optional) Default, start value of the position for main / given array, not the * @param int $startPosition (optional) Default, start value of the position for main / given array, not the
* children * children
* @return array * @return array|null
*/ */
public static function setPositions(array $array, $keyName = self::POSITION_KEY_NAME, $startPosition = null) public static function setPositions(array $array, $keyName = self::POSITION_KEY_NAME, $startPosition = null)
{ {
if (!empty($array)) { /*
* No elements?
* Nothing to do
*/
if (empty($array)) {
return null;
}
$childPosition = 1; $childPosition = 1;
if (null !== $startPosition) { if (null !== $startPosition) {
@@ -1135,7 +1208,6 @@ class Arrays
++$childPosition; ++$childPosition;
} }
} }
}
return $array; return $array;
} }
@@ -1148,14 +1220,19 @@ class Arrays
*/ */
public static function trimRecursive(array $array) public static function trimRecursive(array $array)
{ {
$effect = $array; /*
* No elements?
* Nothing to do
*/
if (empty($array)) {
return [];
}
if (!empty($array)) { $result = [];
$effect = [];
foreach ($array as $key => $value) { foreach ($array as $key => $value) {
if (is_array($value)) { if (is_array($value)) {
$effect[$key] = self::trimRecursive($value); $result[$key] = self::trimRecursive($value);
continue; continue;
} }
@@ -1163,11 +1240,10 @@ class Arrays
$value = trim($value); $value = trim($value);
} }
$effect[$key] = $value; $result[$key] = $value;
}
} }
return $effect; return $result;
} }
/** /**
@@ -1260,7 +1336,7 @@ class Arrays
* *
* @param array $array The array with elements to implode * @param array $array The array with elements to implode
* @param string $separator Separator used to stick together elements of given array * @param string $separator Separator used to stick together elements of given array
* @return string * @return string|null
*/ */
public static function implodeSmart(array $array, $separator) public static function implodeSmart(array $array, $separator)
{ {
@@ -1269,7 +1345,7 @@ class Arrays
* Nothing to do * Nothing to do
*/ */
if (empty($array)) { if (empty($array)) {
return ''; return null;
} }
foreach ($array as &$element) { foreach ($array as &$element) {
@@ -1282,7 +1358,7 @@ class Arrays
} }
if (Regex::endsWith($element, $separator)) { if (Regex::endsWith($element, $separator)) {
$element = substr($element, 0, strlen($element) - 1); $element = substr($element, 0, -1);
} }
} }
@@ -1354,7 +1430,7 @@ class Arrays
* Values should be compared only and both arrays are one-dimensional? * Values should be compared only and both arrays are one-dimensional?
* Let's find difference by using simple function * Let's find difference by using simple function
*/ */
if ($valuesOnly && 1 == self::getDimensionsCount($array1) && 1 == self::getDimensionsCount($array2)) { if ($valuesOnly && 1 === self::getDimensionsCount($array1) && 1 === self::getDimensionsCount($array2)) {
return array_diff($array1, $array2); return array_diff($array1, $array2);
} }
@@ -1371,25 +1447,24 @@ class Arrays
if ($array2HasKey && is_array($array2[$key])) { if ($array2HasKey && is_array($array2[$key])) {
$difference = self::arrayDiffRecursive($value, $array2[$key], $valuesOnly); $difference = self::arrayDiffRecursive($value, $array2[$key], $valuesOnly);
} }
} else { } elseif (!$array2HasKey || ($array2HasKey && $value !== $array2[$key])) {
/* /*
* 2nd array hasn't key from 1st array? * We are here, because:
* a) 2nd array hasn't key from 1st array
* OR * OR
* Key exists in both, 1st and 2nd array, but values are different? * b) key exists in both, 1st and 2nd array, but values are different
*/ */
if (!$array2HasKey || ($array2HasKey && $value != $array2[$key])) {
$difference = $value; $difference = $value;
} }
}
if (null !== $difference) { if (null !== $difference) {
$effect[] = $difference; $effect[] = $difference;
} }
} else {
/* /*
* The key exists in 2nd array? * The key exists in 2nd array?
*/ */
if ($array2HasKey) { } elseif ($array2HasKey) {
/* /*
* The value it's an array (it's a nested array)? * The value it's an array (it's a nested array)?
*/ */
@@ -1408,15 +1483,13 @@ class Arrays
} }
$effect[$key] = $diff; $effect[$key] = $diff;
} else { } elseif ($value !== $array2[$key]) {
/* /*
* Value is different than in 2nd array? * Value is different than in 2nd array?
* OKay, I've got difference * OKay, I've got difference
*/ */
if ($value != $array2[$key]) {
$effect[$key] = $value; $effect[$key] = $value;
} }
}
} else { } else {
/* /*
* OKay, I've got difference * OKay, I've got difference
@@ -1424,7 +1497,6 @@ class Arrays
$effect[$key] = $value; $effect[$key] = $value;
} }
} }
}
return $effect; return $effect;
} }
@@ -1462,11 +1534,18 @@ class Arrays
* @param int|null $startIndex (optional) Index from which incrementation should be started. If not provided, * @param int|null $startIndex (optional) Index from which incrementation should be started. If not provided,
* the first index / key will be used. * the first index / key will be used.
* @param int $incrementStep (optional) Value used for incrementation. The step of incrementation. * @param int $incrementStep (optional) Value used for incrementation. The step of incrementation.
* @return array * @return array|null
*/ */
public static function incrementIndexes(array $array, $startIndex = null, $incrementStep = 1) public static function incrementIndexes(array $array, $startIndex = null, $incrementStep = 1)
{ {
if (!empty($array)) { /*
* No elements?
* Nothing to do
*/
if (empty($array)) {
return null;
}
$valuesToIncrement = []; $valuesToIncrement = [];
/* /*
@@ -1506,7 +1585,6 @@ class Arrays
} }
} }
} }
}
return $array; return $array;
} }
@@ -1562,6 +1640,14 @@ class Arrays
*/ */
public static function getDimensionsCount(array $array) public static function getDimensionsCount(array $array)
{ {
/*
* No elements?
* Nothing to do
*/
if (empty($array)) {
return 0;
}
$dimensionsCount = 1; $dimensionsCount = 1;
foreach ($array as $value) { foreach ($array as $value) {
@@ -1581,6 +1667,60 @@ class Arrays
return $dimensionsCount; return $dimensionsCount;
} }
/**
* Returns non-empty values, e.g. without "" (empty string), null or []
*
* @param array $values The values to filter
* @return array|null
*/
public static function getNonEmptyValues(array $values)
{
/*
* No values?
* Nothing to do
*/
if (empty($values)) {
return null;
}
return array_filter($values, function ($value) {
$nonEmptyScalar = is_scalar($value) && '' !== $value;
$nonEmptyArray = is_array($value) && !empty($value);
return $nonEmptyScalar || $nonEmptyArray || is_object($value);
});
}
/**
* Returns non-empty values concatenated by given separator
*
* @param array $values The values to filter
* @param string $separator (optional) Separator used to implode the values. Default: ", ".
* @return string|null
*/
public static function getNonEmptyValuesAsString(array $values, $separator = ', ')
{
/*
* No elements?
* Nothing to do
*/
if (empty($values)) {
return null;
}
$nonEmpty = self::getNonEmptyValues($values);
/*
* No values?
* Nothing to do
*/
if (empty($nonEmpty)) {
return '';
}
return implode($separator, $nonEmpty);
}
/** /**
* Returns neighbour (next or previous element) for given element * Returns neighbour (next or previous element) for given element
* *
@@ -1591,21 +1731,29 @@ class Arrays
*/ */
private static function getNeighbour(array $array, $element, $next = true) private static function getNeighbour(array $array, $element, $next = true)
{ {
/*
* No elements?
* Nothing to do
*/
if (empty($array)) {
return null;
}
$noNext = $next && self::isLastElement($array, $element); $noNext = $next && self::isLastElement($array, $element);
$noPrevious = !$next && self::isFirstElement($array, $element); $noPrevious = !$next && self::isFirstElement($array, $element);
/* /*
* No elements? * Previous neighbour should be returned and given element is first?
* OR
* Given element does not exist in given array?
* OR * OR
* Next neighbour should be returned and given element is last? * Next neighbour should be returned and given element is last?
* OR * OR
* Previous neighbour should be returned and given element is first? * No elements?
* OR
* Given element does not exist in given array?
* *
* Nothing to do * Nothing to do
*/ */
if (empty($array) || !in_array($element, $array) || $noNext || $noPrevious) { if ($noPrevious || $noNext || empty($array) || !in_array($element, $array, true)) {
return null; return null;
} }

View File

@@ -140,7 +140,12 @@ class Date
$dateStart = new DateTime(); $dateStart = new DateTime();
$dateEnd = new DateTime(); $dateEnd = new DateTime();
if (DatePeriod::LAST_YEAR === $period || DatePeriod::NEXT_YEAR === $period) { $yearPeriod = [
DatePeriod::LAST_YEAR,
DatePeriod::NEXT_YEAR,
];
if (in_array($period, $yearPeriod, true)) {
$yearDifference = 1; $yearDifference = 1;
if (DatePeriod::LAST_YEAR === $period) { if (DatePeriod::LAST_YEAR === $period) {
@@ -167,7 +172,7 @@ class Date
return null; return null;
} }
$dateStart->setTime(0, 0, 0); $dateStart->setTime(0, 0);
$dateEnd->setTime(23, 59, 59); $dateEnd->setTime(23, 59, 59);
return new DatePeriod($dateStart, $dateEnd); return new DatePeriod($dateStart, $dateEnd);
@@ -217,7 +222,8 @@ class Date
return $dateTime return $dateTime
->setTime($hour, $minute, $second) ->setTime($hour, $minute, $second)
->format($format); ->format($format)
;
} }
/** /**
@@ -349,7 +355,7 @@ class Date
* *
* @param string|DateTime $dateStart The start date * @param string|DateTime $dateStart The start date
* @param string|DateTime $dateEnd The end date * @param string|DateTime $dateEnd The end date
* @param int $differenceUnit (optional) Unit of date difference. One of this class * @param string $differenceUnit (optional) Unit of date difference. One of this class
* DATE_DIFFERENCE_UNIT_* constants. If is set to null all units are * DATE_DIFFERENCE_UNIT_* constants. If is set to null all units are
* returned in the array. * returned in the array.
* @return array|int * @return array|int

View File

@@ -52,7 +52,7 @@ class Locale
LC_MESSAGES, LC_MESSAGES,
]; ];
if (empty($languageCode) || !in_array($category, $availableCategories)) { if (empty($languageCode) || !in_array($category, $availableCategories, true)) {
return false; return false;
} }

View File

@@ -733,7 +733,7 @@ class MimeTypes
*/ */
public static function getExtension($mimeType) public static function getExtension($mimeType)
{ {
if (is_string($mimeType) && in_array($mimeType, self::$mimeTypes)) { if (is_string($mimeType) && in_array($mimeType, self::$mimeTypes, true)) {
$data = Arrays::setKeysAsValues(self::$mimeTypes, false); $data = Arrays::setKeysAsValues(self::$mimeTypes, false);
return $data[$mimeType]; return $data[$mimeType];
@@ -806,7 +806,7 @@ class MimeTypes
*/ */
public static function isImage($mimeType) public static function isImage($mimeType)
{ {
if (in_array($mimeType, self::$mimeTypes)) { if (in_array($mimeType, self::$mimeTypes, true)) {
return (bool)preg_match('|^image/.+$|', $mimeType); return (bool)preg_match('|^image/.+$|', $mimeType);
} }

View File

@@ -296,34 +296,6 @@ class Miscellaneous
return $effect; return $effect;
} }
/**
* Displays variable content as preformatted text (fixed-width font and preserves both spaces and line breaks)
*
* If xdebug php module is loaded, displays variable using var_dump(), otherwise <pre>var_dump()</pre>.
* You can pass as many variables as you wish.
*
* Pass each variable as argument of this function. Amount unlimited. Variables are loaded using the
* func_get_args() function (@see http://pl1.php.net/manual/en/function.func-get-args.php).
*/
public static function variableDump()
{
$xdebugLoaded = self::isPhpModuleLoaded('xdebug');
if (!$xdebugLoaded) {
echo '<pre>';
}
$arguments = func_get_args();
foreach ($arguments as $argument) {
var_dump($argument);
}
if (!$xdebugLoaded) {
echo '</pre>';
}
}
/** /**
* Returns information if given PHP module is compiled and loaded * Returns information if given PHP module is compiled and loaded
* *
@@ -453,6 +425,14 @@ class Miscellaneous
*/ */
public static function replace($subject, $search, $replacement, $quoteStrings = false) public static function replace($subject, $search, $replacement, $quoteStrings = false)
{ {
/*
* Unknown source or item to find or replacement is an empty array?
* Nothing to do
*/
if (empty($subject) || empty($search) || [] === $replacement) {
return $subject;
}
$effect = $subject; $effect = $subject;
$searchIsString = is_string($search); $searchIsString = is_string($search);
@@ -472,37 +452,47 @@ class Miscellaneous
$bothAreStrings = $searchIsString && $replacementIsString; $bothAreStrings = $searchIsString && $replacementIsString;
$bothAreArrays = $searchIsArray && $replacementIsArray; $bothAreArrays = $searchIsArray && $replacementIsArray;
/*
* First step: replace strings, simple operation with strings
*/
if ($searchIsString && $replacementIsString) {
if ($quoteStrings) { if ($quoteStrings) {
if ($replacementIsString) {
$replacement = '\'' . $replacement . '\''; $replacement = '\'' . $replacement . '\'';
} elseif ($replacementIsArray) {
foreach ($replacement as &$item) {
if (is_string($item)) {
$item = '\'' . $item . '\'';
}
} }
unset($item);
}
}
/*
* 1st step: replace strings, simple operation with strings
*/
if ($bothAreStrings) {
$effect = str_replace($search, $replacement, $subject); $effect = str_replace($search, $replacement, $subject);
} }
/* /*
* Second step: replace with regular expressions. * 2nd step: replace with regular expressions.
* Attention. Searched and replacement value should be the same type: strings or arrays. * Attention. Searched and replacement value should be the same type: strings or arrays.
*/ */
if ($effect === $subject && ($bothAreStrings || $bothAreArrays)) { if ($effect === $subject && ($bothAreStrings || $bothAreArrays)) {
if ($quoteStrings && $replacementIsString) {
$replacement = '\'' . $replacement . '\'';
}
/* /*
* I have to avoid string that contains spaces only, e.g. " ". * I have to avoid string that contains spaces only, e.g. " ".
* It's required to avoid bug: preg_replace(): Empty regular expression. * It's required to avoid bug: preg_replace(): Empty regular expression.
*/ */
if ($searchIsArray || ($searchIsString && !empty(trim($search)))) { if ($searchIsArray || ($searchIsString && !empty(trim($search)))) {
$effect = preg_replace($search, $replacement, $subject); $replaced = @preg_replace($search, $replacement, $subject);
if (null !== $replaced && [] !== $replaced) {
$effect = $replaced;
}
} }
} }
/* /*
* Third step: complex replace of the replacement defined as an array. * 3rd step: complex replace of the replacement defined as an array.
* It may be useful when you want to search for a one string and replace the string with multiple values. * It may be useful when you want to search for a one string and replace the string with multiple values.
*/ */
if ($effect === $subject && $searchIsString && $replacementIsArray) { if ($effect === $subject && $searchIsString && $replacementIsArray) {
@@ -528,16 +518,6 @@ class Miscellaneous
$exploded = explode($search, $subSubject); $exploded = explode($search, $subSubject);
$explodedCount = count($exploded); $explodedCount = count($exploded);
if ($quoteStrings) {
foreach ($replacement as &$item) {
if (is_string($item)) {
$item = '\'' . $item . '\'';
}
}
unset($item);
}
foreach ($exploded as $key => $item) { foreach ($exploded as $key => $item) {
$subEffect .= $item; $subEffect .= $item;

View File

@@ -10,7 +10,6 @@ namespace Meritoo\Common\Utilities;
use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManager;
use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\Query\Expr\Join; use Doctrine\ORM\Query\Expr\Join;
use Doctrine\ORM\Query\Parameter; use Doctrine\ORM\Query\Parameter;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
@@ -91,7 +90,7 @@ class QueryBuilderUtility
* @param array $criteria (optional) The criteria used in WHERE clause. It may simple array with pairs * @param array $criteria (optional) The criteria used in WHERE clause. It may simple array with pairs
* key-value or an array of arrays where second element of sub-array is the * key-value or an array of arrays where second element of sub-array is the
* comparison operator. Example below. * comparison operator. Example below.
* @param string $alias (optional) Alias used in the query * @param string|null $alias (optional) Alias used in the query
* @return QueryBuilder * @return QueryBuilder
* *
* Example of the $criteria argument: * Example of the $criteria argument:
@@ -107,7 +106,7 @@ class QueryBuilderUtility
* 'position' => 5, * 'position' => 5,
* ] * ]
*/ */
public static function setCriteria(QueryBuilder $queryBuilder, array $criteria = [], $alias = '') public static function setCriteria(QueryBuilder $queryBuilder, array $criteria = [], $alias = null)
{ {
/* /*
* No criteria used in WHERE clause? * No criteria used in WHERE clause?
@@ -121,7 +120,7 @@ class QueryBuilderUtility
* No alias provided? * No alias provided?
* Let's use root alias * Let's use root alias
*/ */
if (empty($alias)) { if (null === $alias || '' === $alias) {
$alias = self::getRootAlias($queryBuilder); $alias = self::getRootAlias($queryBuilder);
} }
@@ -129,7 +128,7 @@ class QueryBuilderUtility
$compareOperator = '='; $compareOperator = '=';
if (is_array($value) && !empty($value)) { if (is_array($value) && !empty($value)) {
if (2 == count($value)) { if (2 === count($value)) {
$compareOperator = $value[1]; $compareOperator = $value[1];
} }
@@ -158,7 +157,6 @@ class QueryBuilderUtility
* @param array|ArrayCollection $entities The entities to delete * @param array|ArrayCollection $entities The entities to delete
* @param bool $flushDeleted (optional) If is set to true, flushes the deleted objects (default * @param bool $flushDeleted (optional) If is set to true, flushes the deleted objects (default
* behaviour). Otherwise - not. * behaviour). Otherwise - not.
* @throws OptimisticLockException
* @return bool * @return bool
*/ */
public static function deleteEntities(EntityManager $entityManager, $entities, $flushDeleted = true) public static function deleteEntities(EntityManager $entityManager, $entities, $flushDeleted = true)

View File

@@ -12,7 +12,7 @@ use Meritoo\Common\Exception\Regex\IncorrectColorHexLengthException;
use Meritoo\Common\Exception\Regex\InvalidColorHexValueException; use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
/** /**
* Useful regular expressions methods * Useful methods related to regular expressions
* *
* @author Meritoo <github@meritoo.pl> * @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl> * @copyright Meritoo <http://www.meritoo.pl>
@@ -40,6 +40,18 @@ class Regex
'color' => '/^[a-f0-9]{6}$/i', 'color' => '/^[a-f0-9]{6}$/i',
'bundleName' => '/^(([A-Z]{1}[a-z0-9]+)((?2))*)(Bundle)$/', 'bundleName' => '/^(([A-Z]{1}[a-z0-9]+)((?2))*)(Bundle)$/',
'binaryValue' => '/[^\x20-\x7E\t\r\n]/', 'binaryValue' => '/[^\x20-\x7E\t\r\n]/',
/*
* Matches:
* - "200x125"
* - "200 x 125"
* - "200 x 125"
* - " 200 x 125"
* - " 200 x 125 "
*
* Contains "%s" that should be replaced with separator used to split width and height.
*/
'size' => '/^[\ ]*(\d+)[\ ]*%s[\ ]*(\d+)[\ ]*$/',
]; ];
/** /**
@@ -102,7 +114,7 @@ class Regex
* Tax ID is not 10 characters length OR is not numeric? * Tax ID is not 10 characters length OR is not numeric?
* Nothing to do * Nothing to do
*/ */
if (10 !== strlen($taxId) || !is_numeric($taxId)) { if (!is_numeric($taxId) || 10 !== strlen($taxId)) {
return false; return false;
} }
@@ -125,14 +137,11 @@ class Regex
} }
/* /*
* Last number it's not a remainder from dividing per 11? * Last number it's a remainder from dividing per 11?
* Nothing to do * Tax ID is valid
*/ */
if ($sum % 11 == $taxId[9]) {
return true;
}
return false; return $sum % 11 === (int)$taxId[9];
} }
/** /**
@@ -248,7 +257,7 @@ class Regex
if ($itsRegularExpression) { if ($itsRegularExpression) {
$matchesCount = preg_match($filterExpression, $value); $matchesCount = preg_match($filterExpression, $value);
$remove = 0 == $matchesCount; $remove = 0 === $matchesCount;
} else { } else {
if (is_string($value)) { if (is_string($value)) {
$value = sprintf('\'%s\'', $value); $value = sprintf('\'%s\'', $value);
@@ -306,13 +315,11 @@ class Regex
if ($mustAllMatch) { if ($mustAllMatch) {
$effect = $effect && $matched; $effect = $effect && $matched;
} else { } elseif ($matched) {
if ($matched) {
$effect = $matched; $effect = $matched;
break; break;
} }
} }
}
return $effect; return $effect;
} }
@@ -501,7 +508,7 @@ class Regex
public static function startsWith($string, $beginning) public static function startsWith($string, $beginning)
{ {
if (!empty($string) && !empty($beginning)) { if (!empty($string) && !empty($beginning)) {
if (1 == strlen($beginning) && !self::isLetterOrDigit($beginning)) { if (1 === strlen($beginning) && !self::isLetterOrDigit($beginning)) {
$beginning = '\\' . $beginning; $beginning = '\\' . $beginning;
} }
@@ -522,7 +529,7 @@ class Regex
*/ */
public static function endsWith($string, $ending) public static function endsWith($string, $ending)
{ {
if (1 == strlen($ending) && !self::isLetterOrDigit($ending)) { if (1 === strlen($ending) && !self::isLetterOrDigit($ending)) {
$ending = '\\' . $ending; $ending = '\\' . $ending;
} }
@@ -607,7 +614,7 @@ class Regex
*/ */
public static function contains($haystack, $needle) public static function contains($haystack, $needle)
{ {
if (1 == strlen($needle) && !self::isLetterOrDigit($needle)) { if (1 === strlen($needle) && !self::isLetterOrDigit($needle)) {
$needle = '\\' . $needle; $needle = '\\' . $needle;
} }
@@ -694,14 +701,14 @@ class Regex
*/ */
public static function isValidNip($nip) public static function isValidNip($nip)
{ {
$nip = preg_replace('/[^0-9]/', '', $nip); $nip = preg_replace('/[\D]/', '', $nip);
$invalidNips = [ $invalidNips = [
'1234567890', '1234567890',
'0000000000', '0000000000',
]; ];
if (!preg_match('/^[0-9]{10}$/', $nip) || in_array($nip, $invalidNips)) { if (!preg_match('/^[\d]{10}$/', $nip) || in_array($nip, $invalidNips, true)) {
return false; return false;
} }
@@ -723,9 +730,9 @@ class Regex
} }
$modulo = $sum % 11; $modulo = $sum % 11;
$numberControl = (10 == $modulo) ? 0 : $modulo; $numberControl = (10 === $modulo) ? 0 : $modulo;
return $numberControl == $nip[9]; return $numberControl === (int)$nip[9];
} }
/** /**
@@ -924,4 +931,87 @@ class Regex
return (bool)preg_match($pattern, $value); return (bool)preg_match($pattern, $value);
} }
/**
* Returns pattern used to validate / verify size
*
* @param string $separator (optional) Separator used to split width and height. Default: " x ".
* @return string
*/
public static function getSizePattern($separator = ' x ')
{
$escapeMe = [
'/',
'|',
'.',
'(',
')',
'[',
']',
];
$cleanSeparator = trim($separator);
if (in_array($cleanSeparator, $escapeMe, true)) {
// I have to escape special character of regular expression that may be used as separator
$separator = str_replace($cleanSeparator, '\\' . $cleanSeparator, $separator);
}
return sprintf(self::$patterns['size'], $separator);
}
/**
* Returns information if given value is a size value
*
* @param string $value Value to verify
* @param string $separator (optional) Separator used to split width and height. Default: " x ".
* @return bool
*/
public static function isSizeValue($value, $separator = ' x ')
{
/*
* Not a string?
* Nothing to do
*/
if (!is_string($value)) {
return false;
}
$pattern = self::getSizePattern($separator);
return (bool)preg_match($pattern, $value);
}
/**
* Returns slug for given value
*
* @param string $value Value that should be transformed to slug
* @return string|bool
*/
public static function createSlug($value)
{
/*
* Not a scalar value?
* Nothing to do
*/
if (!is_scalar($value)) {
return false;
}
/*
* It's an empty string?
* Nothing to do
*/
if ('' === $value) {
return '';
}
$id = 'Latin-ASCII; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();';
$transliterator = \Transliterator::create($id);
$cleanValue = trim($value);
$result = $transliterator->transliterate($cleanValue);
return preg_replace('/[-\s]+/', '-', $result);
}
} }

View File

@@ -93,7 +93,7 @@ class Uri
/* /*
* Oops, cannot match protocol * Oops, cannot match protocol
*/ */
if (0 == $matchCount) { if (0 === $matchCount) {
return ''; return '';
} }

View File

@@ -40,7 +40,7 @@ class Xml
$query = $path->query('/*/*'); $query = $path->query('/*/*');
$nodesCount = $query->length; $nodesCount = $query->length;
if (0 == $nodesCount) { if (0 === $nodesCount) {
return $element1; return $element1;
} }

159
src/ValueObject/Address.php Normal file
View File

@@ -0,0 +1,159 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\ValueObject;
use Meritoo\Common\Utilities\Arrays;
/**
* Address
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
class Address
{
/**
* The street
*
* @var string
*/
protected $street;
/**
* The number of building
*
* @var string
*/
protected $buildingNumber;
/**
* The number of flat
*
* @var string
*/
protected $flatNumber;
/**
* The zip code
*
* @var string
*/
protected $zipCode;
/**
* The city, location
*
* @var string
*/
protected $city;
/**
* Class constructor
*
* @param string $city City, location
* @param string $zipCode The zip code
* @param string $street The street
* @param string $buildingNumber The number of building
* @param string $flatNumber (optional) The number of flat. Default: "".
*/
public function __construct($city, $zipCode, $street, $buildingNumber, $flatNumber = '')
{
$this->city = $city;
$this->zipCode = $zipCode;
$this->street = $street;
$this->buildingNumber = $buildingNumber;
$this->flatNumber = $flatNumber;
}
/**
* Returns representation of object as string
*
* @return string
*/
public function __toString()
{
$values = [
$this->getFullStreet(),
$this->zipCode,
$this->city,
];
return Arrays::getNonEmptyValuesAsString($values);
}
/**
* Returns street
*
* @return string
*/
public function getStreet()
{
return $this->street;
}
/**
* Returns full street (name + building & flat number)
*
* @return string
*/
public function getFullStreet()
{
if (empty($this->street)) {
return '';
}
$numbers = $this->buildingNumber;
if (!empty($numbers) && !empty($this->flatNumber)) {
$numbers = sprintf('%s/%s', $numbers, $this->flatNumber);
}
return sprintf('%s %s', $this->street, $numbers);
}
/**
* Returns number of building
*
* @return string
*/
public function getBuildingNumber()
{
return $this->buildingNumber;
}
/**
* Returns number of flat
*
* @return string
*/
public function getFlatNumber()
{
return $this->flatNumber;
}
/**
* Returns zip code
*
* @return string
*/
public function getZipCode()
{
return $this->zipCode;
}
/**
* Returns city, location
*
* @return string
*/
public function getCity()
{
return $this->city;
}
}

View File

@@ -0,0 +1,81 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\ValueObject;
use Meritoo\Common\Utilities\Arrays;
/**
* Bank account
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
class BankAccount
{
/**
* Name of bank
*
* @var string
*/
protected $bankName;
/**
* Number of bank's account
*
* @var string
*/
protected $accountNumber;
/**
* Class constructor
*
* @param string $bankName Name of bank
* @param string $accountNumber Number of bank's account
*/
public function __construct($bankName, $accountNumber)
{
$this->bankName = $bankName;
$this->accountNumber = $accountNumber;
}
/**
* Returns representation of object as string
*
* @return string
*/
public function __toString()
{
$values = [
$this->bankName,
$this->accountNumber,
];
return Arrays::getNonEmptyValuesAsString($values);
}
/**
* Returns name of bank
*
* @return string
*/
public function getBankName()
{
return $this->bankName;
}
/**
* Returns number of bank's account
*
* @return string
*/
public function getAccountNumber()
{
return $this->accountNumber;
}
}

101
src/ValueObject/Company.php Normal file
View File

@@ -0,0 +1,101 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\ValueObject;
use Meritoo\Common\Utilities\Arrays;
/**
* Company
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
class Company
{
/**
* Name of company
*
* @var string
*/
protected $name;
/**
* Address of company
*
* @var Address
*/
protected $address;
/**
* Bank account of company
*
* @var BankAccount
*/
protected $bankAccount;
/**
* Class constructor
*
* @param string $name Name of company
* @param Address $address Address of company
* @param BankAccount|null $bankAccount (optional) Bank account of company
*/
public function __construct($name, Address $address, BankAccount $bankAccount = null)
{
$this->name = $name;
$this->address = $address;
$this->bankAccount = $bankAccount;
}
/**
* Returns representation of object as string
*
* @return string
*/
public function __toString()
{
$values = [
$this->name,
$this->address,
$this->bankAccount,
];
return Arrays::getNonEmptyValuesAsString($values);
}
/**
* Returns name of company
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Returns address of company
*
* @return Address
*/
public function getAddress()
{
return $this->address;
}
/**
* Returns bank account of company
*
* @return BankAccount|null
*/
public function getBankAccount()
{
return $this->bankAccount;
}
}

22
src/ValueObject/Human.php Normal file
View File

@@ -0,0 +1,22 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\ValueObject;
use Meritoo\Common\Traits\ValueObject\HumanTrait;
/**
* Human
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
class Human
{
use HumanTrait;
}

245
src/ValueObject/Size.php Normal file
View File

@@ -0,0 +1,245 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\ValueObject;
use Meritoo\Common\Exception\ValueObject\InvalidSizeDimensionsException;
use Meritoo\Common\Utilities\Regex;
/**
* Size, e.g. of image
*
* Instance of this class may be created using static methods:
* - fromString()
* - fromArray()
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
class Size
{
/**
* The width
*
* @var int
*/
protected $width;
/**
* The height
*
* @var int
*/
protected $height;
/**
* Unit used when width or height should be returned with unit
*
* @var string
*/
protected $unit;
/**
* Separator used when converting to string
*
* @var string
*/
protected $separator = ' x ';
/**
* Class constructor
*
* @param int $width (optional) The width
* @param int $height (optional) The height
* @param string $unit (optional) Unit used when width or height should be returned with unit. Default: "px".
*
* @throws InvalidSizeDimensionsException
*/
private function __construct($width = null, $height = null, $unit = 'px')
{
$width = (int)$width;
$height = (int)$height;
if ($width < 0 || $height < 0) {
throw new InvalidSizeDimensionsException($width, $height);
}
$this
->setWidth($width)
->setHeight($height)
;
$this->unit = $unit;
}
/**
* Returns string representation of instance of this class in human readable format, e.g. '200 x 100'
*
* @return string
*/
public function __toString()
{
return $this->toString();
}
/**
* Sets separator used when converting to string
*
* @param string $separator The separator
* @return Size
*/
public function setSeparator($separator)
{
$this->separator = $separator;
return $this;
}
/**
* Returns the width
*
* @param bool $withUnit (optional) If is set to true, width is returned with unit ("px"). Otherwise - without
* (default behaviour).
* @return int|string
*/
public function getWidth($withUnit = false)
{
if ($withUnit) {
return sprintf('%d %s', $this->width, $this->unit);
}
return $this->width;
}
/**
* Sets the width
*
* @param int|string $width The width
* @return Size
*/
public function setWidth($width)
{
$this->width = (int)$width;
return $this;
}
/**
* Returns the height
*
* @param bool $withUnit (optional) If is set to true, height is returned with unit ("px"). Otherwise - without
* (default behaviour).
* @return int|string
*/
public function getHeight($withUnit = false)
{
if ($withUnit) {
return sprintf('%d %s', $this->height, $this->unit);
}
return $this->height;
}
/**
* Sets the height
*
* @param int $height The height
* @return Size
*/
public function setHeight($height)
{
$this->height = (int)$height;
return $this;
}
/**
* Returns string representation of instance of this class, e.g. '200 x 100' or '200x100'
*
* @param bool $withUnit (optional) If is set to true, width and height are returned with unit ("px"). Otherwise
* - without (default behaviour).
* @return string
*/
public function toString($withUnit = false)
{
$width = $this->getWidth($withUnit);
$height = $this->getHeight($withUnit);
return sprintf('%s%s%s', $width, $this->separator, $height);
}
/**
* Returns instance of this class as an array.
* Values of the array are width and height, eg. [800, 600] or ['800px', '600px'].
*
* @param bool $withUnits (optional) If is set to true, width and height are returned with unit ("px"). Otherwise
* - without (default behaviour).
* @return array
*/
public function toArray($withUnits = false)
{
return [
$this->getWidth($withUnits),
$this->getHeight($withUnits),
];
}
/**
* Creates new instance from given string
*
* @param string $size The size represented as string (width and height separated by given separator)
* @param string $unit (optional) Unit used when width or height should be returned with unit. Default: "px".
* @param string $separator (optional) Separator used to split width and height. Default: " x ".
* @return Size|null
*/
public static function fromString($size, $unit = 'px', $separator = ' x ')
{
if (is_string($size)) {
$matches = [];
$pattern = Regex::getSizePattern($separator);
if ((bool)preg_match($pattern, $size, $matches)) {
$width = (int)$matches[1];
$height = (int)$matches[2];
$sizeObject = new self($width, $height, $unit);
return $sizeObject->setSeparator($separator);
}
}
return null;
}
/**
* Creates new instance from given array
*
* The array should contain 2 elements: width and height.
* Examples: ['800', '600'], [800, 600].
*
* @param array $array The size represented as array
* @param string $unit (optional) Unit used when width or height should be returned with unit. Default: "px".
* @return Size|null
*/
public static function fromArray(array $array, $unit = 'px')
{
// Requirements for given array:
// - indexes "0" and "1"
// - should contains exactly 2 elements
if (
array_key_exists(0, $array)
&& array_key_exists(1, $array)
&& 2 === count($array)
) {
list($width, $height) = $array;
return new self($width, $height, $unit);
}
return null;
}
}

View File

@@ -22,7 +22,7 @@ class Version
* *
* @var int * @var int
*/ */
private $majorPart; protected $majorPart;
/** /**
* The "minor" part. * The "minor" part.
@@ -30,7 +30,7 @@ class Version
* *
* @var int * @var int
*/ */
private $minorPart; protected $minorPart;
/** /**
* The "patch" part. * The "patch" part.
@@ -38,7 +38,7 @@ class Version
* *
* @var int * @var int
*/ */
private $patchPart; protected $patchPart;
/** /**
* Class constructor * Class constructor
@@ -88,7 +88,7 @@ class Version
} }
/** /**
* Returns string representation of instance of this class * Returns representation of object as string
* *
* @return string * @return string
*/ */

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Collection; namespace Meritoo\Test\Common\Collection;
use ArrayIterator; use ArrayIterator;
use Generator; use Generator;
@@ -45,12 +45,12 @@ class CollectionTest extends BaseTestCase
public function testEmptyCollection() public function testEmptyCollection()
{ {
static::assertEquals(0, $this->emptyCollection->count()); static::assertSame(0, $this->emptyCollection->count());
static::assertCount(0, $this->emptyCollection); static::assertCount(0, $this->emptyCollection);
static::assertEmpty($this->emptyCollection); static::assertEmpty($this->emptyCollection);
static::assertTrue($this->emptyCollection->isEmpty()); static::assertTrue($this->emptyCollection->isEmpty());
static::assertEquals([], $this->emptyCollection->toArray()); static::assertSame([], $this->emptyCollection->toArray());
static::assertEmpty($this->emptyCollection->toArray()); static::assertEmpty($this->emptyCollection->toArray());
static::assertNull($this->emptyCollection->getFirst()); static::assertNull($this->emptyCollection->getFirst());
@@ -61,23 +61,23 @@ class CollectionTest extends BaseTestCase
public function testNotEmptyCollection() public function testNotEmptyCollection()
{ {
static::assertEquals(4, $this->simpleCollection->count()); static::assertSame(4, $this->simpleCollection->count());
static::assertCount(4, $this->simpleCollection); static::assertCount(4, $this->simpleCollection);
static::assertNotEmpty($this->simpleCollection); static::assertNotEmpty($this->simpleCollection);
static::assertFalse($this->simpleCollection->isEmpty()); static::assertFalse($this->simpleCollection->isEmpty());
static::assertEquals($this->simpleElements, $this->simpleCollection->toArray()); static::assertSame($this->simpleElements, $this->simpleCollection->toArray());
static::assertNotEmpty($this->simpleCollection->toArray()); static::assertNotEmpty($this->simpleCollection->toArray());
static::assertEquals('lorem', $this->simpleCollection->getFirst()); static::assertSame('lorem', $this->simpleCollection->getFirst());
static::assertEquals('sit', $this->simpleCollection->getLast()); static::assertSame('sit', $this->simpleCollection->getLast());
static::assertEquals('dolor', $this->simpleCollection[123]); static::assertSame('dolor', $this->simpleCollection[123]);
} }
public function testCount() public function testCount()
{ {
static::assertEquals(0, $this->emptyCollection->count()); static::assertSame(0, $this->emptyCollection->count());
static::assertEquals(4, $this->simpleCollection->count()); static::assertSame(4, $this->simpleCollection->count());
} }
public function testOffsetExists() public function testOffsetExists()
@@ -94,8 +94,8 @@ class CollectionTest extends BaseTestCase
static::assertNull($this->emptyCollection['abc']); static::assertNull($this->emptyCollection['abc']);
static::assertNull($this->simpleCollection['abc']); static::assertNull($this->simpleCollection['abc']);
static::assertEquals('lorem', $this->simpleCollection[0]); static::assertSame('lorem', $this->simpleCollection[0]);
static::assertEquals('sit', $this->simpleCollection[345]); static::assertSame('sit', $this->simpleCollection[345]);
} }
public function testOffsetSet() public function testOffsetSet()
@@ -104,10 +104,10 @@ class CollectionTest extends BaseTestCase
$this->simpleCollection['test2'] = 5678; $this->simpleCollection['test2'] = 5678;
static::assertTrue($this->emptyCollection->has(1234)); static::assertTrue($this->emptyCollection->has(1234));
static::assertEquals(1234, $this->emptyCollection['test1']); static::assertSame(1234, $this->emptyCollection['test1']);
static::assertTrue($this->simpleCollection->has(5678)); static::assertTrue($this->simpleCollection->has(5678));
static::assertEquals(5678, $this->simpleCollection['test2']); static::assertSame(5678, $this->simpleCollection['test2']);
} }
public function testOffsetUnset() public function testOffsetUnset()
@@ -115,14 +115,14 @@ class CollectionTest extends BaseTestCase
unset($this->simpleCollection[0]); unset($this->simpleCollection[0]);
static::assertFalse($this->simpleCollection->has('lorem')); static::assertFalse($this->simpleCollection->has('lorem'));
static::assertEquals('ipsum', $this->simpleCollection[1]); static::assertSame('ipsum', $this->simpleCollection[1]);
static::assertEquals(3, $this->simpleCollection->count()); static::assertSame(3, $this->simpleCollection->count());
unset($this->simpleCollection[123]); unset($this->simpleCollection[123]);
static::assertFalse($this->simpleCollection->has('dolor')); static::assertFalse($this->simpleCollection->has('dolor'));
static::assertEquals('ipsum', $this->simpleCollection[1]); static::assertSame('ipsum', $this->simpleCollection[1]);
static::assertEquals(2, $this->simpleCollection->count()); static::assertSame(2, $this->simpleCollection->count());
} }
public function testGetIterator() public function testGetIterator()
@@ -143,8 +143,8 @@ class CollectionTest extends BaseTestCase
$collection->add($element); $collection->add($element);
static::assertTrue($collection->has($element)); static::assertTrue($collection->has($element));
static::assertEquals($expectedCount, $collection->count()); static::assertSame($expectedCount, $collection->count());
static::assertEquals($element, $collection[$expectedIndex]); static::assertSame($element, $collection[$expectedIndex]);
} }
/** /**
@@ -161,15 +161,15 @@ class CollectionTest extends BaseTestCase
$collection->add($element, $index); $collection->add($element, $index);
static::assertTrue($collection->has($element)); static::assertTrue($collection->has($element));
static::assertEquals($expectedCount, $collection->count()); static::assertSame($expectedCount, $collection->count());
static::assertEquals($element, $collection[$expectedIndex]); static::assertSame($element, $collection[$expectedIndex]);
} }
public function testAddMultipleUsingEmptyArray() public function testAddMultipleUsingEmptyArray()
{ {
$this->emptyCollection->addMultiple([]); $this->emptyCollection->addMultiple([]);
static::assertEquals(0, $this->emptyCollection->count()); static::assertSame(0, $this->emptyCollection->count());
static::assertTrue($this->emptyCollection->isEmpty()); static::assertTrue($this->emptyCollection->isEmpty());
} }
@@ -185,12 +185,12 @@ class CollectionTest extends BaseTestCase
$this->emptyCollection->addMultiple($elements); $this->emptyCollection->addMultiple($elements);
static::assertFalse($this->emptyCollection->isEmpty()); static::assertFalse($this->emptyCollection->isEmpty());
static::assertEquals(4, $this->emptyCollection->count()); static::assertSame(4, $this->emptyCollection->count());
static::assertEquals('test1', $this->emptyCollection[0]); static::assertSame('test1', $this->emptyCollection[0]);
static::assertEquals('test2', $this->emptyCollection[1]); static::assertSame('test2', $this->emptyCollection[1]);
static::assertEquals('test3', $this->emptyCollection[2]); static::assertSame('test3', $this->emptyCollection[2]);
static::assertEquals('test4', $this->emptyCollection[3]); static::assertSame('test4', $this->emptyCollection[3]);
} }
public function testAddMultipleUsingIndexes() public function testAddMultipleUsingIndexes()
@@ -205,12 +205,12 @@ class CollectionTest extends BaseTestCase
$this->emptyCollection->addMultiple($elements, true); $this->emptyCollection->addMultiple($elements, true);
static::assertFalse($this->emptyCollection->isEmpty()); static::assertFalse($this->emptyCollection->isEmpty());
static::assertEquals(4, $this->emptyCollection->count()); static::assertSame(4, $this->emptyCollection->count());
static::assertEquals('test1', $this->emptyCollection[0]); static::assertSame('test1', $this->emptyCollection[0]);
static::assertEquals('test2', $this->emptyCollection[1]); static::assertSame('test2', $this->emptyCollection[1]);
static::assertEquals('test3', $this->emptyCollection[1234]); static::assertSame('test3', $this->emptyCollection[1234]);
static::assertEquals('test4', $this->emptyCollection[5678]); static::assertSame('test4', $this->emptyCollection[5678]);
} }
public function testPrepend() public function testPrepend()
@@ -218,14 +218,14 @@ class CollectionTest extends BaseTestCase
$this->emptyCollection->prepend('lorem-ipsum'); $this->emptyCollection->prepend('lorem-ipsum');
static::assertFalse($this->emptyCollection->isEmpty()); static::assertFalse($this->emptyCollection->isEmpty());
static::assertEquals(1, $this->emptyCollection->count()); static::assertSame(1, $this->emptyCollection->count());
static::assertEquals('lorem-ipsum', $this->emptyCollection[0]); static::assertSame('lorem-ipsum', $this->emptyCollection[0]);
$this->simpleCollection->prepend('lorem-ipsum'); $this->simpleCollection->prepend('lorem-ipsum');
static::assertFalse($this->simpleCollection->isEmpty()); static::assertFalse($this->simpleCollection->isEmpty());
static::assertEquals(5, $this->simpleCollection->count()); static::assertSame(5, $this->simpleCollection->count());
static::assertEquals('lorem-ipsum', $this->simpleCollection[0]); static::assertSame('lorem-ipsum', $this->simpleCollection[0]);
} }
public function testRemoveNotExistingElement() public function testRemoveNotExistingElement()
@@ -233,24 +233,24 @@ class CollectionTest extends BaseTestCase
$this->emptyCollection->remove('abc'); $this->emptyCollection->remove('abc');
static::assertTrue($this->emptyCollection->isEmpty()); static::assertTrue($this->emptyCollection->isEmpty());
static::assertEquals(0, $this->emptyCollection->count()); static::assertSame(0, $this->emptyCollection->count());
$this->simpleCollection->remove('abc'); $this->simpleCollection->remove('abc');
static::assertFalse($this->simpleCollection->isEmpty()); static::assertFalse($this->simpleCollection->isEmpty());
static::assertEquals(4, $this->simpleCollection->count()); static::assertSame(4, $this->simpleCollection->count());
} }
public function testRemove() public function testRemove()
{ {
static::assertFalse($this->simpleCollection->isEmpty()); static::assertFalse($this->simpleCollection->isEmpty());
static::assertEquals(4, $this->simpleCollection->count()); static::assertSame(4, $this->simpleCollection->count());
static::assertEquals('ipsum', $this->simpleCollection[1]); static::assertSame('ipsum', $this->simpleCollection[1]);
$this->simpleCollection->remove('ipsum'); $this->simpleCollection->remove('ipsum');
static::assertFalse($this->simpleCollection->isEmpty()); static::assertFalse($this->simpleCollection->isEmpty());
static::assertEquals(3, $this->simpleCollection->count()); static::assertSame(3, $this->simpleCollection->count());
static::assertNull($this->simpleCollection[1]); static::assertNull($this->simpleCollection[1]);
} }
@@ -290,8 +290,8 @@ class CollectionTest extends BaseTestCase
static::assertNull($this->simpleCollection->getPrevious('abc')); static::assertNull($this->simpleCollection->getPrevious('abc'));
static::assertNull($this->simpleCollection->getPrevious('lorem')); static::assertNull($this->simpleCollection->getPrevious('lorem'));
static::assertEquals('lorem', $this->simpleCollection->getPrevious('ipsum')); static::assertSame('lorem', $this->simpleCollection->getPrevious('ipsum'));
static::assertEquals('dolor', $this->simpleCollection->getPrevious('sit')); static::assertSame('dolor', $this->simpleCollection->getPrevious('sit'));
} }
public function testGetNext() public function testGetNext()
@@ -300,26 +300,26 @@ class CollectionTest extends BaseTestCase
static::assertNull($this->simpleCollection->getNext('abc')); static::assertNull($this->simpleCollection->getNext('abc'));
static::assertNull($this->simpleCollection->getNext('sit')); static::assertNull($this->simpleCollection->getNext('sit'));
static::assertEquals('dolor', $this->simpleCollection->getNext('ipsum')); static::assertSame('dolor', $this->simpleCollection->getNext('ipsum'));
static::assertEquals('sit', $this->simpleCollection->getNext('dolor')); static::assertSame('sit', $this->simpleCollection->getNext('dolor'));
} }
public function testGetFirst() public function testGetFirst()
{ {
static::assertNull($this->emptyCollection->getFirst()); static::assertNull($this->emptyCollection->getFirst());
static::assertEquals('lorem', $this->simpleCollection->getFirst()); static::assertSame('lorem', $this->simpleCollection->getFirst());
} }
public function testGetLast() public function testGetLast()
{ {
static::assertNull($this->emptyCollection->getLast()); static::assertNull($this->emptyCollection->getLast());
static::assertEquals('sit', $this->simpleCollection->getLast()); static::assertSame('sit', $this->simpleCollection->getLast());
} }
public function testToArray() public function testToArray()
{ {
static::assertEquals([], $this->emptyCollection->toArray()); static::assertSame([], $this->emptyCollection->toArray());
static::assertEquals($this->simpleElements, $this->simpleCollection->toArray()); static::assertSame($this->simpleElements, $this->simpleCollection->toArray());
} }
public function testExistsVisibilityAndArguments() public function testExistsVisibilityAndArguments()
@@ -327,6 +327,19 @@ class CollectionTest extends BaseTestCase
static::assertMethodVisibilityAndArguments(Collection::class, 'exists', OopVisibilityType::IS_PRIVATE, 1, 1); static::assertMethodVisibilityAndArguments(Collection::class, 'exists', OopVisibilityType::IS_PRIVATE, 1, 1);
} }
/**
* @param string $description Description of test
* @param Collection $collection Collection to search for element with given index
* @param mixed $index Index / key of the element
* @param mixed $expected Expected element with given index
*
* @dataProvider provideElementGetByIndex
*/
public function testGetByIndex($description, Collection $collection, $index, $expected)
{
static::assertEquals($expected, $collection->getByIndex($index), $description);
}
/** /**
* Provides element to add to collection * Provides element to add to collection
* *
@@ -408,6 +421,73 @@ class CollectionTest extends BaseTestCase
]; ];
} }
public function provideElementGetByIndex()
{
yield[
'An empty collection and empty index',
new Collection(),
'',
null,
];
yield[
'An empty collection and non-empty index',
new Collection(),
'test',
null,
];
yield[
'Non-empty collection and not existing index',
new Collection([
'lorem' => 'ipsum',
'dolor' => 'sit',
]),
'test',
null,
];
yield[
'Collection with existing index',
new Collection([
'lorem' => 'ipsum',
'dolor' => 'sit',
]),
'lorem',
'ipsum',
];
yield[
'Collection with existing index (collection of arrays)',
new Collection([
[
'lorem',
'ipsum',
],
[
'dolor',
'sit',
],
]),
0,
[
'lorem',
'ipsum',
],
];
yield[
'Collection with existing index (collection of objects)',
new Collection([
'x' => new \DateTime(),
'y' => new \DateTime('2001-01-01'),
'z' => new \DateTime('yesterday'),
]),
'y',
new \DateTime('2001-01-01'),
];
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Exception\Base; namespace Meritoo\Test\Common\Exception\Base;
use Meritoo\Common\Exception\Base\UnknownTypeException; use Meritoo\Common\Exception\Base\UnknownTypeException;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;

View File

@@ -0,0 +1,74 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Test\Common\Exception\Bundle;
use Meritoo\Common\Exception\Bundle\IncorrectBundleNameException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Test case of an exception used while name of bundle is incorrect
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
class IncorrectBundleNameExceptionTest extends BaseTestCase
{
public function testConstructor()
{
static::assertConstructorVisibilityAndArguments(
IncorrectBundleNameException::class,
OopVisibilityType::IS_PUBLIC,
3
);
}
/**
* @param string $description Description of test
* @param string $bundleName Incorrect name of bundle
* @param string $expectedMessage Expected exception's message
*
* @dataProvider provideBundleNameAndMessage
*/
public function testCreate($description, $bundleName, $expectedMessage)
{
$exception = IncorrectBundleNameException::create($bundleName);
static::assertSame($expectedMessage, $exception->getMessage(), $description);
}
public function provideBundleNameAndMessage()
{
$template = 'Name of bundle \'%s\' is incorrect. It should start with big letter and end with "Bundle". Is'
. ' there everything ok?';
yield[
'An empty string as name of bundle',
'',
sprintf($template, ''),
];
yield[
'Null as name of bundle',
null,
sprintf($template, ''),
];
yield[
'String with spaces as name of bundle',
'This is test',
sprintf($template, 'This is test'),
];
yield[
'String without spaces as name of bundle',
'ThisIsTest',
sprintf($template, 'ThisIsTest'),
];
}
}

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Exception\Date; namespace Meritoo\Test\Common\Exception\Date;
use Generator; use Generator;
use Meritoo\Common\Exception\Type\UnknownDatePartTypeException; use Meritoo\Common\Exception\Type\UnknownDatePartTypeException;
@@ -37,7 +37,7 @@ class UnknownDatePartTypeExceptionTest extends BaseTestCase
public function testMessage($unknownDatePart, $value, $expectedMessage) public function testMessage($unknownDatePart, $value, $expectedMessage)
{ {
$exception = UnknownDatePartTypeException::createException($unknownDatePart, $value); $exception = UnknownDatePartTypeException::createException($unknownDatePart, $value);
static::assertEquals($expectedMessage, $exception->getMessage()); static::assertSame($expectedMessage, $exception->getMessage());
} }
/** /**

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Exception\File; namespace Meritoo\Test\Common\Exception\File;
use Generator; use Generator;
use Meritoo\Common\Exception\File\EmptyFileException; use Meritoo\Common\Exception\File\EmptyFileException;
@@ -35,7 +35,7 @@ class EmptyFileExceptionTest extends BaseTestCase
public function testMessage($emptyFilePath, $expectedMessage) public function testMessage($emptyFilePath, $expectedMessage)
{ {
$exception = EmptyFileException::create($emptyFilePath); $exception = EmptyFileException::create($emptyFilePath);
static::assertEquals($expectedMessage, $exception->getMessage()); static::assertSame($expectedMessage, $exception->getMessage());
} }
/** /**

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Exception\File; namespace Meritoo\Test\Common\Exception\File;
use Meritoo\Common\Exception\File\EmptyFilePathException; use Meritoo\Common\Exception\File\EmptyFilePathException;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;
@@ -28,6 +28,6 @@ class EmptyFilePathExceptionTest extends BaseTestCase
public function testConstructorMessage() public function testConstructorMessage()
{ {
$exception = EmptyFilePathException::create(); $exception = EmptyFilePathException::create();
static::assertEquals('Path of the file is empty. Did you provide path of proper file?', $exception->getMessage()); static::assertSame('Path of the file is empty. Did you provide path of proper file?', $exception->getMessage());
} }
} }

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Exception\File; namespace Meritoo\Test\Common\Exception\File;
use Generator; use Generator;
use Meritoo\Common\Exception\File\NotExistingFileException; use Meritoo\Common\Exception\File\NotExistingFileException;
@@ -35,7 +35,7 @@ class NotExistingFileExceptionTest extends BaseTestCase
public function testConstructorMessage($notExistingFilePath, $expectedMessage) public function testConstructorMessage($notExistingFilePath, $expectedMessage)
{ {
$exception = NotExistingFileException::create($notExistingFilePath); $exception = NotExistingFileException::create($notExistingFilePath);
static::assertEquals($expectedMessage, $exception->getMessage()); static::assertSame($expectedMessage, $exception->getMessage());
} }
/** /**

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Exception\Method; namespace Meritoo\Test\Common\Exception\Method;
use Generator; use Generator;
use Meritoo\Common\Exception\Method\DisabledMethodException; use Meritoo\Common\Exception\Method\DisabledMethodException;
@@ -37,7 +37,7 @@ class DisabledMethodExceptionTest extends BaseTestCase
public function testConstructorMessage($disabledMethod, $alternativeMethod, $expectedMessage) public function testConstructorMessage($disabledMethod, $alternativeMethod, $expectedMessage)
{ {
$exception = DisabledMethodException::create($disabledMethod, $alternativeMethod); $exception = DisabledMethodException::create($disabledMethod, $alternativeMethod);
static::assertEquals($expectedMessage, $exception->getMessage()); static::assertSame($expectedMessage, $exception->getMessage());
} }
/** /**

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Exception\Reflection; namespace Meritoo\Test\Common\Exception\Reflection;
use Generator; use Generator;
use Meritoo\Common\Exception\Reflection\CannotResolveClassNameException; use Meritoo\Common\Exception\Reflection\CannotResolveClassNameException;
@@ -38,7 +38,7 @@ class CannotResolveClassNameExceptionTest extends BaseTestCase
public function testConstructorMessage($source, $forClass, $expectedMessage) public function testConstructorMessage($source, $forClass, $expectedMessage)
{ {
$exception = CannotResolveClassNameException::create($source, $forClass); $exception = CannotResolveClassNameException::create($source, $forClass);
static::assertEquals($expectedMessage, $exception->getMessage()); static::assertSame($expectedMessage, $exception->getMessage());
} }
/** /**

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Exception\Reflection; namespace Meritoo\Test\Common\Exception\Reflection;
use Generator; use Generator;
use Meritoo\Common\Exception\Reflection\MissingChildClassesException; use Meritoo\Common\Exception\Reflection\MissingChildClassesException;
@@ -36,7 +36,7 @@ class MissingChildClassesExceptionTest extends BaseTestCase
public function testConstructorMessage($parentClass, $expectedMessage) public function testConstructorMessage($parentClass, $expectedMessage)
{ {
$exception = MissingChildClassesException::create($parentClass); $exception = MissingChildClassesException::create($parentClass);
static::assertEquals($expectedMessage, $exception->getMessage()); static::assertSame($expectedMessage, $exception->getMessage());
} }
/** /**

View File

@@ -0,0 +1,78 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Test\Common\Exception\Reflection;
use Meritoo\Common\Exception\Reflection\NotExistingPropertyException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Class NotExistingPropertyExceptionTest
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
class NotExistingPropertyExceptionTest extends BaseTestCase
{
public function testConstructor()
{
static::assertConstructorVisibilityAndArguments(
NotExistingPropertyException::class,
OopVisibilityType::IS_PUBLIC,
3
);
}
/**
* @param string $description Description of test
* @param mixed $object Object that should contains given property
* @param string $property Name of the property
* @param string $expectedMessage Expected exception's message
*
* @dataProvider provideObjectPropertyAndMessage
*/
public function testCreate($description, $object, $property, $expectedMessage)
{
$exception = NotExistingPropertyException::create($object, $property);
static::assertSame($expectedMessage, $exception->getMessage(), $description);
}
public function provideObjectPropertyAndMessage()
{
$template = 'Property \'%s\' does not exist in instance of class \'%s\'. Did you use proper name of property?';
yield[
'An empty string as name of property',
new \stdClass(),
'',
sprintf($template, '', get_class(new \stdClass())),
];
yield[
'Null as name of property',
new \stdClass(),
null,
sprintf($template, '', get_class(new \stdClass())),
];
yield[
'String with spaces as name of property',
new \stdClass(),
'This is test',
sprintf($template, 'This is test', get_class(new \stdClass())),
];
yield[
'String without spaces as name of property',
new \stdClass(),
'ThisIsTest',
sprintf($template, 'ThisIsTest', get_class(new \stdClass())),
];
}
}

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Exception\Reflection; namespace Meritoo\Test\Common\Exception\Reflection;
use Generator; use Generator;
use Meritoo\Common\Exception\Reflection\TooManyChildClassesException; use Meritoo\Common\Exception\Reflection\TooManyChildClassesException;
@@ -37,7 +37,7 @@ class TooManyChildClassesExceptionTest extends BaseTestCase
public function testConstructorMessage($parentClass, array $childClasses, $expectedMessage) public function testConstructorMessage($parentClass, array $childClasses, $expectedMessage)
{ {
$exception = TooManyChildClassesException::create($parentClass, $childClasses); $exception = TooManyChildClassesException::create($parentClass, $childClasses);
static::assertEquals($expectedMessage, $exception->getMessage()); static::assertSame($expectedMessage, $exception->getMessage());
} }
/** /**

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Exception\Regex; namespace Meritoo\Test\Common\Exception\Regex;
use Generator; use Generator;
use Meritoo\Common\Exception\Regex\IncorrectColorHexLengthException; use Meritoo\Common\Exception\Regex\IncorrectColorHexLengthException;
@@ -35,7 +35,7 @@ class IncorrectColorHexLengthExceptionTest extends BaseTestCase
public function testConstructorMessage($color, $expectedMessage) public function testConstructorMessage($color, $expectedMessage)
{ {
$exception = IncorrectColorHexLengthException::create($color); $exception = IncorrectColorHexLengthException::create($color);
static::assertEquals($expectedMessage, $exception->getMessage()); static::assertSame($expectedMessage, $exception->getMessage());
} }
/** /**

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Exception\Regex; namespace Meritoo\Test\Common\Exception\Regex;
use Generator; use Generator;
use Meritoo\Common\Exception\Regex\InvalidColorHexValueException; use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
@@ -35,7 +35,7 @@ class InvalidColorHexValueExceptionTest extends BaseTestCase
public function testConstructorMessage($color, $expectedMessage) public function testConstructorMessage($color, $expectedMessage)
{ {
$exception = InvalidColorHexValueException::create($color); $exception = InvalidColorHexValueException::create($color);
static::assertEquals($expectedMessage, $exception->getMessage()); static::assertSame($expectedMessage, $exception->getMessage());
} }
/** /**

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Exception\Regex; namespace Meritoo\Test\Common\Exception\Regex;
use Generator; use Generator;
use Meritoo\Common\Exception\Regex\InvalidHtmlAttributesException; use Meritoo\Common\Exception\Regex\InvalidHtmlAttributesException;
@@ -35,7 +35,7 @@ class InvalidHtmlAttributesExceptionTest extends BaseTestCase
public function testConstructorMessage($htmlAttributes, $expectedMessage) public function testConstructorMessage($htmlAttributes, $expectedMessage)
{ {
$exception = InvalidHtmlAttributesException::create($htmlAttributes); $exception = InvalidHtmlAttributesException::create($htmlAttributes);
static::assertEquals($expectedMessage, $exception->getMessage()); static::assertSame($expectedMessage, $exception->getMessage());
} }
/** /**

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Exception\Regex; namespace Meritoo\Test\Common\Exception\Regex;
use Generator; use Generator;
use Meritoo\Common\Exception\Regex\InvalidUrlException; use Meritoo\Common\Exception\Regex\InvalidUrlException;
@@ -35,7 +35,7 @@ class InvalidUrlExceptionTest extends BaseTestCase
public function testConstructorMessage($url, $expectedMessage) public function testConstructorMessage($url, $expectedMessage)
{ {
$exception = InvalidUrlException::create($url); $exception = InvalidUrlException::create($url);
static::assertEquals($expectedMessage, $exception->getMessage()); static::assertSame($expectedMessage, $exception->getMessage());
} }
/** /**

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Exception\Type; namespace Meritoo\Test\Common\Exception\Type;
use Generator; use Generator;
use Meritoo\Common\Exception\Type\UnknownOopVisibilityTypeException; use Meritoo\Common\Exception\Type\UnknownOopVisibilityTypeException;
@@ -36,7 +36,7 @@ class UnknownOopVisibilityTypeExceptionTest extends BaseTestCase
public function testConstructorMessage($unknownType, $expectedMessage) public function testConstructorMessage($unknownType, $expectedMessage)
{ {
$exception = UnknownOopVisibilityTypeException::createException($unknownType); $exception = UnknownOopVisibilityTypeException::createException($unknownType);
static::assertEquals($expectedMessage, $exception->getMessage()); static::assertSame($expectedMessage, $exception->getMessage());
} }
/** /**

View File

@@ -0,0 +1,67 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Test\Common\Exception\ValueObject;
use Meritoo\Common\Exception\ValueObject\InvalidSizeDimensionsException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Test case of an exception used while dimensions of size, passed to the instance of Size class, are invalid
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
class InvalidSizeDimensionsExceptionTest extends BaseTestCase
{
public function testConstructorVisibilityAndArguments()
{
static::assertConstructorVisibilityAndArguments(
InvalidSizeDimensionsException::class,
OopVisibilityType::IS_PUBLIC,
3
);
}
/**
* @param int $width The width
* @param int $height The height
* @param string $expectedMessage Expected exception's message
*
* @dataProvider provideWidthAndHeight
*/
public function testCreate($width, $height, $expectedMessage)
{
$exception = InvalidSizeDimensionsException::create($width, $height);
static::assertSame($expectedMessage, $exception->getMessage());
}
public function provideWidthAndHeight()
{
$template = 'Dimensions of size should be positive, but they are not: %d, %d. Is there everything ok?';
yield[
0,
0,
sprintf($template, 0, 0),
];
yield[
-1,
-1,
sprintf($template, -1, -1),
];
yield[
200,
100,
sprintf($template, 200, 100),
];
}
}

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Test\Base; namespace Meritoo\Test\Common\Test\Base;
use DateTime; use DateTime;
use Generator; use Generator;

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Type\Base; namespace Meritoo\Test\Common\Type\Base;
use Generator; use Generator;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Type; namespace Meritoo\Test\Common\Type;
use Meritoo\Common\Test\Base\BaseTypeTestCase; use Meritoo\Common\Test\Base\BaseTypeTestCase;
use Meritoo\Common\Type\DatePartType; use Meritoo\Common\Type\DatePartType;
@@ -19,29 +19,6 @@ use Meritoo\Common\Type\DatePartType;
*/ */
class DatePartTypeTest extends BaseTypeTestCase class DatePartTypeTest extends BaseTypeTestCase
{ {
/**
* {@inheritdoc}
*/
protected function getAllExpectedTypes()
{
return [
'DAY' => DatePartType::DAY,
'HOUR' => DatePartType::HOUR,
'MINUTE' => DatePartType::MINUTE,
'MONTH' => DatePartType::MONTH,
'SECOND' => DatePartType::SECOND,
'YEAR' => DatePartType::YEAR,
];
}
/**
* {@inheritdoc}
*/
protected function getTestedTypeInstance()
{
return new DatePartType();
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@@ -97,4 +74,27 @@ class DatePartTypeTest extends BaseTypeTestCase
true, true,
]; ];
} }
/**
* {@inheritdoc}
*/
protected function getAllExpectedTypes()
{
return [
'DAY' => DatePartType::DAY,
'HOUR' => DatePartType::HOUR,
'MINUTE' => DatePartType::MINUTE,
'MONTH' => DatePartType::MONTH,
'SECOND' => DatePartType::SECOND,
'YEAR' => DatePartType::YEAR,
];
}
/**
* {@inheritdoc}
*/
protected function getTestedTypeInstance()
{
return new DatePartType();
}
} }

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Type; namespace Meritoo\Test\Common\Type;
use DateTime; use DateTime;
use Generator; use Generator;
@@ -214,34 +214,6 @@ class DatePeriodTest extends BaseTypeTestCase
]; ];
} }
/**
* Returns all expected types of the tested type
*
* @return array
*/
protected function getAllExpectedTypes()
{
return [
'LAST_MONTH' => DatePeriod::LAST_MONTH,
'LAST_WEEK' => DatePeriod::LAST_WEEK,
'LAST_YEAR' => DatePeriod::LAST_YEAR,
'NEXT_MONTH' => DatePeriod::NEXT_MONTH,
'NEXT_WEEK' => DatePeriod::NEXT_WEEK,
'NEXT_YEAR' => DatePeriod::NEXT_YEAR,
'THIS_MONTH' => DatePeriod::THIS_MONTH,
'THIS_WEEK' => DatePeriod::THIS_WEEK,
'THIS_YEAR' => DatePeriod::THIS_YEAR,
];
}
/**
* {@inheritdoc}
*/
protected function getTestedTypeInstance()
{
return new DatePeriod();
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@@ -277,4 +249,32 @@ class DatePeriodTest extends BaseTypeTestCase
true, true,
]; ];
} }
/**
* Returns all expected types of the tested type
*
* @return array
*/
protected function getAllExpectedTypes()
{
return [
'LAST_MONTH' => DatePeriod::LAST_MONTH,
'LAST_WEEK' => DatePeriod::LAST_WEEK,
'LAST_YEAR' => DatePeriod::LAST_YEAR,
'NEXT_MONTH' => DatePeriod::NEXT_MONTH,
'NEXT_WEEK' => DatePeriod::NEXT_WEEK,
'NEXT_YEAR' => DatePeriod::NEXT_YEAR,
'THIS_MONTH' => DatePeriod::THIS_MONTH,
'THIS_WEEK' => DatePeriod::THIS_WEEK,
'THIS_YEAR' => DatePeriod::THIS_YEAR,
];
}
/**
* {@inheritdoc}
*/
protected function getTestedTypeInstance()
{
return new DatePeriod();
}
} }

View File

@@ -0,0 +1,46 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Test\Common\Utilities\Arrays;
/**
* Simple class convertible to string.
* Used for testing the Arrays class.
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
class SimpleToString
{
/**
* Identifier
*
* @var string
*/
private $id;
/**
* Class constructor
*
* @param string $id Identifier
*/
public function __construct($id)
{
$this->id = $id;
}
/**
* Returns representation of object as string
*
* @return string
*/
public function __toString()
{
return sprintf('Instance with ID: %s', $this->id);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Test\Common\Utilities;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Utilities\Bootstrap4CssSelector; use Meritoo\Common\Utilities\Bootstrap4CssSelector;

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Test\Common\Utilities;
use Generator; use Generator;
use Meritoo\Common\Exception\Bundle\IncorrectBundleNameException; use Meritoo\Common\Exception\Bundle\IncorrectBundleNameException;

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Test\Common\Utilities;
use Generator; use Generator;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Test\Common\Utilities;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Utilities\CssSelector; use Meritoo\Common\Utilities\CssSelector;

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Test\Common\Utilities;
use DateInterval; use DateInterval;
use DateTime; use DateTime;
@@ -279,9 +279,18 @@ class DateTest extends BaseTestCase
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_YEARS)); self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_YEARS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_YEARS)); self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_YEARS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(1, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_DAYS)); self::assertEquals(1, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(1, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_DAYS)); self::assertEquals(1, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MINUTES));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_MINUTES));
/* /*
* Difference of 1 day (using the relative date format) * Difference of 1 day (using the relative date format)
*/ */
@@ -294,8 +303,10 @@ class DateTest extends BaseTestCase
]; ];
self::assertEquals($effect, Date::getDateDifference(new DateTime('yesterday'), new DateTime('midnight'))); self::assertEquals($effect, Date::getDateDifference(new DateTime('yesterday'), new DateTime('midnight')));
self::assertEquals(0, Date::getDateDifference(new DateTime('yesterday'), new DateTime('midnight'), Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(1, Date::getDateDifference(new DateTime('yesterday'), new DateTime('midnight'), Date::DATE_DIFFERENCE_UNIT_DAYS)); self::assertEquals(1, Date::getDateDifference(new DateTime('yesterday'), new DateTime('midnight'), Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(0, Date::getDateDifference(new DateTime('yesterday'), new DateTime('midnight'), Date::DATE_DIFFERENCE_UNIT_HOURS)); self::assertEquals(0, Date::getDateDifference(new DateTime('yesterday'), new DateTime('midnight'), Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(0, Date::getDateDifference(new DateTime('yesterday'), new DateTime('midnight'), Date::DATE_DIFFERENCE_UNIT_MINUTES));
} }
public function testGetDateDifferenceOneDayTwoHours() public function testGetDateDifferenceOneDayTwoHours()
@@ -320,6 +331,12 @@ class DateTest extends BaseTestCase
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_YEARS)); self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_YEARS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_YEARS)); self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_YEARS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(1, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(1, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(2, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_HOURS)); self::assertEquals(2, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(2, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_HOURS)); self::assertEquals(2, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_HOURS));
@@ -355,10 +372,141 @@ class DateTest extends BaseTestCase
self::assertEquals(41, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_DAYS)); self::assertEquals(41, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(41, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_DAYS)); self::assertEquals(41, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(4, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(4, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(30, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MINUTES)); self::assertEquals(30, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MINUTES));
self::assertEquals(30, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_MINUTES)); self::assertEquals(30, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_MINUTES));
} }
public function testGetDateDifferenceNewYear()
{
$dateStart = '2017-12-31 23:59';
$dateEnd = '2018-01-01 00:00';
$effect = [
Date::DATE_DIFFERENCE_UNIT_YEARS => 0,
Date::DATE_DIFFERENCE_UNIT_MONTHS => 0,
Date::DATE_DIFFERENCE_UNIT_DAYS => 0,
Date::DATE_DIFFERENCE_UNIT_HOURS => 0,
Date::DATE_DIFFERENCE_UNIT_MINUTES => 1,
];
self::assertEquals($effect, Date::getDateDifference($dateStart, $dateEnd));
self::assertEquals($effect, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd)));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_YEARS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_YEARS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(1, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MINUTES));
self::assertEquals(1, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_MINUTES));
}
public function testGetDateDifferenceLessThan24Hours()
{
$dateStart = '2017-01-01 16:00';
$dateEnd = '2017-01-02 10:00';
$effect = [
Date::DATE_DIFFERENCE_UNIT_YEARS => 0,
Date::DATE_DIFFERENCE_UNIT_MONTHS => 0,
Date::DATE_DIFFERENCE_UNIT_DAYS => 0,
Date::DATE_DIFFERENCE_UNIT_HOURS => 18,
Date::DATE_DIFFERENCE_UNIT_MINUTES => 0,
];
self::assertEquals($effect, Date::getDateDifference($dateStart, $dateEnd));
self::assertEquals($effect, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd)));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_YEARS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_YEARS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(18, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(18, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MINUTES));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_MINUTES));
}
public function testGetDateDifferenceEqual24Hours()
{
$dateStart = '2017-01-01 00:00';
$dateEnd = '2017-01-02 00:00';
$effect = [
Date::DATE_DIFFERENCE_UNIT_YEARS => 0,
Date::DATE_DIFFERENCE_UNIT_MONTHS => 0,
Date::DATE_DIFFERENCE_UNIT_DAYS => 1,
Date::DATE_DIFFERENCE_UNIT_HOURS => 0,
Date::DATE_DIFFERENCE_UNIT_MINUTES => 0,
];
self::assertEquals($effect, Date::getDateDifference($dateStart, $dateEnd));
self::assertEquals($effect, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd)));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_YEARS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_YEARS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(1, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(1, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MINUTES));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_MINUTES));
}
public function testGetDateDifferenceInvertedDates()
{
$dateStart = '2017-01-02 10:00';
$dateEnd = '2017-01-01 16:00';
$effect = [
Date::DATE_DIFFERENCE_UNIT_YEARS => 0,
Date::DATE_DIFFERENCE_UNIT_MONTHS => 0,
Date::DATE_DIFFERENCE_UNIT_DAYS => -1,
Date::DATE_DIFFERENCE_UNIT_HOURS => 6,
Date::DATE_DIFFERENCE_UNIT_MINUTES => 0,
];
self::assertEquals($effect, Date::getDateDifference($dateStart, $dateEnd));
self::assertEquals($effect, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd)));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_YEARS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_YEARS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(-1, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(-1, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(6, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(6, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MINUTES));
self::assertEquals(0, Date::getDateDifference(new DateTime($dateStart), new DateTime($dateEnd), Date::DATE_DIFFERENCE_UNIT_MINUTES));
}
public function testGetDateDifferenceNoDifference() public function testGetDateDifferenceNoDifference()
{ {
/* /*
@@ -384,6 +532,12 @@ class DateTest extends BaseTestCase
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MONTHS)); self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(0, Date::getDateDifference(new DateTime(), new DateTime(), Date::DATE_DIFFERENCE_UNIT_MONTHS)); self::assertEquals(0, Date::getDateDifference(new DateTime(), new DateTime(), Date::DATE_DIFFERENCE_UNIT_MONTHS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(0, Date::getDateDifference(new DateTime(), new DateTime(), Date::DATE_DIFFERENCE_UNIT_DAYS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(0, Date::getDateDifference(new DateTime(), new DateTime(), Date::DATE_DIFFERENCE_UNIT_HOURS));
self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MINUTES)); self::assertEquals(0, Date::getDateDifference($dateStart, $dateEnd, Date::DATE_DIFFERENCE_UNIT_MINUTES));
self::assertEquals(0, Date::getDateDifference(new DateTime(), new DateTime(), Date::DATE_DIFFERENCE_UNIT_MINUTES)); self::assertEquals(0, Date::getDateDifference(new DateTime(), new DateTime(), Date::DATE_DIFFERENCE_UNIT_MINUTES));
} }
@@ -526,7 +680,8 @@ class DateTest extends BaseTestCase
} }
/** /**
* @param int $period The period, type of period. One of DatePeriod class constants, e.g. DatePeriod::LAST_WEEK. * @param int $period The period, type of period. One of DatePeriod class constants, e.g.
* DatePeriod::LAST_WEEK.
* @param DatePeriod $expected Expected start and end date for given period * @param DatePeriod $expected Expected start and end date for given period
* *
* @dataProvider provideCorrectPeriod * @dataProvider provideCorrectPeriod
@@ -828,7 +983,9 @@ class DateTest extends BaseTestCase
DatePeriod::NEXT_WEEK, DatePeriod::NEXT_WEEK,
new DatePeriod( new DatePeriod(
(new DateTime('this week'))->add(new DateInterval('P7D'))->setTime(0, 0, 0), (new DateTime('this week'))->add(new DateInterval('P7D'))->setTime(0, 0, 0),
(new DateTime('this week'))->add(new DateInterval('P7D'))->add(new DateInterval('P6D'))->setTime(23, 59, 59) (new DateTime('this week'))->add(new DateInterval('P7D'))
->add(new DateInterval('P6D'))
->setTime(23, 59, 59)
), ),
]; ];

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Test\Common\Utilities;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Utilities\GeneratorUtility; use Meritoo\Common\Utilities\GeneratorUtility;

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Test\Common\Utilities;
use Generator; use Generator;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;
@@ -80,8 +80,8 @@ class LocaleTest extends BaseTestCase
} }
/** /**
* @param int $category Named constant specifying the category of the functions affected by the locale setting. * @param int $category Named constant specifying the category of the functions affected by the locale
* It's the same constant as required by setlocale() function. * setting. It's the same constant as required by setlocale() function.
* @param string $languageCode Language code, in ISO 639-1 format. Short form of the locale, e.g. "fr". * @param string $languageCode Language code, in ISO 639-1 format. Short form of the locale, e.g. "fr".
* @param string $countryCode Country code, in ISO 3166-1 alpha-2 format, e.g. "FR" * @param string $countryCode Country code, in ISO 3166-1 alpha-2 format, e.g. "FR"
* @param string $expectedLocale Expected locale * @param string $expectedLocale Expected locale

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Test\Common\Utilities;
use Generator; use Generator;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Test\Common\Utilities;
use Generator; use Generator;
use Meritoo\Common\Exception\Regex\IncorrectColorHexLengthException; use Meritoo\Common\Exception\Regex\IncorrectColorHexLengthException;
@@ -14,7 +14,6 @@ use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Utilities\Locale; use Meritoo\Common\Utilities\Locale;
use Meritoo\Common\Utilities\Miscellaneous; use Meritoo\Common\Utilities\Miscellaneous;
use ReflectionException;
use stdClass; use stdClass;
/** /**
@@ -30,9 +29,6 @@ class MiscellaneousTest extends BaseTestCase
private $stringDotSeparated; private $stringDotSeparated;
private $stringWithoutSpaces; private $stringWithoutSpaces;
/**
* @throws ReflectionException
*/
public function testConstructor() public function testConstructor()
{ {
static::assertHasNoConstructor(Miscellaneous::class); static::assertHasNoConstructor(Miscellaneous::class);
@@ -156,33 +152,6 @@ class MiscellaneousTest extends BaseTestCase
self::assertFalse(Miscellaneous::isPhpModuleLoaded('xyz123')); self::assertFalse(Miscellaneous::isPhpModuleLoaded('xyz123'));
} }
public function testVariableDump()
{
$xdebugLoaded = Miscellaneous::isPhpModuleLoaded('xdebug');
$variable = 123;
$expected = "int(123)\n";
if ($xdebugLoaded) {
$libraryPath = realpath(sprintf('%s%s', __DIR__, '/../..'));
$filePath = sprintf('%s%s', $libraryPath, '/src/Utilities/Miscellaneous.php:');
/*
* Attention. I have to use "\d+" at the end of $filePath, because number of line may be different if new
* method / function will be created.
*/
$filePathQuoted = sprintf('%s\d+\:', preg_quote($filePath, '/'));
$expectedPattern = sprintf("/%s\n%s/", $filePathQuoted, preg_quote($expected, '/'));
$this->expectOutputRegex($expectedPattern);
} else {
$expected = sprintf('<pre>%s</pre>', $expected);
$this->expectOutputString($expected);
}
Miscellaneous::variableDump($variable);
}
/** /**
* @param mixed $string Empty value, e.g. "" * @param mixed $string Empty value, e.g. ""
* @dataProvider provideEmptyValue * @dataProvider provideEmptyValue
@@ -253,57 +222,68 @@ class MiscellaneousTest extends BaseTestCase
self::assertEquals($this->stringSmall, Miscellaneous::replace($this->stringSmall, $search, $replacement3, true)); self::assertEquals($this->stringSmall, Miscellaneous::replace($this->stringSmall, $search, $replacement3, true));
} }
public function testReplace() /**
* @param string $description Description of test
* @param string|array $subject The string or an array of strings to search and replace
* @param string|array $search String or pattern or array of patterns to find. It may be: string, an array
* of strings or an array of patterns.
* @param string|array $replacement The string or an array of strings to replace. It may be: string or an array
* of strings.
* @param mixed $result Result of replacing
*
* @dataProvider provideEmptyValuesToReplace
*/
public function testReplaceUsingEmptyValues($description, $subject, $search, $replacement, $result)
{ {
/* static::assertSame($result, Miscellaneous::replace($subject, $search, $replacement), $description);
* Common variables }
/**
* @param string $description Description of test
* @param string $subject The string or an array of strings to search and replace
* @param string $search String or pattern or array of patterns to find. It may be: string, an array of
* strings or an array of patterns.
* @param string $replacement The string or an array of strings to replace. It may be: string or an array of
* strings.
* @param mixed $result Result of replacing
*
* @dataProvider provideStringsToReplace
*/ */
$quoteStrings = true; public function testReplaceUsingStrings($description, $subject, $search, $replacement, $result)
{
static::assertSame($result, Miscellaneous::replace($subject, $search, $replacement), $description);
}
$subject = [ /**
$this->stringSmall, * @param string $description Description of test
$this->stringDotSeparated, * @param string $subject The string or an array of strings to search and replace
]; * @param string $search String or pattern or array of patterns to find. It may be: string, an array of
* strings or an array of patterns.
/* * @param string $replacement The string or an array of strings to replace. It may be: string or an array of
* Testing replace with an array * strings.
* @param mixed $result Result of replacing
*
* @dataProvider provideRegexToReplace
*/ */
$search = [ public function testReplaceUsingRegex($description, $subject, $search, $replacement, $result)
'|ipsum|', {
'|pellentesque|', static::assertSame($result, Miscellaneous::replace($subject, $search, $replacement), $description);
]; }
$replacement = [ /**
'commodo', * @param string $description Description of test
'interdum', * @param string $subject The string or an array of strings to search and replace
]; * @param string $search String or pattern or array of patterns to find. It may be: string, an array of
* strings or an array of patterns.
$replaced1 = Miscellaneous::replace($subject, $search, $replacement); * @param string $replacement The string or an array of strings to replace. It may be: string or an array of
$replaced2 = Miscellaneous::replace($subject, $search, $replacement, true); * strings.
* @param mixed $result Result of replacing
self::assertEquals('Lorem commodo dolor sit amet.', $replaced1[0]); *
self::assertEquals('Etiam ullamcorper. Suspendisse a interdum dui, non felis.', $replaced1[1]); * @dataProvider provideDataToReplaceWithQuoteStrings
self::assertEquals('Lorem commodo dolor sit amet.', $replaced2[0]);
self::assertEquals('Etiam ullamcorper. Suspendisse a interdum dui, non felis.', $replaced2[1]);
/*
* Testing replace with string
*/ */
$searchString = 'ipsum'; public function testReplaceWithQuoteStrings($description, $subject, $search, $replacement, $result)
$replacementString = 'commodo'; {
static::assertSame($result, Miscellaneous::replace($subject, $search, $replacement, true), $description);
$replaced = Miscellaneous::replace($subject, $searchString, $replacementString, $quoteStrings);
self::assertEquals('Lorem \'commodo\' dolor sit amet.', $replaced[0]);
/*
* Testing replace with mixed values:
* - subject: array
* - search: string
* - replacement: string
*/
$replacedMixed = Miscellaneous::replace($subject, $searchString, $replacement, $quoteStrings);
self::assertEquals('Lorem \'commodo\' dolor sit amet.', $replacedMixed[0]);
} }
public function testUppercaseFirst() public function testUppercaseFirst()
@@ -399,7 +379,7 @@ class MiscellaneousTest extends BaseTestCase
mkdir($directory1Path, 0777, true); mkdir($directory1Path, 0777, true);
mkdir($directory2Path, 0777, true); mkdir($directory2Path, 0777, true);
self::assertTrue(Miscellaneous::removeDirectory(sys_get_temp_dir() . '/lorem', false)); self::assertTrue(Miscellaneous::removeDirectory(sys_get_temp_dir() . '/lorem'));
} }
/** /**
@@ -668,10 +648,6 @@ class MiscellaneousTest extends BaseTestCase
self::assertEquals(255, Miscellaneous::getValidColorComponent(255, false)); self::assertEquals(255, Miscellaneous::getValidColorComponent(255, false));
} }
/**
* @throws IncorrectColorHexLengthException
* @throws InvalidColorHexValueException
*/
public function testGetInvertedColorWithIncorrectLength() public function testGetInvertedColorWithIncorrectLength()
{ {
$this->setExpectedException(IncorrectColorHexLengthException::class); $this->setExpectedException(IncorrectColorHexLengthException::class);
@@ -686,10 +662,6 @@ class MiscellaneousTest extends BaseTestCase
Miscellaneous::getInvertedColor('1234567'); Miscellaneous::getInvertedColor('1234567');
} }
/**
* @throws IncorrectColorHexLengthException
* @throws InvalidColorHexValueException
*/
public function testGetInvertedColorWithInvalidValue() public function testGetInvertedColorWithInvalidValue()
{ {
$this->setExpectedException(InvalidColorHexValueException::class); $this->setExpectedException(InvalidColorHexValueException::class);
@@ -701,10 +673,6 @@ class MiscellaneousTest extends BaseTestCase
Miscellaneous::getInvertedColor('00ppqq'); Miscellaneous::getInvertedColor('00ppqq');
} }
/**
* @throws IncorrectColorHexLengthException
* @throws InvalidColorHexValueException
*/
public function testGetInvertedColor() public function testGetInvertedColor()
{ {
/* /*
@@ -1183,6 +1151,322 @@ class MiscellaneousTest extends BaseTestCase
]; ];
} }
public function provideEmptyValuesToReplace()
{
yield[
'An empty string as subject',
'',
'test',
'another test',
'',
];
yield[
'An empty array as subject',
[],
'test',
'another test',
[],
];
yield[
'Null as subject',
null,
'test',
'another test',
null,
];
yield[
'An empty string to search',
'test',
'',
'another test',
'test',
];
yield[
'An empty array to search',
'test',
[],
'another test',
'test',
];
yield[
'Null to search',
'test',
null,
'another test',
'test',
];
yield[
'An empty string as replacement',
'test',
'another test',
'',
'test',
];
yield[
'An empty array as replacement',
'test',
'another test',
[],
'test',
];
yield[
'Null as replacement',
'test',
'another test',
null,
'test',
];
}
public function provideStringsToReplace()
{
yield[
'Different count of strings to search and replace - 1st part',
'Lorem ipsum dolor sit amet',
[
'ipsum',
],
'commodo',
'Lorem ipsum dolor sit amet',
];
yield[
'Different count of strings to search and replace - 2nd part',
'Lorem ipsum dolor sit amet',
'ipsum',
[
'commodo',
],
'Lorem commodo dolor sit amet',
];
yield[
'Replace 1 not existing word in 1 sentence (nothing to replace)',
'Lorem ipsum dolor sit amet',
'plum',
'commodo',
'Lorem ipsum dolor sit amet',
];
yield[
'Replace 1 word in 1 sentence',
'Lorem ipsum dolor sit amet',
'ipsum',
'commodo',
'Lorem commodo dolor sit amet',
];
yield[
'Replace 1 not existing word in 2 sentences (nothing to replace)',
[
'Lorem ipsum dolor sit amet',
'Maecenas sed diam eget risus varius blandit sit amet',
],
'plum',
'commodo',
[
'Lorem ipsum dolor sit amet',
'Maecenas sed diam eget risus varius blandit sit amet',
],
];
yield[
'Replace 1 word in 2 sentences',
[
'Lorem ipsum dolor sit amet',
'Maecenas sed diam eget risus varius blandit sit amet',
],
'amet',
'commodo',
[
'Lorem ipsum dolor sit commodo',
'Maecenas sed diam eget risus varius blandit sit commodo',
],
];
}
public function provideRegexToReplace()
{
yield[
'Different count of strings to search and replace - 1st part',
'Lorem ipsum dolor sit amet',
[
'|ipsum|',
],
'commodo',
'Lorem ipsum dolor sit amet',
];
yield[
'Different count of strings to search and replace - 2nd part',
'Lorem ipsum dolor sit amet',
'|ipsum|',
[
'commodo',
],
'Lorem ipsum dolor sit amet',
];
yield[
'1 pattern (word -> "")',
'Lorem ipsum dolor sit amet',
'|ipsum|',
'',
'Lorem dolor sit amet',
];
yield[
'1 pattern (word -> word)',
'Lorem ipsum dolor sit amet',
'|ipsum|',
'commodo',
'Lorem commodo dolor sit amet',
];
yield[
'2 patterns (word -> word)',
'Lorem ipsum dolor sit amet',
[
'|ipsum|',
'|amet|',
],
[
'commodo',
'egestas',
],
'Lorem commodo dolor sit egestas',
];
yield[
'1 word in 2 sentences',
[
'Lorem ipsum dolor sit amet',
'Maecenas sed diam eget risus varius blandit sit amet',
],
'|amet|',
'commodo',
[
'Lorem ipsum dolor sit commodo',
'Maecenas sed diam eget risus varius blandit sit commodo',
],
];
yield[
'2 words in 2 sentences',
[
'Lorem ipsum dolor sit amet',
'Maecenas sed diam eget risus varius blandit sit amet',
],
[
'|ipsum|',
'|amet|',
],
[
'commodo',
'egestas',
],
[
'Lorem commodo dolor sit egestas',
'Maecenas sed diam eget risus varius blandit sit egestas',
],
];
}
public function provideDataToReplaceWithQuoteStrings()
{
yield[
'An empty string as subject',
'',
'test',
'another test',
'',
];
yield[
'An empty string to search',
'test',
'',
'another test',
'test',
];
yield[
'An empty string as replacement',
'test',
'another test',
'',
'test',
];
yield[
'Replace 1 not existing word in 1 sentence (nothing to replace)',
'Lorem ipsum dolor sit amet',
'plum',
'commodo',
'Lorem ipsum dolor sit amet',
];
yield[
'Replace 1 word in 1 sentence',
'Lorem ipsum dolor sit amet',
'ipsum',
'commodo',
'Lorem \'commodo\' dolor sit amet',
];
yield[
'Replace 1 word in 2 sentences',
[
'Lorem ipsum dolor sit amet',
'Maecenas sed diam eget risus varius blandit sit amet',
],
'amet',
'commodo',
[
'Lorem ipsum dolor sit \'commodo\'',
'Maecenas sed diam eget risus varius blandit sit \'commodo\'',
],
];
yield[
'1 pattern (word -> "")',
'Lorem ipsum dolor sit amet',
'|ipsum|',
'',
'Lorem \'\' dolor sit amet',
];
yield[
'1 pattern (word -> word)',
'Lorem ipsum dolor sit amet',
'|ipsum|',
'commodo',
'Lorem \'commodo\' dolor sit amet',
];
yield[
'2 patterns (word -> word)',
'Lorem ipsum dolor sit amet',
[
'|ipsum|',
'|amet|',
],
[
'commodo',
'egestas',
],
'Lorem \'commodo\' dolor sit \'egestas\'',
];
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@@ -1202,10 +1486,6 @@ class MiscellaneousTest extends BaseTestCase
protected function tearDown() protected function tearDown()
{ {
parent::tearDown(); parent::tearDown();
unset($this->stringSmall, $this->stringCommaSeparated, $this->stringDotSeparated, $this->stringWithoutSpaces);
unset($this->stringSmall);
unset($this->stringCommaSeparated);
unset($this->stringDotSeparated);
unset($this->stringWithoutSpaces);
} }
} }

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Test\Common\Utilities;
use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManager;
@@ -260,7 +260,8 @@ class QueryBuilderUtilityTest extends BaseTestCase
$entityManager $entityManager
->expects(static::any()) ->expects(static::any())
->method('getExpressionBuilder') ->method('getExpressionBuilder')
->willReturn(new Expr()); ->willReturn(new Expr())
;
yield[ yield[
(new QueryBuilder($entityManager))->from('lorem_ipsum', 'lm'), (new QueryBuilder($entityManager))->from('lorem_ipsum', 'lm'),

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities\Reflection; namespace Meritoo\Test\Common\Utilities\Reflection;
/** /**
* The A class. * The A class.

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities\Reflection; namespace Meritoo\Test\Common\Utilities\Reflection;
/** /**
* The B class. * The B class.

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities\Reflection; namespace Meritoo\Test\Common\Utilities\Reflection;
/** /**
* The C class. * The C class.

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities\Reflection; namespace Meritoo\Test\Common\Utilities\Reflection;
/** /**
* The D class. * The D class.

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities\Reflection; namespace Meritoo\Test\Common\Utilities\Reflection;
/** /**
* The E trait. * The E trait.

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities\Reflection; namespace Meritoo\Test\Common\Utilities\Reflection;
/** /**
* The F class. * The F class.

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities\Reflection; namespace Meritoo\Test\Common\Utilities\Reflection;
/** /**
* The G class. * The G class.

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities\Reflection; namespace Meritoo\Test\Common\Utilities\Reflection;
/** /**
* The H class. * The H class.

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities\Reflection; namespace Meritoo\Test\Common\Utilities\Reflection;
/** /**
* The H interface. * The H interface.

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Test\Common\Utilities;
use DateTime; use DateTime;
use Generator; use Generator;
@@ -16,16 +16,16 @@ use Meritoo\Common\Exception\Reflection\MissingChildClassesException;
use Meritoo\Common\Exception\Reflection\NotExistingPropertyException; use Meritoo\Common\Exception\Reflection\NotExistingPropertyException;
use Meritoo\Common\Exception\Reflection\TooManyChildClassesException; use Meritoo\Common\Exception\Reflection\TooManyChildClassesException;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Test\Utilities\Reflection\A;
use Meritoo\Common\Test\Utilities\Reflection\B;
use Meritoo\Common\Test\Utilities\Reflection\C;
use Meritoo\Common\Test\Utilities\Reflection\D;
use Meritoo\Common\Test\Utilities\Reflection\E;
use Meritoo\Common\Test\Utilities\Reflection\F;
use Meritoo\Common\Test\Utilities\Reflection\G;
use Meritoo\Common\Test\Utilities\Reflection\H;
use Meritoo\Common\Test\Utilities\Reflection\I;
use Meritoo\Common\Utilities\Reflection; use Meritoo\Common\Utilities\Reflection;
use Meritoo\Test\Common\Utilities\Reflection\A;
use Meritoo\Test\Common\Utilities\Reflection\B;
use Meritoo\Test\Common\Utilities\Reflection\C;
use Meritoo\Test\Common\Utilities\Reflection\D;
use Meritoo\Test\Common\Utilities\Reflection\E;
use Meritoo\Test\Common\Utilities\Reflection\F;
use Meritoo\Test\Common\Utilities\Reflection\G;
use Meritoo\Test\Common\Utilities\Reflection\H;
use Meritoo\Test\Common\Utilities\Reflection\I;
use ReflectionProperty; use ReflectionProperty;
/** /**
@@ -107,7 +107,7 @@ class ReflectionTest extends BaseTestCase
/* /*
* Existing class * Existing class
*/ */
self::assertEquals('Meritoo\Common\Test\Utilities', Reflection::getClassNamespace(self::class)); self::assertEquals('Meritoo\Test\Common\Utilities', Reflection::getClassNamespace(self::class));
self::assertEquals(DateTime::class, Reflection::getClassNamespace(new DateTime())); self::assertEquals(DateTime::class, Reflection::getClassNamespace(new DateTime()));
self::assertEquals(DateTime::class, Reflection::getClassNamespace([ self::assertEquals(DateTime::class, Reflection::getClassNamespace([
@@ -410,7 +410,7 @@ class ReflectionTest extends BaseTestCase
public function testGetMaxNumberConstant() public function testGetMaxNumberConstant()
{ {
static::assertEquals(5, Reflection::getMaxNumberConstant(H::class)); static::assertSame(5, Reflection::getMaxNumberConstant(H::class));
} }
public function testHasMethodUsingClassWithoutMethod() public function testHasMethodUsingClassWithoutMethod()
@@ -450,7 +450,7 @@ class ReflectionTest extends BaseTestCase
public function testGetConstantValue() public function testGetConstantValue()
{ {
static::assertEquals(H::LOREM, Reflection::getConstantValue(H::class, 'LOREM')); static::assertSame(H::LOREM, Reflection::getConstantValue(H::class, 'LOREM'));
} }
public function testIsInterfaceImplementedUsingClassWithoutInterface() public function testIsInterfaceImplementedUsingClassWithoutInterface()
@@ -484,7 +484,7 @@ class ReflectionTest extends BaseTestCase
static::assertInstanceOf(ReflectionProperty::class, $property); static::assertInstanceOf(ReflectionProperty::class, $property);
static::assertTrue($property->isPrivate()); static::assertTrue($property->isPrivate());
static::assertEquals('count', $property->getName()); static::assertSame('count', $property->getName());
} }
public function testGetPropertyUsingClassWithProtectedProperty() public function testGetPropertyUsingClassWithProtectedProperty()
@@ -493,7 +493,7 @@ class ReflectionTest extends BaseTestCase
static::assertInstanceOf(ReflectionProperty::class, $property); static::assertInstanceOf(ReflectionProperty::class, $property);
static::assertTrue($property->isProtected()); static::assertTrue($property->isProtected());
static::assertEquals('name', $property->getName()); static::assertSame('name', $property->getName());
} }
/** /**

View File

@@ -12,7 +12,6 @@ use Generator;
use Meritoo\Common\Exception\Regex\IncorrectColorHexLengthException; use Meritoo\Common\Exception\Regex\IncorrectColorHexLengthException;
use Meritoo\Common\Exception\Regex\InvalidColorHexValueException; use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;
use ReflectionException;
/** /**
* Test case of the useful regular expressions methods * Test case of the useful regular expressions methods
@@ -25,9 +24,6 @@ class RegexTest extends BaseTestCase
private $simpleText; private $simpleText;
private $camelCaseText; private $camelCaseText;
/**
* @throws ReflectionException
*/
public function testConstructor() public function testConstructor()
{ {
static::assertHasNoConstructor(Regex::class); static::assertHasNoConstructor(Regex::class);
@@ -553,10 +549,6 @@ class RegexTest extends BaseTestCase
/** /**
* @param mixed $nonScalarValue Non scalar value, e.g. [] or null * @param mixed $nonScalarValue Non scalar value, e.g. [] or null
*
* @throws IncorrectColorHexLengthException
* @throws InvalidColorHexValueException
*
* @dataProvider provideNonScalarValue * @dataProvider provideNonScalarValue
*/ */
public function testGetValidColorHexValueUsingNonScalarValue($nonScalarValue) public function testGetValidColorHexValueUsingNonScalarValue($nonScalarValue)
@@ -566,10 +558,6 @@ class RegexTest extends BaseTestCase
/** /**
* @param mixed $emptyValue Empty value, e.g. "" * @param mixed $emptyValue Empty value, e.g. ""
*
* @throws IncorrectColorHexLengthException
* @throws InvalidColorHexValueException
*
* @dataProvider provideColorEmptyValue * @dataProvider provideColorEmptyValue
*/ */
public function testGetValidColorHexValueUsingEmptyValueWithoutException($emptyValue) public function testGetValidColorHexValueUsingEmptyValueWithoutException($emptyValue)
@@ -579,10 +567,6 @@ class RegexTest extends BaseTestCase
/** /**
* @param mixed $emptyValue Empty value, e.g. "" * @param mixed $emptyValue Empty value, e.g. ""
*
* @throws IncorrectColorHexLengthException
* @throws InvalidColorHexValueException
*
* @dataProvider provideColorEmptyValue * @dataProvider provideColorEmptyValue
*/ */
public function testGetValidColorHexValueUsingEmptyValue($emptyValue) public function testGetValidColorHexValueUsingEmptyValue($emptyValue)
@@ -593,10 +577,6 @@ class RegexTest extends BaseTestCase
/** /**
* @param string $incorrectColor Incorrect value of color * @param string $incorrectColor Incorrect value of color
*
* @throws IncorrectColorHexLengthException
* @throws InvalidColorHexValueException
*
* @dataProvider provideColorIncorrectLength * @dataProvider provideColorIncorrectLength
*/ */
public function testGetValidColorHexValueUsingIncorrectValueWithoutException($incorrectColor) public function testGetValidColorHexValueUsingIncorrectValueWithoutException($incorrectColor)
@@ -606,10 +586,6 @@ class RegexTest extends BaseTestCase
/** /**
* @param string $incorrectColor Incorrect value of color * @param string $incorrectColor Incorrect value of color
*
* @throws IncorrectColorHexLengthException
* @throws InvalidColorHexValueException
*
* @dataProvider provideColorIncorrectLength * @dataProvider provideColorIncorrectLength
*/ */
public function testGetValidColorHexValueUsingIncorrectValue($incorrectColor) public function testGetValidColorHexValueUsingIncorrectValue($incorrectColor)
@@ -620,10 +596,6 @@ class RegexTest extends BaseTestCase
/** /**
* @param string $invalidColor Invalid value of color * @param string $invalidColor Invalid value of color
*
* @throws IncorrectColorHexLengthException
* @throws InvalidColorHexValueException
*
* @dataProvider provideColorInvalidValue * @dataProvider provideColorInvalidValue
*/ */
public function testGetValidColorHexValueUsingInvalidValueWithoutException($invalidColor) public function testGetValidColorHexValueUsingInvalidValueWithoutException($invalidColor)
@@ -633,10 +605,6 @@ class RegexTest extends BaseTestCase
/** /**
* @param string $invalidColor Invalid value of color * @param string $invalidColor Invalid value of color
*
* @throws IncorrectColorHexLengthException
* @throws InvalidColorHexValueException
*
* @dataProvider provideColorInvalidValue * @dataProvider provideColorInvalidValue
*/ */
public function testGetValidColorHexValueUsingInvalidValue($invalidColor) public function testGetValidColorHexValueUsingInvalidValue($invalidColor)
@@ -649,9 +617,6 @@ class RegexTest extends BaseTestCase
* @param string $color Color to verify * @param string $color Color to verify
* @param string $expected Expected value of color * @param string $expected Expected value of color
* *
* @throws IncorrectColorHexLengthException
* @throws InvalidColorHexValueException
*
* @dataProvider provideColor * @dataProvider provideColor
*/ */
public function testGetValidColorHexValue($color, $expected) public function testGetValidColorHexValue($color, $expected)
@@ -659,6 +624,39 @@ class RegexTest extends BaseTestCase
self::assertEquals($expected, Regex::getValidColorHexValue($color)); self::assertEquals($expected, Regex::getValidColorHexValue($color));
} }
/**
* @param mixed $emptyValue Empty value, e.g. ""
* @dataProvider provideEmptyValue
*/
public static function testIsSizeValueUsingEmptyValue($emptyValue)
{
self::assertFalse(Regex::isSizeValue($emptyValue));
}
/**
* @param string $description Description of test
* @param string $value Value to verify
* @param string $separator Separator used to split width and height
* @param bool $expected Expected result of verification
*
* @dataProvider provideSizeToVerify
*/
public function testIsSizeValue($description, $value, $separator, $expected)
{
self::assertEquals($expected, Regex::isSizeValue($value, $separator), $description);
}
/**
* @param string $value Value that should be transformed to slug
* @param string $expected Expected slug
*
* @dataProvider provideValueSlug
*/
public function testCreateSlug($value, $expected)
{
self::assertSame($expected, Regex::createSlug($value));
}
/** /**
* Provides name of bundle and information if it's valid name * Provides name of bundle and information if it's valid name
* *
@@ -834,12 +832,12 @@ class RegexTest extends BaseTestCase
]; ];
yield[ yield[
fread(fopen($file1Path, 'r'), 1), fread(fopen($file1Path, 'rb'), 1),
false, false,
]; ];
yield[ yield[
fread(fopen($file2Path, 'r'), 1), fread(fopen($file2Path, 'rb'), 1),
true, true,
]; ];
} }
@@ -1729,6 +1727,274 @@ class RegexTest extends BaseTestCase
]; ];
} }
/**
* Provide value to create slug
*
* @return Generator
*/
public function provideValueSlug()
{
yield[
[],
false,
];
yield[
null,
false,
];
yield[
'',
'',
];
yield[
1234,
'1234',
];
yield[
'1234',
'1234',
];
yield[
'1/2/3/4',
'1234',
];
yield[
'1 / 2 / 3 / 4',
'1-2-3-4',
];
yield[
'test',
'test',
];
yield[
'test test',
'test-test',
];
yield[
'lorem ipsum dolor sit',
'lorem-ipsum-dolor-sit',
];
yield[
'Lorem ipsum. Dolor sit 12.34 amet.',
'lorem-ipsum-dolor-sit-1234-amet',
];
yield[
'Was sind Löwen, Bären, Vögel und Käfer (für die Prüfung)?',
'was-sind-lowen-baren-vogel-und-kafer-fur-die-prufung',
];
yield[
'äöü (ÄÖÜ)',
'aou-aou',
];
yield[
'Półka dębowa. Kolor: żółędziowy. Wymiary: 80 x 30 cm.',
'polka-debowa-kolor-zoledziowy-wymiary-80-x-30-cm',
];
yield[
'ąęółńśżźć (ĄĘÓŁŃŚŻŹĆ)',
'aeolnszzc-aeolnszzc',
];
}
public function provideSizeToVerify()
{
yield[
'One number only',
200,
' x ',
false,
];
yield[
'One number only as string',
'200',
' x ',
false,
];
yield[
'The " " as invalid separator',
'200 100',
' x ',
false,
];
yield[
'The "|" as separator (invalid separator)',
'200 | 100',
' x ',
false,
];
yield[
'The "|" as invalid separator and no spaces around separator',
'200|100',
' x ',
false,
];
yield[
'The "X" as invalid separator',
'200 X 100',
' x ',
false,
];
yield[
'Simple, valid size',
'200 x 100',
' x ',
true,
];
yield[
'Too much spaces at the right of separator',
'200 x 100',
' x ',
true,
];
yield[
'Too much spaces at the left of separator',
'200 x 100',
' x ',
true,
];
yield[
'Too much spaces around separator',
'200 x 100',
' x ',
true,
];
yield[
'Too much spaces before width',
' 200 x 100',
' x ',
true,
];
yield[
'Too much spaces after height',
'200 x 100 ',
' x ',
true,
];
yield[
'Too much spaces before width and after height',
' 200 x 100 ',
' x ',
true,
];
yield[
'Too much spaces everywhere (1st)',
' 200 x 100 ',
' x ',
true,
];
yield[
'Too much spaces everywhere (2nd)',
' 200 x 100 ',
' x ',
true,
];
yield[
'Too much spaces everywhere (3rd)',
' 200 x 100 ',
' x ',
true,
];
yield[
'The " X " as custom separator',
'200 X 100',
' X ',
true,
];
yield[
'The "|" as custom separator',
'200|100',
'|',
true,
];
yield[
'The " | " as custom separator',
'200 | 100',
' | ',
true,
];
yield[
'The "::" as custom separator',
'200::100',
'::',
true,
];
yield[
'The " :: " as custom separator',
'200 :: 100',
' :: ',
true,
];
yield[
'The "." as custom separator',
'200.100',
'.',
true,
];
yield[
'The " . " as custom separator',
'200 . 100',
' . ',
true,
];
yield[
'The "/" as custom separator',
'200/100',
'/',
true,
];
yield[
'The " / " as custom separator',
'200 / 100',
' / ',
true,
];
yield[
'The " : " as custom separator and too much spaces everywhere',
' 200 : 100 ',
' : ',
true,
];
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@@ -1737,7 +2003,8 @@ class RegexTest extends BaseTestCase
parent::setUp(); parent::setUp();
$this->simpleText = 'lorem ipsum dolor sit'; $this->simpleText = 'lorem ipsum dolor sit';
$this->camelCaseText = str_replace(' ', '', lcfirst(ucwords($this->simpleText))); // 'loremIpsumDolorSit' $simpleUppercase = ucwords($this->simpleText);
$this->camelCaseText = str_replace(' ', '', lcfirst($simpleUppercase)); // 'loremIpsumDolorSit'
} }
/** /**
@@ -1746,8 +2013,6 @@ class RegexTest extends BaseTestCase
protected function tearDown() protected function tearDown()
{ {
parent::tearDown(); parent::tearDown();
unset($this->simpleText, $this->camelCaseText);
unset($this->simpleText);
unset($this->camelCaseText);
} }
} }

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities\Repository; namespace Meritoo\Test\Common\Utilities\Repository;
/** /**
* Sortable object/entity. * Sortable object/entity.

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Test\Common\Utilities;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
@@ -14,8 +14,8 @@ use Doctrine\ORM\Query\Expr\OrderBy;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Generator; use Generator;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Test\Utilities\Repository\Sortable;
use Meritoo\Common\Utilities\Repository; use Meritoo\Common\Utilities\Repository;
use Meritoo\Test\Common\Utilities\Repository\Sortable;
use stdClass; use stdClass;
/** /**
@@ -36,7 +36,7 @@ class RepositoryTest extends BaseTestCase
$items = []; $items = [];
Repository::replenishPositions($items); Repository::replenishPositions($items);
static::assertEquals([], $items); static::assertSame([], $items);
} }
public function testReplenishPositionsUsingNotSortableObjects() public function testReplenishPositionsUsingNotSortableObjects()
@@ -85,10 +85,10 @@ class RepositoryTest extends BaseTestCase
public function testReplenishPositionsUsingArraysWithoutExtremePosition(array $items) public function testReplenishPositionsUsingArraysWithoutExtremePosition(array $items)
{ {
Repository::replenishPositions($items); Repository::replenishPositions($items);
static::assertEquals($items, $items); static::assertSame($items, $items);
Repository::replenishPositions($items, false); Repository::replenishPositions($items, false);
static::assertEquals($items, $items); static::assertSame($items, $items);
} }
/** /**
@@ -101,7 +101,7 @@ class RepositoryTest extends BaseTestCase
public function testReplenishPositionsUsingArraysWithoutExtremePositionForce(array $items, $asLast, array $expected) public function testReplenishPositionsUsingArraysWithoutExtremePositionForce(array $items, $asLast, array $expected)
{ {
Repository::replenishPositions($items, $asLast, true); Repository::replenishPositions($items, $asLast, true);
static::assertEquals($expected, $items); static::assertSame($expected, $items);
} }
/** /**
@@ -114,7 +114,7 @@ class RepositoryTest extends BaseTestCase
public function testReplenishPositionsUsingArraysWithExtremePositionForce(array $items, $asLast, array $expected) public function testReplenishPositionsUsingArraysWithExtremePositionForce(array $items, $asLast, array $expected)
{ {
Repository::replenishPositions($items, $asLast, true); Repository::replenishPositions($items, $asLast, true);
static::assertEquals($expected, $items); static::assertSame($expected, $items);
} }
/** /**
@@ -124,10 +124,10 @@ class RepositoryTest extends BaseTestCase
public function testReplenishPositionsUsingObjectsWithoutExtremePosition(array $items) public function testReplenishPositionsUsingObjectsWithoutExtremePosition(array $items)
{ {
Repository::replenishPositions($items); Repository::replenishPositions($items);
static::assertEquals($items, $items); static::assertSame($items, $items);
Repository::replenishPositions($items, false); Repository::replenishPositions($items, false);
static::assertEquals($items, $items); static::assertSame($items, $items);
} }
/** /**
@@ -171,7 +171,7 @@ class RepositoryTest extends BaseTestCase
*/ */
public function testGetExtremePositionUsingArraysWithoutExtremePosition(array $items, $max, $expected) public function testGetExtremePositionUsingArraysWithoutExtremePosition(array $items, $max, $expected)
{ {
static::assertEquals($expected, Repository::getExtremePosition($items, $max)); static::assertSame($expected, Repository::getExtremePosition($items, $max));
} }
/** /**
@@ -183,7 +183,7 @@ class RepositoryTest extends BaseTestCase
*/ */
public function testGetExtremePositionUsingArraysWithExtremePosition(array $items, $max, $expected) public function testGetExtremePositionUsingArraysWithExtremePosition(array $items, $max, $expected)
{ {
static::assertEquals($expected, Repository::getExtremePosition($items, $max)); static::assertSame($expected, Repository::getExtremePosition($items, $max));
} }
/** /**
@@ -195,7 +195,7 @@ class RepositoryTest extends BaseTestCase
*/ */
public function testGetExtremePositionUsingObjectsWithoutExtremePosition(array $items, $max, $expected) public function testGetExtremePositionUsingObjectsWithoutExtremePosition(array $items, $max, $expected)
{ {
static::assertEquals($expected, Repository::getExtremePosition($items, $max)); static::assertSame($expected, Repository::getExtremePosition($items, $max));
} }
/** /**
@@ -207,7 +207,7 @@ class RepositoryTest extends BaseTestCase
*/ */
public function testGetExtremePositionUsingObjectsWithExtremePosition(array $items, $max, $expected) public function testGetExtremePositionUsingObjectsWithExtremePosition(array $items, $max, $expected)
{ {
static::assertEquals($expected, Repository::getExtremePosition($items, $max)); static::assertSame($expected, Repository::getExtremePosition($items, $max));
} }
public function testGetEntityOrderedQueryBuilderUsingDefaults() public function testGetEntityOrderedQueryBuilderUsingDefaults()
@@ -220,7 +220,8 @@ class RepositoryTest extends BaseTestCase
->setMethods([ ->setMethods([
'createQueryBuilder', 'createQueryBuilder',
]) ])
->getMock(); ->getMock()
;
$expectedQueryBuilder = new QueryBuilder($entityManager); $expectedQueryBuilder = new QueryBuilder($entityManager);
$expectedQueryBuilder->from('any_table_name', 'qb'); $expectedQueryBuilder->from('any_table_name', 'qb');
@@ -228,7 +229,8 @@ class RepositoryTest extends BaseTestCase
$entityRepository $entityRepository
->expects(static::once()) ->expects(static::once())
->method('createQueryBuilder') ->method('createQueryBuilder')
->willReturn($expectedQueryBuilder); ->willReturn($expectedQueryBuilder)
;
$queryBuilder = Repository::getEntityOrderedQueryBuilder($entityRepository); $queryBuilder = Repository::getEntityOrderedQueryBuilder($entityRepository);
$selectDQLPart = $queryBuilder->getDQLPart('select'); $selectDQLPart = $queryBuilder->getDQLPart('select');
@@ -262,7 +264,8 @@ class RepositoryTest extends BaseTestCase
->setMethods([ ->setMethods([
'createQueryBuilder', 'createQueryBuilder',
]) ])
->getMock(); ->getMock()
;
$expectedQueryBuilder = new QueryBuilder($entityManager); $expectedQueryBuilder = new QueryBuilder($entityManager);
$expectedQueryBuilder->from('any_table_name', 'qb'); $expectedQueryBuilder->from('any_table_name', 'qb');
@@ -270,7 +273,8 @@ class RepositoryTest extends BaseTestCase
$entityRepository $entityRepository
->expects(static::once()) ->expects(static::once())
->method('createQueryBuilder') ->method('createQueryBuilder')
->willReturn($expectedQueryBuilder); ->willReturn($expectedQueryBuilder)
;
$queryBuilder = Repository::getEntityOrderedQueryBuilder($entityRepository, $property, $direction); $queryBuilder = Repository::getEntityOrderedQueryBuilder($entityRepository, $property, $direction);
$selectDQLPart = $queryBuilder->getDQLPart('select'); $selectDQLPart = $queryBuilder->getDQLPart('select');

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Test\Common\Utilities;
use Generator; use Generator;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;

View File

@@ -6,7 +6,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Test\Common\Utilities;
use Meritoo\Common\Test\Base\BaseTestCase; use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Utilities\Xml; use Meritoo\Common\Utilities\Xml;

View File

@@ -0,0 +1,105 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Test\Common\ValueObject;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
use Meritoo\Common\ValueObject\Address;
/**
* Test case for the address
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
class AddressTest extends BaseTestCase
{
/**
* @var Address
*/
private $address;
/**
* @var Address
*/
private $addressWithoutFlat;
/**
* @var Address
*/
private $addressWithoutStreet;
public function testConstructor()
{
static::assertConstructorVisibilityAndArguments(
Address::class,
OopVisibilityType::IS_PUBLIC,
5,
4
);
}
public function testGetFlatNumber()
{
static::assertSame('200', $this->address->getFlatNumber());
static::assertSame('', $this->addressWithoutFlat->getFlatNumber());
static::assertSame('300', $this->addressWithoutStreet->getFlatNumber());
}
public function testGetBuildingNumber()
{
static::assertSame('10', $this->address->getBuildingNumber());
static::assertSame('22', $this->addressWithoutFlat->getBuildingNumber());
static::assertSame('1', $this->addressWithoutStreet->getBuildingNumber());
}
public function testGetStreet()
{
static::assertSame('4th Avenue', $this->address->getStreet());
static::assertSame('Green Street', $this->addressWithoutFlat->getStreet());
static::assertSame('', $this->addressWithoutStreet->getStreet());
}
public function testGetFullStreet()
{
static::assertSame('4th Avenue 10/200', $this->address->getFullStreet());
static::assertSame('Green Street 22', $this->addressWithoutFlat->getFullStreet());
static::assertSame('', $this->addressWithoutStreet->getFullStreet());
}
public function testGetCity()
{
static::assertSame('New York', $this->address->getCity());
static::assertSame('San Francisco', $this->addressWithoutFlat->getCity());
static::assertSame('Saint Louis', $this->addressWithoutStreet->getCity());
}
public function testGetZipCode()
{
static::assertSame('00123', $this->address->getZipCode());
static::assertSame('00456', $this->addressWithoutFlat->getZipCode());
static::assertSame('00111', $this->addressWithoutStreet->getZipCode());
}
public function testToString()
{
static::assertSame('4th Avenue 10/200, 00123, New York', (string)$this->address);
static::assertSame('Green Street 22, 00456, San Francisco', (string)$this->addressWithoutFlat);
static::assertSame('00111, Saint Louis', (string)$this->addressWithoutStreet);
}
protected function setUp()
{
parent::setUp();
$this->address = new Address('New York', '00123', '4th Avenue', '10', '200');
$this->addressWithoutFlat = new Address('San Francisco', '00456', 'Green Street', '22');
$this->addressWithoutStreet = new Address('Saint Louis', '00111', '', '1', '300');
}
}

View File

@@ -0,0 +1,71 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Test\Common\ValueObject;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
use Meritoo\Common\ValueObject\BankAccount;
/**
* Test case for the bank account
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
class BankAccountTest extends BaseTestCase
{
/**
* @var BankAccount
*/
private $emptyBankAccount;
/**
* @var BankAccount
*/
private $bankAccount;
public function testConstructor()
{
static::assertConstructorVisibilityAndArguments(
BankAccount::class,
OopVisibilityType::IS_PUBLIC,
2,
2
);
}
public function testGetAccountNumber()
{
self::assertSame('', $this->emptyBankAccount->getAccountNumber());
self::assertSame('1234567890', $this->bankAccount->getAccountNumber());
}
public function testGetBankName()
{
self::assertSame('', $this->emptyBankAccount->getBankName());
self::assertSame('Bank of America', $this->bankAccount->getBankName());
}
public function testToString()
{
static::assertSame('', (string)$this->emptyBankAccount);
static::assertSame('Bank of America, 1234567890', (string)$this->bankAccount);
}
/**
* {@inheritdoc}
*/
protected function setUp()
{
parent::setUp();
$this->emptyBankAccount = new BankAccount('', '');
$this->bankAccount = new BankAccount('Bank of America', '1234567890');
}
}

View File

@@ -0,0 +1,98 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Test\Common\ValueObject;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
use Meritoo\Common\ValueObject\Address;
use Meritoo\Common\ValueObject\BankAccount;
use Meritoo\Common\ValueObject\Company;
/**
* Test case for the company
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
class CompanyTest extends BaseTestCase
{
/**
* @var Company
*/
private $company;
/**
* @var Company
*/
private $companyWithoutBankAccount;
public function testConstructor()
{
static::assertConstructorVisibilityAndArguments(
Company::class,
OopVisibilityType::IS_PUBLIC,
3,
2
);
}
public function testGetName()
{
static::assertSame('Test 1', $this->company->getName());
static::assertSame('Test 2', $this->companyWithoutBankAccount->getName());
}
public function testGetAddress()
{
static::assertEquals(
new Address('New York', '00123', '4th Avenue', '10', '200'),
$this->company->getAddress()
);
static::assertEquals(
new Address('San Francisco', '00456', 'Green Street', '22'),
$this->companyWithoutBankAccount->getAddress()
);
}
public function testGetBankAccount()
{
static::assertEquals(
new BankAccount('Bank 1', '12345'),
$this->company->getBankAccount()
);
static::assertNull($this->companyWithoutBankAccount->getBankAccount());
}
public function testToString()
{
static::assertSame('Test 1, 4th Avenue 10/200, 00123, New York, Bank 1, 12345', (string)$this->company);
static::assertSame('Test 2, Green Street 22, 00456, San Francisco', (string)$this->companyWithoutBankAccount);
}
/**
* {@inheritdoc}
*/
protected function setUp()
{
parent::setUp();
$this->company = new Company(
'Test 1',
new Address('New York', '00123', '4th Avenue', '10', '200'),
new BankAccount('Bank 1', '12345')
);
$this->companyWithoutBankAccount = new Company(
'Test 2',
new Address('San Francisco', '00456', 'Green Street', '22')
);
}
}

View File

@@ -0,0 +1,116 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Test\Common\ValueObject;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
use Meritoo\Common\ValueObject\Human;
/**
* Test case for the human
*
* @author Meritoo <github@meritoo.pl>
* @copyright Meritoo <http://www.meritoo.pl>
*/
class HumanTest extends BaseTestCase
{
public function testConstructor()
{
static::assertConstructorVisibilityAndArguments(
Human::class,
OopVisibilityType::IS_PUBLIC,
4,
2
);
}
/**
* @param string $description Description of test
* @param Human $human Human to verify
* @param string $expected Expected string
*
* @dataProvider provideHuman
*/
public function testToString($description, Human $human, $expected)
{
static::assertSame($expected, (string)$human, $description);
}
public function testGetFirstName()
{
$empty = new Human('', '');
static::assertSame('', $empty->getFirstName());
$human = new Human('John', 'Scott');
static::assertSame('John', $human->getFirstName());
}
public function testGetLastName()
{
$empty = new Human('', '');
static::assertSame('', $empty->getLastName());
$human = new Human('John', 'Scott');
static::assertSame('Scott', $human->getLastName());
}
public function testGetBirthDate()
{
$empty = new Human('', '');
static::assertNull($empty->getBirthDate());
$human = new Human('John', 'Scott', '', new \DateTime('2001-01-01'));
static::assertEquals(new \DateTime('2001-01-01'), $human->getBirthDate());
}
public function testGetFullName()
{
$empty = new Human('', '');
static::assertSame('', $empty->getFullName());
$human = new Human('John', 'Scott', '', new \DateTime('2001-01-01'));
static::assertSame('John Scott', $human->getFullName());
}
public function testGetEmail()
{
$empty = new Human('', '');
static::assertNull($empty->getEmail());
$human = new Human('John', 'Scott', 'john@scott.com');
static::assertSame('john@scott.com', $human->getEmail());
}
public function provideHuman()
{
yield[
'Without any data (an empty human)',
new Human('', ''),
'',
];
yield[
'With first and last name only',
new Human('John', 'Scott'),
'John Scott',
];
yield[
'With first name, last name and email',
new Human('John', 'Scott', 'john@scott.com'),
'John Scott <john@scott.com>',
];
yield[
'With whole/complete data',
new Human('John', 'Scott', 'john@scott.com', new \DateTime('2001-01-01')),
'John Scott <john@scott.com>',
];
}
}

File diff suppressed because it is too large Load Diff