first commit
This commit is contained in:
1
vendor/hamcrest/hamcrest-php/.coveralls.yml
vendored
Normal file
1
vendor/hamcrest/hamcrest-php/.coveralls.yml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
src_dir: hamcrest
|
38
vendor/hamcrest/hamcrest-php/.github/workflows/tests.yml
vendored
Normal file
38
vendor/hamcrest/hamcrest-php/.github/workflows/tests.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
name: tests
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
tests:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
php: ['7.0', '7.1', '7.2', '7.3', '7.4', '8.0']
|
||||
|
||||
name: PHP ${{ matrix.php }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
extensions: curl
|
||||
tools: composer:v2
|
||||
coverage: none
|
||||
|
||||
- name: Install PHP 7 dependencies
|
||||
run: composer update --prefer-dist --no-interaction --no-progress
|
||||
if: "matrix.php != '8.0'"
|
||||
|
||||
- name: Install PHP 8 dependencies
|
||||
run: composer update --prefer-dist --no-interaction --no-progress --ignore-platform-reqs
|
||||
if: "matrix.php == '8.0'"
|
||||
|
||||
- name: Execute tests
|
||||
run: vendor/bin/phpunit -c tests/phpunit.xml.dist
|
2
vendor/hamcrest/hamcrest-php/.gitignore
vendored
Normal file
2
vendor/hamcrest/hamcrest-php/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
composer.lock
|
||||
vendor
|
7
vendor/hamcrest/hamcrest-php/.gush.yml
vendored
Normal file
7
vendor/hamcrest/hamcrest-php/.gush.yml
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
adapter: github
|
||||
issue_tracker: github
|
||||
meta-header: "Copyright (c) 2009-2015 hamcrest.org"
|
||||
table-pr:
|
||||
fixed_tickets: ['Fixed Tickets', '']
|
||||
license: ['License', MIT]
|
||||
base: master
|
23
vendor/hamcrest/hamcrest-php/.travis.yml
vendored
Normal file
23
vendor/hamcrest/hamcrest-php/.travis.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
language: php
|
||||
|
||||
dist: trusty
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- name: PHP 5.3
|
||||
php: 5.3
|
||||
dist: precise
|
||||
- name: PHP 5.4
|
||||
php: 5.4
|
||||
- name: PHP 5.5
|
||||
php: 5.5
|
||||
- name: PHP 5.6
|
||||
php: 5.6
|
||||
- name: HHVM 3.18
|
||||
php: hhvm-3.18
|
||||
|
||||
install:
|
||||
- travis_retry composer update --prefer-dist --no-progress
|
||||
|
||||
script:
|
||||
- vendor/bin/phpunit -c tests/phpunit.xml.dist
|
173
vendor/hamcrest/hamcrest-php/CHANGES.txt
vendored
Normal file
173
vendor/hamcrest/hamcrest-php/CHANGES.txt
vendored
Normal file
@@ -0,0 +1,173 @@
|
||||
== Version 2.0.1: Released Jul 09 2020 ==
|
||||
|
||||
* Added support for PHP 8
|
||||
|
||||
|
||||
== Version 2.0: Released Feb 26 2016 ==
|
||||
|
||||
* Removed automatic loading of global functions
|
||||
|
||||
|
||||
== Version 1.1.0: Released Feb 2 2012 ==
|
||||
|
||||
Issues Fixed: 121, 138, 147
|
||||
|
||||
* Added non-empty matchers to complement the emptiness-matching forms.
|
||||
|
||||
- nonEmptyString()
|
||||
- nonEmptyArray()
|
||||
- nonEmptyTraversable()
|
||||
|
||||
* Added ability to pass variable arguments to several array-based matcher
|
||||
factory methods so they work like allOf() et al.
|
||||
|
||||
- anArray()
|
||||
- arrayContainingInAnyOrder(), containsInAnyOrder()
|
||||
- arrayContaining(), contains()
|
||||
- stringContainsInOrder()
|
||||
|
||||
* Matchers that accept an array of matchers now also accept variable arguments.
|
||||
Any non-matcher arguments are wrapped by IsEqual.
|
||||
|
||||
* Added noneOf() as a shortcut for not(anyOf()).
|
||||
|
||||
|
||||
== Version 1.0.0: Released Jan 20 2012 ==
|
||||
|
||||
Issues Fixed: 119, 136, 139, 141, 148, 149, 172
|
||||
|
||||
* Moved hamcrest.php into Hamcrest folder and renamed to Hamcrest.php.
|
||||
This is more in line with PEAR packaging standards.
|
||||
|
||||
* Renamed callable() to callableValue() for compatibility with PHP 5.4.
|
||||
|
||||
* Added Hamcrest_Text_StringContainsIgnoringCase to assert using stripos().
|
||||
|
||||
assertThat('fOObAr', containsStringIgnoringCase('oba'));
|
||||
assertThat('fOObAr', containsString('oba')->ignoringCase());
|
||||
|
||||
* Fixed Hamcrest_Core_IsInstanceOf to return false for native types.
|
||||
|
||||
* Moved string-based matchers to Hamcrest_Text package.
|
||||
StringContains, StringEndsWith, StringStartsWith, and SubstringMatcher
|
||||
|
||||
* Hamcrest.php and Hamcrest_Matchers.php are now built from @factory doctags.
|
||||
Added @factory doctag to every static factory method.
|
||||
|
||||
* Hamcrest_Matchers and Hamcrest.php now import each matcher as-needed
|
||||
and Hamcrest.php calls the matchers directly instead of Hamcrest_Matchers.
|
||||
|
||||
|
||||
== Version 0.3.0: Released Jul 26 2010 ==
|
||||
|
||||
* Added running count to Hamcrest_MatcherAssert with methods to get and reset it.
|
||||
This can be used by unit testing frameworks for reporting.
|
||||
|
||||
* Added Hamcrest_Core_HasToString to assert return value of toString() or __toString().
|
||||
|
||||
assertThat($anObject, hasToString('foo'));
|
||||
|
||||
* Added Hamcrest_Type_IsScalar to assert is_scalar().
|
||||
Matches values of type bool, int, float, double, and string.
|
||||
|
||||
assertThat($count, scalarValue());
|
||||
assertThat('foo', scalarValue());
|
||||
|
||||
* Added Hamcrest_Collection package.
|
||||
|
||||
- IsEmptyTraversable
|
||||
- IsTraversableWithSize
|
||||
|
||||
assertThat($iterator, emptyTraversable());
|
||||
assertThat($iterator, traversableWithSize(5));
|
||||
|
||||
* Added Hamcrest_Xml_HasXPath to assert XPath expressions or the content of nodes in an XML/HTML DOM.
|
||||
|
||||
assertThat($dom, hasXPath('books/book/title'));
|
||||
assertThat($dom, hasXPath('books/book[contains(title, "Alice")]', 3));
|
||||
assertThat($dom, hasXPath('books/book/title', 'Alice in Wonderland'));
|
||||
assertThat($dom, hasXPath('count(books/book)', greaterThan(10)));
|
||||
|
||||
* Added aliases to match the Java API.
|
||||
|
||||
hasEntry() -> hasKeyValuePair()
|
||||
hasValue() -> hasItemInArray()
|
||||
contains() -> arrayContaining()
|
||||
containsInAnyOrder() -> arrayContainingInAnyOrder()
|
||||
|
||||
* Added optional subtype to Hamcrest_TypeSafeMatcher to enforce object class or resource type.
|
||||
|
||||
* Hamcrest_TypeSafeDiagnosingMatcher now extends Hamcrest_TypeSafeMatcher.
|
||||
|
||||
|
||||
== Version 0.2.0: Released Jul 14 2010 ==
|
||||
|
||||
Issues Fixed: 109, 111, 114, 115
|
||||
|
||||
* Description::appendValues() and appendValueList() accept Iterator and IteratorAggregate. [111]
|
||||
BaseDescription::appendValue() handles IteratorAggregate.
|
||||
|
||||
* assertThat() accepts a single boolean parameter and
|
||||
wraps any non-Matcher third parameter with equalTo().
|
||||
|
||||
* Removed null return value from assertThat(). [114]
|
||||
|
||||
* Fixed wrong variable name in contains(). [109]
|
||||
|
||||
* Added Hamcrest_Core_IsSet to assert isset().
|
||||
|
||||
assertThat(array('foo' => 'bar'), set('foo'));
|
||||
assertThat(array('foo' => 'bar'), notSet('bar'));
|
||||
|
||||
* Added Hamcrest_Core_IsTypeOf to assert built-in types with gettype(). [115]
|
||||
Types: array, boolean, double, integer, null, object, resource, and string.
|
||||
Note that gettype() returns "double" for float values.
|
||||
|
||||
assertThat($count, typeOf('integer'));
|
||||
assertThat(3.14159, typeOf('double'));
|
||||
assertThat(array('foo', 'bar'), typeOf('array'));
|
||||
assertThat(new stdClass(), typeOf('object'));
|
||||
|
||||
* Added type-specific matchers in new Hamcrest_Type package.
|
||||
|
||||
- IsArray
|
||||
- IsBoolean
|
||||
- IsDouble (includes float values)
|
||||
- IsInteger
|
||||
- IsObject
|
||||
- IsResource
|
||||
- IsString
|
||||
|
||||
assertThat($count, integerValue());
|
||||
assertThat(3.14159, floatValue());
|
||||
assertThat('foo', stringValue());
|
||||
|
||||
* Added Hamcrest_Type_IsNumeric to assert is_numeric().
|
||||
Matches values of type int and float/double or strings that are formatted as numbers.
|
||||
|
||||
assertThat(5, numericValue());
|
||||
assertThat('-5e+3', numericValue());
|
||||
|
||||
* Added Hamcrest_Type_IsCallable to assert is_callable().
|
||||
|
||||
assertThat('preg_match', callable());
|
||||
assertThat(array('SomeClass', 'SomeMethod'), callable());
|
||||
assertThat(array($object, 'SomeMethod'), callable());
|
||||
assertThat($object, callable());
|
||||
assertThat(function ($x, $y) { return $x + $y; }, callable());
|
||||
|
||||
* Added Hamcrest_Text_MatchesPattern for regex matching with preg_match().
|
||||
|
||||
assertThat('foobar', matchesPattern('/o+b/'));
|
||||
|
||||
* Added aliases:
|
||||
- atLeast() for greaterThanOrEqualTo()
|
||||
- atMost() for lessThanOrEqualTo()
|
||||
|
||||
|
||||
== Version 0.1.0: Released Jul 7 2010 ==
|
||||
|
||||
* Created PEAR package
|
||||
|
||||
* Core matchers
|
||||
|
27
vendor/hamcrest/hamcrest-php/LICENSE.txt
vendored
Normal file
27
vendor/hamcrest/hamcrest-php/LICENSE.txt
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
BSD License
|
||||
|
||||
Copyright (c) 2000-2014, www.hamcrest.org
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
Redistributions of source code must retain the above copyright notice, this list of
|
||||
conditions and the following disclaimer. Redistributions in binary form must reproduce
|
||||
the above copyright notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the distribution.
|
||||
|
||||
Neither the name of Hamcrest nor the names of its contributors may be used to endorse
|
||||
or promote products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
|
||||
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGE.
|
488
vendor/hamcrest/hamcrest-php/README.md
vendored
Normal file
488
vendor/hamcrest/hamcrest-php/README.md
vendored
Normal file
@@ -0,0 +1,488 @@
|
||||
This is the PHP port of Hamcrest Matchers
|
||||
=========================================
|
||||
|
||||
[](https://travis-ci.org/hamcrest/hamcrest-php)
|
||||
|
||||
Hamcrest is a matching library originally written for Java, but
|
||||
subsequently ported to many other languages. hamcrest-php is the
|
||||
official PHP port of Hamcrest and essentially follows a literal
|
||||
translation of the original Java API for Hamcrest, with a few
|
||||
Exceptions, mostly down to PHP language barriers:
|
||||
|
||||
1. `instanceOf($theClass)` is actually `anInstanceOf($theClass)`
|
||||
|
||||
2. `both(containsString('a'))->and(containsString('b'))`
|
||||
is actually `both(containsString('a'))->andAlso(containsString('b'))`
|
||||
|
||||
3. `either(containsString('a'))->or(containsString('b'))`
|
||||
is actually `either(containsString('a'))->orElse(containsString('b'))`
|
||||
|
||||
4. Unless it would be non-semantic for a matcher to do so, hamcrest-php
|
||||
allows dynamic typing for it's input, in "the PHP way". Exception are
|
||||
where semantics surrounding the type itself would suggest otherwise,
|
||||
such as stringContains() and greaterThan().
|
||||
|
||||
5. Several official matchers have not been ported because they don't
|
||||
make sense or don't apply in PHP:
|
||||
|
||||
- `typeCompatibleWith($theClass)`
|
||||
- `eventFrom($source)`
|
||||
- `hasProperty($name)` **
|
||||
- `samePropertyValuesAs($obj)` **
|
||||
|
||||
6. When most of the collections matchers are finally ported, PHP-specific
|
||||
aliases will probably be created due to a difference in naming
|
||||
conventions between Java's Arrays, Collections, Sets and Maps compared
|
||||
with PHP's Arrays.
|
||||
|
||||
---
|
||||
** [Unless we consider POPO's (Plain Old PHP Objects) akin to JavaBeans]
|
||||
- The POPO thing is a joke. Java devs coin the term POJO's (Plain Old
|
||||
Java Objects).
|
||||
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
Hamcrest matchers are easy to use as:
|
||||
|
||||
```php
|
||||
Hamcrest_MatcherAssert::assertThat('a', Hamcrest_Matchers::equalToIgnoringCase('A'));
|
||||
```
|
||||
|
||||
Alternatively, you can use the global proxy-functions:
|
||||
|
||||
```php
|
||||
$result = true;
|
||||
// with an identifier
|
||||
assertThat("result should be true", $result, equalTo(true));
|
||||
|
||||
// without an identifier
|
||||
assertThat($result, equalTo(true));
|
||||
|
||||
// evaluate a boolean expression
|
||||
assertThat($result === true);
|
||||
|
||||
// with syntactic sugar is()
|
||||
assertThat(true, is(true));
|
||||
```
|
||||
|
||||
:warning: **NOTE:** the global proxy-functions aren't autoloaded by default, so you will need to load them first:
|
||||
|
||||
```php
|
||||
\Hamcrest\Util::registerGlobalFunctions();
|
||||
```
|
||||
|
||||
For brevity, all of the examples below use the proxy-functions.
|
||||
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
A tutorial can be found on the [Hamcrest site](https://code.google.com/archive/p/hamcrest/wikis/TutorialPHP.wiki).
|
||||
|
||||
|
||||
Available Matchers
|
||||
------------------
|
||||
* [Array](../master/README.md#array)
|
||||
* [Collection](../master/README.md#collection)
|
||||
* [Object](../master/README.md#object)
|
||||
* [Numbers](../master/README.md#numbers)
|
||||
* [Type checking](../master/README.md#type-checking)
|
||||
* [XML](../master/README.md#xml)
|
||||
|
||||
|
||||
### Array
|
||||
|
||||
* `anArray` - evaluates an array
|
||||
```php
|
||||
assertThat([], anArray());
|
||||
```
|
||||
|
||||
* `hasItemInArray` - check if item exists in array
|
||||
```php
|
||||
$list = range(2, 7, 2);
|
||||
$item = 4;
|
||||
assertThat($list, hasItemInArray($item));
|
||||
```
|
||||
|
||||
* `hasValue` - alias of hasItemInArray
|
||||
|
||||
* `arrayContainingInAnyOrder` - check if array contains elements in any order
|
||||
```php
|
||||
assertThat([2, 4, 6], arrayContainingInAnyOrder([6, 4, 2]));
|
||||
assertThat([2, 4, 6], arrayContainingInAnyOrder([4, 2, 6]));
|
||||
```
|
||||
|
||||
* `containsInAnyOrder` - alias of arrayContainingInAnyOrder
|
||||
|
||||
* `arrayContaining` - An array with elements that match the given matchers in the same order.
|
||||
```php
|
||||
assertThat([2, 4, 6], arrayContaining([2, 4, 6]));
|
||||
assertthat([2, 4, 6], not(arrayContaining([6, 4, 2])));
|
||||
```
|
||||
|
||||
* `contains` - check array in same order
|
||||
```php
|
||||
assertThat([2, 4, 6], contains([2, 4, 6]));
|
||||
```
|
||||
|
||||
* `hasKeyInArray` - check if array has given key
|
||||
```php
|
||||
assertThat(['name'=> 'foobar'], hasKeyInArray('name'));
|
||||
```
|
||||
|
||||
* `hasKey` - alias of hasKeyInArray
|
||||
|
||||
* `hasKeyValuePair` - check if arary has given key, value pair
|
||||
```php
|
||||
assertThat(['name'=> 'foobar'], hasKeyValuePair('name', 'foobar'));
|
||||
```
|
||||
* `hasEntry` - same as hasKeyValuePair
|
||||
|
||||
* `arrayWithSize` - check array has given size
|
||||
```php
|
||||
assertthat([2, 4, 6], arrayWithSize(3));
|
||||
```
|
||||
* `emptyArray` - check if array is emtpy
|
||||
```php
|
||||
assertThat([], emptyArray());
|
||||
```
|
||||
|
||||
* `nonEmptyArray`
|
||||
```php
|
||||
assertThat([1], nonEmptyArray());
|
||||
```
|
||||
|
||||
### Collection
|
||||
|
||||
* `emptyTraversable` - check if traversable is empty
|
||||
```php
|
||||
$empty_it = new EmptyIterator;
|
||||
assertThat($empty_it, emptyTraversable());
|
||||
```
|
||||
|
||||
* `nonEmptyTraversable` - check if traversable isn't empty
|
||||
```php
|
||||
$non_empty_it = new ArrayIterator(range(1, 10));
|
||||
assertThat($non_empty_it, nonEmptyTraversable());
|
||||
a
|
||||
```
|
||||
|
||||
* `traversableWithSize`
|
||||
```php
|
||||
$non_empty_it = new ArrayIterator(range(1, 10));
|
||||
assertThat($non_empty_it, traversableWithSize(count(range(1, 10))));
|
||||
`
|
||||
```
|
||||
|
||||
### Core
|
||||
|
||||
* `allOf` - Evaluates to true only if ALL of the passed in matchers evaluate to true.
|
||||
```php
|
||||
assertThat([2,4,6], allOf(hasValue(2), arrayWithSize(3)));
|
||||
```
|
||||
|
||||
* `anyOf` - Evaluates to true if ANY of the passed in matchers evaluate to true.
|
||||
```php
|
||||
assertThat([2, 4, 6], anyOf(hasValue(8), hasValue(2)));
|
||||
```
|
||||
|
||||
* `noneOf` - Evaluates to false if ANY of the passed in matchers evaluate to true.
|
||||
```php
|
||||
assertThat([2, 4, 6], noneOf(hasValue(1), hasValue(3)));
|
||||
```
|
||||
|
||||
* `both` + `andAlso` - This is useful for fluently combining matchers that must both pass.
|
||||
```php
|
||||
assertThat([2, 4, 6], both(hasValue(2))->andAlso(hasValue(4)));
|
||||
```
|
||||
|
||||
* `either` + `orElse` - This is useful for fluently combining matchers where either may pass,
|
||||
```php
|
||||
assertThat([2, 4, 6], either(hasValue(2))->orElse(hasValue(4)));
|
||||
```
|
||||
|
||||
* `describedAs` - Wraps an existing matcher and overrides the description when it fails.
|
||||
```php
|
||||
$expected = "Dog";
|
||||
$found = null;
|
||||
// this assertion would result error message as Expected: is not null but: was null
|
||||
//assertThat("Expected {$expected}, got {$found}", $found, is(notNullValue()));
|
||||
// and this assertion would result error message as Expected: Dog but: was null
|
||||
//assertThat($found, describedAs($expected, notNullValue()));
|
||||
```
|
||||
|
||||
* `everyItem` - A matcher to apply to every element in an array.
|
||||
```php
|
||||
assertThat([2, 4, 6], everyItem(notNullValue()));
|
||||
```
|
||||
|
||||
* `hasItem` - check array has given item, it can take a matcher argument
|
||||
```php
|
||||
assertThat([2, 4, 6], hasItem(equalTo(2)));
|
||||
```
|
||||
|
||||
* `hasItems` - check array has givem items, it can take multiple matcher as arguments
|
||||
```php
|
||||
assertThat([1, 3, 5], hasItems(equalTo(1), equalTo(3)));
|
||||
```
|
||||
|
||||
### Object
|
||||
|
||||
* `hasToString` - check `__toString` or `toString` method
|
||||
```php
|
||||
class Foo {
|
||||
public $name = null;
|
||||
|
||||
public function __toString() {
|
||||
return "[Foo]Instance";
|
||||
}
|
||||
}
|
||||
$foo = new Foo;
|
||||
assertThat($foo, hasToString(equalTo("[Foo]Instance")));
|
||||
```
|
||||
|
||||
* `equalTo` - compares two instances using comparison operator '=='
|
||||
```php
|
||||
$foo = new Foo;
|
||||
$foo2 = new Foo;
|
||||
assertThat($foo, equalTo($foo2));
|
||||
```
|
||||
|
||||
* `identicalTo` - compares two instances using identity operator '==='
|
||||
```php
|
||||
assertThat($foo, is(not(identicalTo($foo2))));
|
||||
```
|
||||
|
||||
* `anInstanceOf` - check instance is an instance|sub-class of given class
|
||||
```php
|
||||
assertThat($foo, anInstanceOf(Foo::class));
|
||||
```
|
||||
|
||||
* `any` - alias of `anInstanceOf`
|
||||
|
||||
* `nullValue` check null
|
||||
```php
|
||||
assertThat(null, is(nullValue()));
|
||||
```
|
||||
|
||||
* `notNullValue` check not null
|
||||
```php
|
||||
assertThat("", notNullValue());
|
||||
```
|
||||
|
||||
* `sameInstance` - check for same instance
|
||||
```php
|
||||
assertThat($foo, is(not(sameInstance($foo2))));
|
||||
assertThat($foo, is(sameInstance($foo)));
|
||||
```
|
||||
|
||||
* `typeOf`- check type
|
||||
```php
|
||||
assertThat(1, typeOf("integer"));
|
||||
```
|
||||
|
||||
* `notSet` - check if instance property is not set
|
||||
```php
|
||||
assertThat($foo, notSet("name"));
|
||||
```
|
||||
|
||||
* `set` - check if instance property is set
|
||||
```php
|
||||
$foo->name = "bar";
|
||||
assertThat($foo, set("name"));
|
||||
```
|
||||
|
||||
### Numbers
|
||||
|
||||
* `closeTo` - check value close to a range
|
||||
```php
|
||||
assertThat(3, closeTo(3, 0.5));
|
||||
```
|
||||
|
||||
* `comparesEqualTo` - check with '=='
|
||||
```php
|
||||
assertThat(2, comparesEqualTo(2));
|
||||
```
|
||||
|
||||
* `greaterThan` - check '>'
|
||||
```
|
||||
assertThat(2, greaterThan(1));
|
||||
```
|
||||
|
||||
* `greaterThanOrEqualTo`
|
||||
```php
|
||||
assertThat(2, greaterThanOrEqualTo(2));
|
||||
```
|
||||
|
||||
* `atLeast` - The value is >= given value
|
||||
```php
|
||||
assertThat(3, atLeast(2));
|
||||
```
|
||||
* `lessThan`
|
||||
```php
|
||||
assertThat(2, lessThan(3));
|
||||
```
|
||||
|
||||
* `lessThanOrEqualTo`
|
||||
```php
|
||||
assertThat(2, lessThanOrEqualTo(3));
|
||||
```
|
||||
|
||||
* `atMost` - The value is <= given value
|
||||
```php
|
||||
assertThat(2, atMost(3));
|
||||
```
|
||||
|
||||
### String
|
||||
|
||||
* `emptyString` - check for empty string
|
||||
```php
|
||||
assertThat("", emptyString());
|
||||
```
|
||||
|
||||
* `isEmptyOrNullString`
|
||||
```php
|
||||
assertThat(null, isEmptyOrNullString());
|
||||
```
|
||||
|
||||
* `nullOrEmptyString`
|
||||
```php
|
||||
assertThat("", nullOrEmptyString());
|
||||
```
|
||||
|
||||
* `isNonEmptyString`
|
||||
```php
|
||||
assertThat("foo", isNonEmptyString());
|
||||
```
|
||||
|
||||
* `nonEmptyString`
|
||||
```php
|
||||
assertThat("foo", nonEmptyString());
|
||||
```
|
||||
|
||||
* `equalToIgnoringCase`
|
||||
```php
|
||||
assertThat("Foo", equalToIgnoringCase("foo"));
|
||||
```
|
||||
* `equalToIgnoringWhiteSpace`
|
||||
```php
|
||||
assertThat(" Foo ", equalToIgnoringWhiteSpace("Foo"));
|
||||
```
|
||||
|
||||
* `matchesPattern` - matches with regex pattern
|
||||
```php
|
||||
assertThat("foobarbaz", matchesPattern('/(foo)(bar)(baz)/'));
|
||||
```
|
||||
|
||||
* `containsString` - check for substring
|
||||
```php
|
||||
assertThat("foobar", containsString("foo"));
|
||||
```
|
||||
|
||||
* `containsStringIgnoringCase`
|
||||
```php
|
||||
assertThat("fooBar", containsStringIgnoringCase("bar"));
|
||||
```
|
||||
|
||||
* `stringContainsInOrder`
|
||||
```php
|
||||
assertThat("foo", stringContainsInOrder("foo"));
|
||||
```
|
||||
|
||||
* `endsWith` - check string that ends with given value
|
||||
```php
|
||||
assertThat("foo", endsWith("oo"));
|
||||
```
|
||||
|
||||
* `startsWith` - check string that starts with given value
|
||||
```php
|
||||
assertThat("bar", startsWith("ba"));
|
||||
```
|
||||
|
||||
### Type-checking
|
||||
|
||||
* `arrayValue` - check array type
|
||||
```php
|
||||
assertThat([], arrayValue());
|
||||
```
|
||||
|
||||
* `booleanValue`
|
||||
```php
|
||||
assertThat(true, booleanValue());
|
||||
```
|
||||
* `boolValue` - alias of booleanValue
|
||||
|
||||
* `callableValue` - check if value is callable
|
||||
```php
|
||||
$func = function () {};
|
||||
assertThat($func, callableValue());
|
||||
```
|
||||
* `doubleValue`
|
||||
```php
|
||||
assertThat(3.14, doubleValue());
|
||||
```
|
||||
|
||||
* `floatValue`
|
||||
```php
|
||||
assertThat(3.14, floatValue());
|
||||
```
|
||||
|
||||
* `integerValue`
|
||||
```php
|
||||
assertThat(1, integerValue());
|
||||
```
|
||||
|
||||
* `intValue` - alias of `integerValue`
|
||||
|
||||
* `numericValue` - check if value is numeric
|
||||
```php
|
||||
assertThat("123", numericValue());
|
||||
```
|
||||
|
||||
* `objectValue` - check for object
|
||||
```php
|
||||
$obj = new stdClass;
|
||||
assertThat($obj, objectValue());
|
||||
```
|
||||
* `anObject`
|
||||
```php
|
||||
assertThat($obj, anObject());
|
||||
```
|
||||
|
||||
* `resourceValue` - check resource type
|
||||
```php
|
||||
$fp = fopen("/tmp/foo", "w+");
|
||||
assertThat($fp, resourceValue());
|
||||
```
|
||||
|
||||
* `scalarValue` - check for scaler value
|
||||
```php
|
||||
assertThat(1, scalarValue());
|
||||
```
|
||||
|
||||
* `stringValue`
|
||||
```php
|
||||
assertThat("", stringValue());
|
||||
```
|
||||
|
||||
### XML
|
||||
|
||||
* `hasXPath` - check xml with a xpath
|
||||
```php
|
||||
$xml = <<<XML
|
||||
<books>
|
||||
<book>
|
||||
<isbn>1</isbn>
|
||||
</book>
|
||||
<book>
|
||||
<isbn>2</isbn>
|
||||
</book>
|
||||
</books>
|
||||
XML;
|
||||
|
||||
$doc = new DOMDocument;
|
||||
$doc->loadXML($xml);
|
||||
assertThat($doc, hasXPath("book", 2));
|
||||
```
|
||||
|
37
vendor/hamcrest/hamcrest-php/composer.json
vendored
Normal file
37
vendor/hamcrest/hamcrest-php/composer.json
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"name": "hamcrest/hamcrest-php",
|
||||
"type": "library",
|
||||
"description": "This is the PHP port of Hamcrest Matchers",
|
||||
"keywords": ["test"],
|
||||
"license": "BSD-3-Clause",
|
||||
"authors": [
|
||||
],
|
||||
|
||||
"autoload": {
|
||||
"classmap": ["hamcrest"]
|
||||
},
|
||||
"autoload-dev": {
|
||||
"classmap": ["tests", "generator"]
|
||||
},
|
||||
|
||||
"require": {
|
||||
"php": "^5.3|^7.0|^8.0"
|
||||
},
|
||||
|
||||
"require-dev": {
|
||||
"phpunit/php-file-iterator": "^1.4 || ^2.0",
|
||||
"phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
|
||||
},
|
||||
|
||||
"replace": {
|
||||
"kodova/hamcrest-php": "*",
|
||||
"davedevelopment/hamcrest-php": "*",
|
||||
"cordoval/hamcrest-php": "*"
|
||||
},
|
||||
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.1-dev"
|
||||
}
|
||||
}
|
||||
}
|
41
vendor/hamcrest/hamcrest-php/generator/FactoryCall.php
vendored
Normal file
41
vendor/hamcrest/hamcrest-php/generator/FactoryCall.php
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
class FactoryCall
|
||||
{
|
||||
/**
|
||||
* Hamcrest standard is two spaces for each level of indentation.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const INDENT = ' ';
|
||||
|
||||
/**
|
||||
* @var FactoryMethod
|
||||
*/
|
||||
private $method;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $name;
|
||||
|
||||
public function __construct(FactoryMethod $method, $name)
|
||||
{
|
||||
$this->method = $method;
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
public function getMethod()
|
||||
{
|
||||
return $this->method;
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
}
|
71
vendor/hamcrest/hamcrest-php/generator/FactoryClass.php
vendored
Normal file
71
vendor/hamcrest/hamcrest-php/generator/FactoryClass.php
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
class FactoryClass
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $file;
|
||||
|
||||
/**
|
||||
* @var ReflectionClass
|
||||
*/
|
||||
private $reflector;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $methods;
|
||||
|
||||
public function __construct($file, ReflectionClass $class)
|
||||
{
|
||||
$this->file = $file;
|
||||
$this->reflector = $class;
|
||||
$this->extractFactoryMethods();
|
||||
}
|
||||
|
||||
public function extractFactoryMethods()
|
||||
{
|
||||
$this->methods = array();
|
||||
foreach ($this->getPublicStaticMethods() as $method) {
|
||||
if ($method->isFactory()) {
|
||||
$this->methods[] = $method;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getPublicStaticMethods()
|
||||
{
|
||||
$methods = array();
|
||||
foreach ($this->reflector->getMethods(ReflectionMethod::IS_STATIC) as $method) {
|
||||
if ($method->isPublic() && $method->getDeclaringClass() == $this->reflector) {
|
||||
$methods[] = new FactoryMethod($this, $method);
|
||||
}
|
||||
}
|
||||
return $methods;
|
||||
}
|
||||
|
||||
public function getFile()
|
||||
{
|
||||
return $this->file;
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return $this->reflector->name;
|
||||
}
|
||||
|
||||
public function isFactory()
|
||||
{
|
||||
return !empty($this->methods);
|
||||
}
|
||||
|
||||
public function getMethods()
|
||||
{
|
||||
return $this->methods;
|
||||
}
|
||||
}
|
121
vendor/hamcrest/hamcrest-php/generator/FactoryFile.php
vendored
Normal file
121
vendor/hamcrest/hamcrest-php/generator/FactoryFile.php
vendored
Normal file
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
abstract class FactoryFile
|
||||
{
|
||||
/**
|
||||
* Hamcrest standard is two spaces for each level of indentation.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const INDENT = ' ';
|
||||
|
||||
private $indent;
|
||||
|
||||
private $file;
|
||||
|
||||
private $code;
|
||||
|
||||
public function __construct($file, $indent)
|
||||
{
|
||||
$this->file = $file;
|
||||
$this->indent = $indent;
|
||||
}
|
||||
|
||||
abstract public function addCall(FactoryCall $call);
|
||||
|
||||
abstract public function build();
|
||||
|
||||
public function addFileHeader()
|
||||
{
|
||||
$this->code = '';
|
||||
$this->addPart('file_header');
|
||||
}
|
||||
|
||||
public function addPart($name)
|
||||
{
|
||||
$this->addCode($this->readPart($name));
|
||||
}
|
||||
|
||||
public function addCode($code)
|
||||
{
|
||||
$this->code .= $code;
|
||||
}
|
||||
|
||||
public function readPart($name)
|
||||
{
|
||||
return file_get_contents(__DIR__ . "/parts/$name.txt");
|
||||
}
|
||||
|
||||
public function generateFactoryCall(FactoryCall $call)
|
||||
{
|
||||
$method = $call->getMethod();
|
||||
$code = $method->getComment($this->indent) . "\n";
|
||||
$code .= $this->generateDeclaration($call->getName(), $method);
|
||||
$code .= $this->generateCall($method);
|
||||
$code .= $this->generateClosing();
|
||||
return $code;
|
||||
}
|
||||
|
||||
public function generateDeclaration($name, FactoryMethod $method)
|
||||
{
|
||||
$code = $this->indent . $this->getDeclarationModifiers()
|
||||
. 'function ' . $name . '('
|
||||
. $this->generateDeclarationArguments($method)
|
||||
. ')' . "\n" . $this->indent . '{' . "\n";
|
||||
return $code;
|
||||
}
|
||||
|
||||
public function getDeclarationModifiers()
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
public function generateDeclarationArguments(FactoryMethod $method)
|
||||
{
|
||||
if ($method->acceptsVariableArguments()) {
|
||||
return '/* args... */';
|
||||
} else {
|
||||
return $method->getParameterDeclarations();
|
||||
}
|
||||
}
|
||||
|
||||
public function generateImport(FactoryMethod $method)
|
||||
{
|
||||
return $this->indent . self::INDENT . "require_once '" . $method->getClass()->getFile() . "';" . "\n";
|
||||
}
|
||||
|
||||
public function generateCall(FactoryMethod $method)
|
||||
{
|
||||
$code = '';
|
||||
if ($method->acceptsVariableArguments()) {
|
||||
$code .= $this->indent . self::INDENT . '$args = func_get_args();' . "\n";
|
||||
}
|
||||
|
||||
$code .= $this->indent . self::INDENT . 'return ';
|
||||
if ($method->acceptsVariableArguments()) {
|
||||
$code .= 'call_user_func_array(array(\''
|
||||
. '\\' . $method->getClassName() . '\', \''
|
||||
. $method->getName() . '\'), $args);' . "\n";
|
||||
} else {
|
||||
$code .= '\\' . $method->getClassName() . '::'
|
||||
. $method->getName() . '('
|
||||
. $method->getParameterInvocations() . ');' . "\n";
|
||||
}
|
||||
|
||||
return $code;
|
||||
}
|
||||
|
||||
public function generateClosing()
|
||||
{
|
||||
return $this->indent . '}' . "\n";
|
||||
}
|
||||
|
||||
public function write()
|
||||
{
|
||||
file_put_contents($this->file, $this->code);
|
||||
}
|
||||
}
|
124
vendor/hamcrest/hamcrest-php/generator/FactoryGenerator.php
vendored
Normal file
124
vendor/hamcrest/hamcrest-php/generator/FactoryGenerator.php
vendored
Normal file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* Controls the process of extracting @factory doctags
|
||||
* and generating factory method files.
|
||||
*
|
||||
* Uses File_Iterator to scan for PHP files.
|
||||
*/
|
||||
class FactoryGenerator
|
||||
{
|
||||
/**
|
||||
* Path to the Hamcrest PHP files to process.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $path;
|
||||
|
||||
/**
|
||||
* @var array of FactoryFile
|
||||
*/
|
||||
private $factoryFiles;
|
||||
|
||||
public function __construct($path)
|
||||
{
|
||||
$this->path = $path;
|
||||
$this->factoryFiles = array();
|
||||
}
|
||||
|
||||
public function addFactoryFile(FactoryFile $factoryFile)
|
||||
{
|
||||
$this->factoryFiles[] = $factoryFile;
|
||||
}
|
||||
|
||||
public function generate()
|
||||
{
|
||||
$classes = $this->getClassesWithFactoryMethods();
|
||||
foreach ($classes as $class) {
|
||||
foreach ($class->getMethods() as $method) {
|
||||
foreach ($method->getCalls() as $call) {
|
||||
foreach ($this->factoryFiles as $file) {
|
||||
$file->addCall($call);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function write()
|
||||
{
|
||||
foreach ($this->factoryFiles as $file) {
|
||||
$file->build();
|
||||
$file->write();
|
||||
}
|
||||
}
|
||||
|
||||
public function getClassesWithFactoryMethods()
|
||||
{
|
||||
$classes = array();
|
||||
$files = $this->getSortedFiles();
|
||||
foreach ($files as $file) {
|
||||
$class = $this->getFactoryClass($file);
|
||||
if ($class !== null) {
|
||||
$classes[] = $class;
|
||||
}
|
||||
}
|
||||
|
||||
return $classes;
|
||||
}
|
||||
|
||||
public function getSortedFiles()
|
||||
{
|
||||
$iter = $this->getFileIterator();
|
||||
$files = array();
|
||||
foreach ($iter as $file) {
|
||||
$files[] = $file;
|
||||
}
|
||||
sort($files, SORT_STRING);
|
||||
|
||||
return $files;
|
||||
}
|
||||
|
||||
private function getFileIterator()
|
||||
{
|
||||
$factoryClass = class_exists('File_Iterator_Factory') ? 'File_Iterator_Factory' : 'SebastianBergmann\FileIterator\Factory';
|
||||
|
||||
$factory = new $factoryClass();
|
||||
|
||||
return $factory->getFileIterator($this->path, '.php');
|
||||
}
|
||||
|
||||
public function getFactoryClass($file)
|
||||
{
|
||||
$name = $this->getFactoryClassName($file);
|
||||
if ($name !== null) {
|
||||
require_once $file;
|
||||
|
||||
if (class_exists($name)) {
|
||||
$class = new FactoryClass(substr($file, strpos($file, 'Hamcrest/')), new ReflectionClass($name));
|
||||
if ($class->isFactory()) {
|
||||
return $class;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getFactoryClassName($file)
|
||||
{
|
||||
$content = file_get_contents($file);
|
||||
if (preg_match('/namespace\s+(.+);/', $content, $namespace)
|
||||
&& preg_match('/\n\s*class\s+(\w+)\s+extends\b/', $content, $className)
|
||||
&& preg_match('/@factory\b/', $content)
|
||||
) {
|
||||
return $namespace[1] . '\\' . $className[1];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
231
vendor/hamcrest/hamcrest-php/generator/FactoryMethod.php
vendored
Normal file
231
vendor/hamcrest/hamcrest-php/generator/FactoryMethod.php
vendored
Normal file
@@ -0,0 +1,231 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* Represents a single static factory method from a {@link Matcher} class.
|
||||
*
|
||||
* @todo Search method in file contents for func_get_args() to replace factoryVarArgs.
|
||||
*/
|
||||
class FactoryMethod
|
||||
{
|
||||
/**
|
||||
* @var FactoryClass
|
||||
*/
|
||||
private $class;
|
||||
|
||||
/**
|
||||
* @var ReflectionMethod
|
||||
*/
|
||||
private $reflector;
|
||||
|
||||
/**
|
||||
* @var array of string
|
||||
*/
|
||||
private $comment;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private $isVarArgs;
|
||||
|
||||
/**
|
||||
* @var array of FactoryCall
|
||||
*/
|
||||
private $calls;
|
||||
|
||||
/**
|
||||
* @var array FactoryParameter
|
||||
*/
|
||||
private $parameters;
|
||||
|
||||
public function __construct(FactoryClass $class, ReflectionMethod $reflector)
|
||||
{
|
||||
$this->class = $class;
|
||||
$this->reflector = $reflector;
|
||||
$this->extractCommentWithoutLeadingShashesAndStars();
|
||||
$this->extractFactoryNamesFromComment();
|
||||
$this->extractParameters();
|
||||
}
|
||||
|
||||
public function extractCommentWithoutLeadingShashesAndStars()
|
||||
{
|
||||
$this->comment = explode("\n", $this->reflector->getDocComment());
|
||||
foreach ($this->comment as &$line) {
|
||||
$line = preg_replace('#^\s*(/\\*+|\\*+/|\\*)\s?#', '', $line);
|
||||
}
|
||||
$this->trimLeadingBlankLinesFromComment();
|
||||
$this->trimTrailingBlankLinesFromComment();
|
||||
}
|
||||
|
||||
public function trimLeadingBlankLinesFromComment()
|
||||
{
|
||||
while (count($this->comment) > 0) {
|
||||
$line = array_shift($this->comment);
|
||||
if (trim($line) != '') {
|
||||
array_unshift($this->comment, $line);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function trimTrailingBlankLinesFromComment()
|
||||
{
|
||||
while (count($this->comment) > 0) {
|
||||
$line = array_pop($this->comment);
|
||||
if (trim($line) != '') {
|
||||
array_push($this->comment, $line);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function extractFactoryNamesFromComment()
|
||||
{
|
||||
$this->calls = array();
|
||||
for ($i = 0; $i < count($this->comment); $i++) {
|
||||
if ($this->extractFactoryNamesFromLine($this->comment[$i])) {
|
||||
unset($this->comment[$i]);
|
||||
}
|
||||
}
|
||||
$this->trimTrailingBlankLinesFromComment();
|
||||
}
|
||||
|
||||
public function extractFactoryNamesFromLine($line)
|
||||
{
|
||||
if (preg_match('/^\s*@factory(\s+(.+))?$/', $line, $match)) {
|
||||
$this->createCalls(
|
||||
$this->extractFactoryNamesFromAnnotation(
|
||||
isset($match[2]) ? trim($match[2]) : null
|
||||
)
|
||||
);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function extractFactoryNamesFromAnnotation($value)
|
||||
{
|
||||
$primaryName = $this->reflector->getName();
|
||||
if (empty($value)) {
|
||||
return array($primaryName);
|
||||
}
|
||||
preg_match_all('/(\.{3}|-|[a-zA-Z_][a-zA-Z_0-9]*)/', $value, $match);
|
||||
$names = $match[0];
|
||||
if (in_array('...', $names)) {
|
||||
$this->isVarArgs = true;
|
||||
}
|
||||
if (!in_array('-', $names) && !in_array($primaryName, $names)) {
|
||||
array_unshift($names, $primaryName);
|
||||
}
|
||||
return $names;
|
||||
}
|
||||
|
||||
public function createCalls(array $names)
|
||||
{
|
||||
$names = array_unique($names);
|
||||
foreach ($names as $name) {
|
||||
if ($name != '-' && $name != '...') {
|
||||
$this->calls[] = new FactoryCall($this, $name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function extractParameters()
|
||||
{
|
||||
$this->parameters = array();
|
||||
if (!$this->isVarArgs) {
|
||||
foreach ($this->reflector->getParameters() as $parameter) {
|
||||
$this->parameters[] = new FactoryParameter($this, $parameter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getParameterDeclarations()
|
||||
{
|
||||
if ($this->isVarArgs || !$this->hasParameters()) {
|
||||
return '';
|
||||
}
|
||||
$params = array();
|
||||
foreach ($this->parameters as /** @var $parameter FactoryParameter */
|
||||
$parameter) {
|
||||
$params[] = $parameter->getDeclaration();
|
||||
}
|
||||
return implode(', ', $params);
|
||||
}
|
||||
|
||||
public function getParameterInvocations()
|
||||
{
|
||||
if ($this->isVarArgs) {
|
||||
return '';
|
||||
}
|
||||
$params = array();
|
||||
foreach ($this->parameters as $parameter) {
|
||||
$params[] = $parameter->getInvocation();
|
||||
}
|
||||
return implode(', ', $params);
|
||||
}
|
||||
|
||||
|
||||
public function getClass()
|
||||
{
|
||||
return $this->class;
|
||||
}
|
||||
|
||||
public function getClassName()
|
||||
{
|
||||
return $this->class->getName();
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return $this->reflector->name;
|
||||
}
|
||||
|
||||
public function isFactory()
|
||||
{
|
||||
return count($this->calls) > 0;
|
||||
}
|
||||
|
||||
public function getCalls()
|
||||
{
|
||||
return $this->calls;
|
||||
}
|
||||
|
||||
public function acceptsVariableArguments()
|
||||
{
|
||||
return $this->isVarArgs;
|
||||
}
|
||||
|
||||
public function hasParameters()
|
||||
{
|
||||
return !empty($this->parameters);
|
||||
}
|
||||
|
||||
public function getParameters()
|
||||
{
|
||||
return $this->parameters;
|
||||
}
|
||||
|
||||
public function getFullName()
|
||||
{
|
||||
return $this->getClassName() . '::' . $this->getName();
|
||||
}
|
||||
|
||||
public function getCommentText()
|
||||
{
|
||||
return implode("\n", $this->comment);
|
||||
}
|
||||
|
||||
public function getComment($indent = '')
|
||||
{
|
||||
$comment = $indent . '/**';
|
||||
foreach ($this->comment as $line) {
|
||||
$comment .= "\n" . rtrim($indent . ' * ' . $line);
|
||||
}
|
||||
$comment .= "\n" . $indent . ' */';
|
||||
return $comment;
|
||||
}
|
||||
}
|
131
vendor/hamcrest/hamcrest-php/generator/FactoryParameter.php
vendored
Normal file
131
vendor/hamcrest/hamcrest-php/generator/FactoryParameter.php
vendored
Normal file
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
class FactoryParameter
|
||||
{
|
||||
/**
|
||||
* @var FactoryMethod
|
||||
*/
|
||||
private $method;
|
||||
|
||||
/**
|
||||
* @var ReflectionParameter
|
||||
*/
|
||||
private $reflector;
|
||||
|
||||
public function __construct(FactoryMethod $method, ReflectionParameter $reflector)
|
||||
{
|
||||
$this->method = $method;
|
||||
$this->reflector = $reflector;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the declaration code.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getDeclaration()
|
||||
{
|
||||
$code = $this->getTypeCode() . $this->getInvocation();
|
||||
|
||||
if ($this->reflector->isOptional()) {
|
||||
$default = $this->reflector->getDefaultValue();
|
||||
if (is_null($default)) {
|
||||
$default = 'null';
|
||||
} elseif (is_bool($default)) {
|
||||
$default = $default ? 'true' : 'false';
|
||||
} elseif (is_string($default)) {
|
||||
$default = "'" . $default . "'";
|
||||
} elseif (is_numeric($default)) {
|
||||
$default = strval($default);
|
||||
} elseif (is_array($default)) {
|
||||
$default = 'array()';
|
||||
} else {
|
||||
echo 'Warning: unknown default type for ' . $this->getMethod()->getFullName() . "\n";
|
||||
var_dump($default);
|
||||
$default = 'null';
|
||||
}
|
||||
$code .= ' = ' . $default;
|
||||
}
|
||||
return $code;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the type code for the paramater.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function getTypeCode()
|
||||
{
|
||||
// Handle PHP 5 separately
|
||||
if (PHP_VERSION_ID < 70000) {
|
||||
if ($this->reflector->isArray()) {
|
||||
return 'array';
|
||||
}
|
||||
|
||||
$class = $this->reflector->getClass();
|
||||
|
||||
return $class ? sprintf('\\%s ', $class->getName()) : '';
|
||||
}
|
||||
|
||||
if (!$this->reflector->hasType()) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$type = $this->reflector->getType();
|
||||
$name = self::getQualifiedName($type);
|
||||
|
||||
// PHP 7.1+ supports nullable types via a leading question mark
|
||||
return (PHP_VERSION_ID >= 70100 && $type->allowsNull()) ? sprintf('?%s ', $name) : sprintf('%s ', $name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute qualified name for the given type.
|
||||
*
|
||||
* This function knows how to prefix class names with a leading slash and
|
||||
* also how to handle PHP 8's union types.
|
||||
*
|
||||
* @param ReflectionType $type
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private static function getQualifiedName(ReflectionType $type)
|
||||
{
|
||||
// PHP 8 union types can be recursively processed
|
||||
if ($type instanceof ReflectionUnionType) {
|
||||
return implode('|', array_map(function (ReflectionType $type) {
|
||||
// The "self::" call within a Closure is fine here because this
|
||||
// code will only ever be executed on PHP 7.0+
|
||||
return self::getQualifiedName($type);
|
||||
}, $type->getTypes()));
|
||||
}
|
||||
|
||||
// PHP 7.0 doesn't have named types, but 7.1+ does
|
||||
$name = $type instanceof ReflectionNamedType ? $type->getName() : (string) $type;
|
||||
|
||||
return $type->isBuiltin() ? $name : sprintf('\\%s', $name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the invocation code.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getInvocation()
|
||||
{
|
||||
return sprintf('$%s', $this->reflector->getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the method name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getMethod()
|
||||
{
|
||||
return $this->method;
|
||||
}
|
||||
}
|
42
vendor/hamcrest/hamcrest-php/generator/GlobalFunctionFile.php
vendored
Normal file
42
vendor/hamcrest/hamcrest-php/generator/GlobalFunctionFile.php
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
class GlobalFunctionFile extends FactoryFile
|
||||
{
|
||||
/**
|
||||
* @var string containing function definitions
|
||||
*/
|
||||
private $functions;
|
||||
|
||||
public function __construct($file)
|
||||
{
|
||||
parent::__construct($file, ' ');
|
||||
$this->functions = '';
|
||||
}
|
||||
|
||||
public function addCall(FactoryCall $call)
|
||||
{
|
||||
$this->functions .= "\n" . $this->generateFactoryCall($call);
|
||||
}
|
||||
|
||||
public function build()
|
||||
{
|
||||
$this->addFileHeader();
|
||||
$this->addPart('functions_imports');
|
||||
$this->addPart('functions_header');
|
||||
$this->addCode($this->functions);
|
||||
$this->addPart('functions_footer');
|
||||
}
|
||||
|
||||
public function generateFactoryCall(FactoryCall $call)
|
||||
{
|
||||
$code = "if (!function_exists('{$call->getName()}')) {\n";
|
||||
$code.= parent::generateFactoryCall($call);
|
||||
$code.= "}\n";
|
||||
|
||||
return $code;
|
||||
}
|
||||
}
|
38
vendor/hamcrest/hamcrest-php/generator/StaticMethodFile.php
vendored
Normal file
38
vendor/hamcrest/hamcrest-php/generator/StaticMethodFile.php
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
class StaticMethodFile extends FactoryFile
|
||||
{
|
||||
/**
|
||||
* @var string containing method definitions
|
||||
*/
|
||||
private $methods;
|
||||
|
||||
public function __construct($file)
|
||||
{
|
||||
parent::__construct($file, ' ');
|
||||
$this->methods = '';
|
||||
}
|
||||
|
||||
public function addCall(FactoryCall $call)
|
||||
{
|
||||
$this->methods .= PHP_EOL . $this->generateFactoryCall($call);
|
||||
}
|
||||
|
||||
public function getDeclarationModifiers()
|
||||
{
|
||||
return 'public static ';
|
||||
}
|
||||
|
||||
public function build()
|
||||
{
|
||||
$this->addFileHeader();
|
||||
$this->addPart('matchers_imports');
|
||||
$this->addPart('matchers_header');
|
||||
$this->addCode($this->methods);
|
||||
$this->addPart('matchers_footer');
|
||||
}
|
||||
}
|
7
vendor/hamcrest/hamcrest-php/generator/parts/file_header.txt
vendored
Normal file
7
vendor/hamcrest/hamcrest-php/generator/parts/file_header.txt
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Copyright (c) 2009-2010 hamcrest.org
|
||||
*/
|
||||
|
||||
// This file is generated from the static method @factory doctags.
|
0
vendor/hamcrest/hamcrest-php/generator/parts/functions_footer.txt
vendored
Normal file
0
vendor/hamcrest/hamcrest-php/generator/parts/functions_footer.txt
vendored
Normal file
24
vendor/hamcrest/hamcrest-php/generator/parts/functions_header.txt
vendored
Normal file
24
vendor/hamcrest/hamcrest-php/generator/parts/functions_header.txt
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
if (!function_exists('assertThat')) {
|
||||
/**
|
||||
* Make an assertion and throw {@link Hamcrest_AssertionError} if it fails.
|
||||
*
|
||||
* Example:
|
||||
* <pre>
|
||||
* //With an identifier
|
||||
* assertThat("assertion identifier", $apple->flavour(), equalTo("tasty"));
|
||||
* //Without an identifier
|
||||
* assertThat($apple->flavour(), equalTo("tasty"));
|
||||
* //Evaluating a boolean expression
|
||||
* assertThat("some error", $a > $b);
|
||||
* </pre>
|
||||
*/
|
||||
function assertThat()
|
||||
{
|
||||
$args = func_get_args();
|
||||
call_user_func_array(
|
||||
array('Hamcrest\MatcherAssert', 'assertThat'),
|
||||
$args
|
||||
);
|
||||
}
|
||||
}
|
0
vendor/hamcrest/hamcrest-php/generator/parts/functions_imports.txt
vendored
Normal file
0
vendor/hamcrest/hamcrest-php/generator/parts/functions_imports.txt
vendored
Normal file
1
vendor/hamcrest/hamcrest-php/generator/parts/matchers_footer.txt
vendored
Normal file
1
vendor/hamcrest/hamcrest-php/generator/parts/matchers_footer.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
}
|
7
vendor/hamcrest/hamcrest-php/generator/parts/matchers_header.txt
vendored
Normal file
7
vendor/hamcrest/hamcrest-php/generator/parts/matchers_header.txt
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
|
||||
/**
|
||||
* A series of static factories for all hamcrest matchers.
|
||||
*/
|
||||
class Matchers
|
||||
{
|
2
vendor/hamcrest/hamcrest-php/generator/parts/matchers_imports.txt
vendored
Normal file
2
vendor/hamcrest/hamcrest-php/generator/parts/matchers_imports.txt
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
namespace Hamcrest;
|
37
vendor/hamcrest/hamcrest-php/generator/run.php
vendored
Normal file
37
vendor/hamcrest/hamcrest-php/generator/run.php
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
require __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
/*
|
||||
* Generates the Hamcrest\Matchers factory class and factory functions
|
||||
* from the @factory doctags in the various matchers.
|
||||
*/
|
||||
|
||||
define('GENERATOR_BASE', __DIR__);
|
||||
define('HAMCREST_BASE', realpath(dirname(GENERATOR_BASE) . DIRECTORY_SEPARATOR . 'hamcrest'));
|
||||
|
||||
define('GLOBAL_FUNCTIONS_FILE', HAMCREST_BASE . DIRECTORY_SEPARATOR . 'Hamcrest.php');
|
||||
define('STATIC_MATCHERS_FILE', HAMCREST_BASE . DIRECTORY_SEPARATOR . 'Hamcrest' . DIRECTORY_SEPARATOR . 'Matchers.php');
|
||||
|
||||
set_include_path(
|
||||
implode(
|
||||
PATH_SEPARATOR,
|
||||
array(
|
||||
GENERATOR_BASE,
|
||||
HAMCREST_BASE,
|
||||
get_include_path()
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
@unlink(GLOBAL_FUNCTIONS_FILE);
|
||||
@unlink(STATIC_MATCHERS_FILE);
|
||||
|
||||
$generator = new FactoryGenerator(HAMCREST_BASE . DIRECTORY_SEPARATOR . 'Hamcrest');
|
||||
$generator->addFactoryFile(new StaticMethodFile(STATIC_MATCHERS_FILE));
|
||||
$generator->addFactoryFile(new GlobalFunctionFile(GLOBAL_FUNCTIONS_FILE));
|
||||
$generator->generate();
|
||||
$generator->write();
|
882
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest.php
vendored
Normal file
882
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest.php
vendored
Normal file
@@ -0,0 +1,882 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Copyright (c) 2009-2010 hamcrest.org
|
||||
*/
|
||||
|
||||
// This file is generated from the static method @factory doctags.
|
||||
|
||||
if (!function_exists('assertThat')) {
|
||||
/**
|
||||
* Make an assertion and throw {@link Hamcrest_AssertionError} if it fails.
|
||||
*
|
||||
* Example:
|
||||
* <pre>
|
||||
* //With an identifier
|
||||
* assertThat("assertion identifier", $apple->flavour(), equalTo("tasty"));
|
||||
* //Without an identifier
|
||||
* assertThat($apple->flavour(), equalTo("tasty"));
|
||||
* //Evaluating a boolean expression
|
||||
* assertThat("some error", $a > $b);
|
||||
* </pre>
|
||||
*/
|
||||
function assertThat()
|
||||
{
|
||||
$args = func_get_args();
|
||||
call_user_func_array(
|
||||
array('Hamcrest\MatcherAssert', 'assertThat'),
|
||||
$args
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('anArray')) {
|
||||
/**
|
||||
* Evaluates to true only if each $matcher[$i] is satisfied by $array[$i].
|
||||
*/
|
||||
function anArray(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Arrays\IsArray', 'anArray'), $args);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('hasItemInArray')) {
|
||||
/**
|
||||
* Evaluates to true if any item in an array satisfies the given matcher.
|
||||
*
|
||||
* @param mixed $item as a {@link Hamcrest\Matcher} or a value.
|
||||
*
|
||||
* @return \Hamcrest\Arrays\IsArrayContaining
|
||||
*/
|
||||
function hasItemInArray($item)
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayContaining::hasItemInArray($item);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('hasValue')) {
|
||||
/**
|
||||
* Evaluates to true if any item in an array satisfies the given matcher.
|
||||
*
|
||||
* @param mixed $item as a {@link Hamcrest\Matcher} or a value.
|
||||
*
|
||||
* @return \Hamcrest\Arrays\IsArrayContaining
|
||||
*/
|
||||
function hasValue($item)
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayContaining::hasItemInArray($item);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('arrayContainingInAnyOrder')) {
|
||||
/**
|
||||
* An array with elements that match the given matchers.
|
||||
*/
|
||||
function arrayContainingInAnyOrder(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Arrays\IsArrayContainingInAnyOrder', 'arrayContainingInAnyOrder'), $args);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('containsInAnyOrder')) {
|
||||
/**
|
||||
* An array with elements that match the given matchers.
|
||||
*/
|
||||
function containsInAnyOrder(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Arrays\IsArrayContainingInAnyOrder', 'arrayContainingInAnyOrder'), $args);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('arrayContaining')) {
|
||||
/**
|
||||
* An array with elements that match the given matchers in the same order.
|
||||
*/
|
||||
function arrayContaining(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Arrays\IsArrayContainingInOrder', 'arrayContaining'), $args);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('contains')) {
|
||||
/**
|
||||
* An array with elements that match the given matchers in the same order.
|
||||
*/
|
||||
function contains(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Arrays\IsArrayContainingInOrder', 'arrayContaining'), $args);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('hasKeyInArray')) {
|
||||
/**
|
||||
* Evaluates to true if any key in an array matches the given matcher.
|
||||
*
|
||||
* @param mixed $key as a {@link Hamcrest\Matcher} or a value.
|
||||
*
|
||||
* @return \Hamcrest\Arrays\IsArrayContainingKey
|
||||
*/
|
||||
function hasKeyInArray($key)
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayContainingKey::hasKeyInArray($key);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('hasKey')) {
|
||||
/**
|
||||
* Evaluates to true if any key in an array matches the given matcher.
|
||||
*
|
||||
* @param mixed $key as a {@link Hamcrest\Matcher} or a value.
|
||||
*
|
||||
* @return \Hamcrest\Arrays\IsArrayContainingKey
|
||||
*/
|
||||
function hasKey($key)
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayContainingKey::hasKeyInArray($key);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('hasKeyValuePair')) {
|
||||
/**
|
||||
* Test if an array has both an key and value in parity with each other.
|
||||
*/
|
||||
function hasKeyValuePair($key, $value)
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayContainingKeyValuePair::hasKeyValuePair($key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('hasEntry')) {
|
||||
/**
|
||||
* Test if an array has both an key and value in parity with each other.
|
||||
*/
|
||||
function hasEntry($key, $value)
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayContainingKeyValuePair::hasKeyValuePair($key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('arrayWithSize')) {
|
||||
/**
|
||||
* Does array size satisfy a given matcher?
|
||||
*
|
||||
* @param \Hamcrest\Matcher|int $size as a {@link Hamcrest\Matcher} or a value.
|
||||
*
|
||||
* @return \Hamcrest\Arrays\IsArrayWithSize
|
||||
*/
|
||||
function arrayWithSize($size)
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayWithSize::arrayWithSize($size);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('emptyArray')) {
|
||||
/**
|
||||
* Matches an empty array.
|
||||
*/
|
||||
function emptyArray()
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayWithSize::emptyArray();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('nonEmptyArray')) {
|
||||
/**
|
||||
* Matches an empty array.
|
||||
*/
|
||||
function nonEmptyArray()
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayWithSize::nonEmptyArray();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('emptyTraversable')) {
|
||||
/**
|
||||
* Returns true if traversable is empty.
|
||||
*/
|
||||
function emptyTraversable()
|
||||
{
|
||||
return \Hamcrest\Collection\IsEmptyTraversable::emptyTraversable();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('nonEmptyTraversable')) {
|
||||
/**
|
||||
* Returns true if traversable is not empty.
|
||||
*/
|
||||
function nonEmptyTraversable()
|
||||
{
|
||||
return \Hamcrest\Collection\IsEmptyTraversable::nonEmptyTraversable();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('traversableWithSize')) {
|
||||
/**
|
||||
* Does traversable size satisfy a given matcher?
|
||||
*/
|
||||
function traversableWithSize($size)
|
||||
{
|
||||
return \Hamcrest\Collection\IsTraversableWithSize::traversableWithSize($size);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('allOf')) {
|
||||
/**
|
||||
* Evaluates to true only if ALL of the passed in matchers evaluate to true.
|
||||
*/
|
||||
function allOf(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Core\AllOf', 'allOf'), $args);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('anyOf')) {
|
||||
/**
|
||||
* Evaluates to true if ANY of the passed in matchers evaluate to true.
|
||||
*/
|
||||
function anyOf(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Core\AnyOf', 'anyOf'), $args);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('noneOf')) {
|
||||
/**
|
||||
* Evaluates to false if ANY of the passed in matchers evaluate to true.
|
||||
*/
|
||||
function noneOf(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Core\AnyOf', 'noneOf'), $args);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('both')) {
|
||||
/**
|
||||
* This is useful for fluently combining matchers that must both pass.
|
||||
* For example:
|
||||
* <pre>
|
||||
* assertThat($string, both(containsString("a"))->andAlso(containsString("b")));
|
||||
* </pre>
|
||||
*/
|
||||
function both(\Hamcrest\Matcher $matcher)
|
||||
{
|
||||
return \Hamcrest\Core\CombinableMatcher::both($matcher);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('either')) {
|
||||
/**
|
||||
* This is useful for fluently combining matchers where either may pass,
|
||||
* for example:
|
||||
* <pre>
|
||||
* assertThat($string, either(containsString("a"))->orElse(containsString("b")));
|
||||
* </pre>
|
||||
*/
|
||||
function either(\Hamcrest\Matcher $matcher)
|
||||
{
|
||||
return \Hamcrest\Core\CombinableMatcher::either($matcher);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('describedAs')) {
|
||||
/**
|
||||
* Wraps an existing matcher and overrides the description when it fails.
|
||||
*/
|
||||
function describedAs(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Core\DescribedAs', 'describedAs'), $args);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('everyItem')) {
|
||||
/**
|
||||
* @param Matcher $itemMatcher
|
||||
* A matcher to apply to every element in an array.
|
||||
*
|
||||
* @return \Hamcrest\Core\Every
|
||||
* Evaluates to TRUE for a collection in which every item matches $itemMatcher
|
||||
*/
|
||||
function everyItem(\Hamcrest\Matcher $itemMatcher)
|
||||
{
|
||||
return \Hamcrest\Core\Every::everyItem($itemMatcher);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('hasToString')) {
|
||||
/**
|
||||
* Does array size satisfy a given matcher?
|
||||
*/
|
||||
function hasToString($matcher)
|
||||
{
|
||||
return \Hamcrest\Core\HasToString::hasToString($matcher);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('is')) {
|
||||
/**
|
||||
* Decorates another Matcher, retaining the behavior but allowing tests
|
||||
* to be slightly more expressive.
|
||||
*
|
||||
* For example: assertThat($cheese, equalTo($smelly))
|
||||
* vs. assertThat($cheese, is(equalTo($smelly)))
|
||||
*/
|
||||
function is($value)
|
||||
{
|
||||
return \Hamcrest\Core\Is::is($value);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('anything')) {
|
||||
/**
|
||||
* This matcher always evaluates to true.
|
||||
*
|
||||
* @param string $description A meaningful string used when describing itself.
|
||||
*
|
||||
* @return \Hamcrest\Core\IsAnything
|
||||
*/
|
||||
function anything($description = 'ANYTHING')
|
||||
{
|
||||
return \Hamcrest\Core\IsAnything::anything($description);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('hasItem')) {
|
||||
/**
|
||||
* Test if the value is an array containing this matcher.
|
||||
*
|
||||
* Example:
|
||||
* <pre>
|
||||
* assertThat(array('a', 'b'), hasItem(equalTo('b')));
|
||||
* //Convenience defaults to equalTo()
|
||||
* assertThat(array('a', 'b'), hasItem('b'));
|
||||
* </pre>
|
||||
*/
|
||||
function hasItem(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Core\IsCollectionContaining', 'hasItem'), $args);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('hasItems')) {
|
||||
/**
|
||||
* Test if the value is an array containing elements that match all of these
|
||||
* matchers.
|
||||
*
|
||||
* Example:
|
||||
* <pre>
|
||||
* assertThat(array('a', 'b', 'c'), hasItems(equalTo('a'), equalTo('b')));
|
||||
* </pre>
|
||||
*/
|
||||
function hasItems(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Core\IsCollectionContaining', 'hasItems'), $args);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('equalTo')) {
|
||||
/**
|
||||
* Is the value equal to another value, as tested by the use of the "=="
|
||||
* comparison operator?
|
||||
*/
|
||||
function equalTo($item)
|
||||
{
|
||||
return \Hamcrest\Core\IsEqual::equalTo($item);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('identicalTo')) {
|
||||
/**
|
||||
* Tests of the value is identical to $value as tested by the "===" operator.
|
||||
*/
|
||||
function identicalTo($value)
|
||||
{
|
||||
return \Hamcrest\Core\IsIdentical::identicalTo($value);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('anInstanceOf')) {
|
||||
/**
|
||||
* Is the value an instance of a particular type?
|
||||
* This version assumes no relationship between the required type and
|
||||
* the signature of the method that sets it up, for example in
|
||||
* <code>assertThat($anObject, anInstanceOf('Thing'));</code>
|
||||
*/
|
||||
function anInstanceOf($theClass)
|
||||
{
|
||||
return \Hamcrest\Core\IsInstanceOf::anInstanceOf($theClass);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('any')) {
|
||||
/**
|
||||
* Is the value an instance of a particular type?
|
||||
* This version assumes no relationship between the required type and
|
||||
* the signature of the method that sets it up, for example in
|
||||
* <code>assertThat($anObject, anInstanceOf('Thing'));</code>
|
||||
*/
|
||||
function any($theClass)
|
||||
{
|
||||
return \Hamcrest\Core\IsInstanceOf::anInstanceOf($theClass);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('not')) {
|
||||
/**
|
||||
* Matches if value does not match $value.
|
||||
*/
|
||||
function not($value)
|
||||
{
|
||||
return \Hamcrest\Core\IsNot::not($value);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('nullValue')) {
|
||||
/**
|
||||
* Matches if value is null.
|
||||
*/
|
||||
function nullValue()
|
||||
{
|
||||
return \Hamcrest\Core\IsNull::nullValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('notNullValue')) {
|
||||
/**
|
||||
* Matches if value is not null.
|
||||
*/
|
||||
function notNullValue()
|
||||
{
|
||||
return \Hamcrest\Core\IsNull::notNullValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('sameInstance')) {
|
||||
/**
|
||||
* Creates a new instance of IsSame.
|
||||
*
|
||||
* @param mixed $object
|
||||
* The predicate evaluates to true only when the argument is
|
||||
* this object.
|
||||
*
|
||||
* @return \Hamcrest\Core\IsSame
|
||||
*/
|
||||
function sameInstance($object)
|
||||
{
|
||||
return \Hamcrest\Core\IsSame::sameInstance($object);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('typeOf')) {
|
||||
/**
|
||||
* Is the value a particular built-in type?
|
||||
*/
|
||||
function typeOf($theType)
|
||||
{
|
||||
return \Hamcrest\Core\IsTypeOf::typeOf($theType);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('set')) {
|
||||
/**
|
||||
* Matches if value (class, object, or array) has named $property.
|
||||
*/
|
||||
function set($property)
|
||||
{
|
||||
return \Hamcrest\Core\Set::set($property);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('notSet')) {
|
||||
/**
|
||||
* Matches if value (class, object, or array) does not have named $property.
|
||||
*/
|
||||
function notSet($property)
|
||||
{
|
||||
return \Hamcrest\Core\Set::notSet($property);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('closeTo')) {
|
||||
/**
|
||||
* Matches if value is a number equal to $value within some range of
|
||||
* acceptable error $delta.
|
||||
*/
|
||||
function closeTo($value, $delta)
|
||||
{
|
||||
return \Hamcrest\Number\IsCloseTo::closeTo($value, $delta);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('comparesEqualTo')) {
|
||||
/**
|
||||
* The value is not > $value, nor < $value.
|
||||
*/
|
||||
function comparesEqualTo($value)
|
||||
{
|
||||
return \Hamcrest\Number\OrderingComparison::comparesEqualTo($value);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('greaterThan')) {
|
||||
/**
|
||||
* The value is > $value.
|
||||
*/
|
||||
function greaterThan($value)
|
||||
{
|
||||
return \Hamcrest\Number\OrderingComparison::greaterThan($value);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('greaterThanOrEqualTo')) {
|
||||
/**
|
||||
* The value is >= $value.
|
||||
*/
|
||||
function greaterThanOrEqualTo($value)
|
||||
{
|
||||
return \Hamcrest\Number\OrderingComparison::greaterThanOrEqualTo($value);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('atLeast')) {
|
||||
/**
|
||||
* The value is >= $value.
|
||||
*/
|
||||
function atLeast($value)
|
||||
{
|
||||
return \Hamcrest\Number\OrderingComparison::greaterThanOrEqualTo($value);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('lessThan')) {
|
||||
/**
|
||||
* The value is < $value.
|
||||
*/
|
||||
function lessThan($value)
|
||||
{
|
||||
return \Hamcrest\Number\OrderingComparison::lessThan($value);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('lessThanOrEqualTo')) {
|
||||
/**
|
||||
* The value is <= $value.
|
||||
*/
|
||||
function lessThanOrEqualTo($value)
|
||||
{
|
||||
return \Hamcrest\Number\OrderingComparison::lessThanOrEqualTo($value);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('atMost')) {
|
||||
/**
|
||||
* The value is <= $value.
|
||||
*/
|
||||
function atMost($value)
|
||||
{
|
||||
return \Hamcrest\Number\OrderingComparison::lessThanOrEqualTo($value);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('isEmptyString')) {
|
||||
/**
|
||||
* Matches if value is a zero-length string.
|
||||
*/
|
||||
function isEmptyString()
|
||||
{
|
||||
return \Hamcrest\Text\IsEmptyString::isEmptyString();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('emptyString')) {
|
||||
/**
|
||||
* Matches if value is a zero-length string.
|
||||
*/
|
||||
function emptyString()
|
||||
{
|
||||
return \Hamcrest\Text\IsEmptyString::isEmptyString();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('isEmptyOrNullString')) {
|
||||
/**
|
||||
* Matches if value is null or a zero-length string.
|
||||
*/
|
||||
function isEmptyOrNullString()
|
||||
{
|
||||
return \Hamcrest\Text\IsEmptyString::isEmptyOrNullString();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('nullOrEmptyString')) {
|
||||
/**
|
||||
* Matches if value is null or a zero-length string.
|
||||
*/
|
||||
function nullOrEmptyString()
|
||||
{
|
||||
return \Hamcrest\Text\IsEmptyString::isEmptyOrNullString();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('isNonEmptyString')) {
|
||||
/**
|
||||
* Matches if value is a non-zero-length string.
|
||||
*/
|
||||
function isNonEmptyString()
|
||||
{
|
||||
return \Hamcrest\Text\IsEmptyString::isNonEmptyString();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('nonEmptyString')) {
|
||||
/**
|
||||
* Matches if value is a non-zero-length string.
|
||||
*/
|
||||
function nonEmptyString()
|
||||
{
|
||||
return \Hamcrest\Text\IsEmptyString::isNonEmptyString();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('equalToIgnoringCase')) {
|
||||
/**
|
||||
* Matches if value is a string equal to $string, regardless of the case.
|
||||
*/
|
||||
function equalToIgnoringCase($string)
|
||||
{
|
||||
return \Hamcrest\Text\IsEqualIgnoringCase::equalToIgnoringCase($string);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('equalToIgnoringWhiteSpace')) {
|
||||
/**
|
||||
* Matches if value is a string equal to $string, regardless of whitespace.
|
||||
*/
|
||||
function equalToIgnoringWhiteSpace($string)
|
||||
{
|
||||
return \Hamcrest\Text\IsEqualIgnoringWhiteSpace::equalToIgnoringWhiteSpace($string);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('matchesPattern')) {
|
||||
/**
|
||||
* Matches if value is a string that matches regular expression $pattern.
|
||||
*/
|
||||
function matchesPattern($pattern)
|
||||
{
|
||||
return \Hamcrest\Text\MatchesPattern::matchesPattern($pattern);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('containsString')) {
|
||||
/**
|
||||
* Matches if value is a string that contains $substring.
|
||||
*/
|
||||
function containsString($substring)
|
||||
{
|
||||
return \Hamcrest\Text\StringContains::containsString($substring);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('containsStringIgnoringCase')) {
|
||||
/**
|
||||
* Matches if value is a string that contains $substring regardless of the case.
|
||||
*/
|
||||
function containsStringIgnoringCase($substring)
|
||||
{
|
||||
return \Hamcrest\Text\StringContainsIgnoringCase::containsStringIgnoringCase($substring);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('stringContainsInOrder')) {
|
||||
/**
|
||||
* Matches if value contains $substrings in a constrained order.
|
||||
*/
|
||||
function stringContainsInOrder(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Text\StringContainsInOrder', 'stringContainsInOrder'), $args);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('endsWith')) {
|
||||
/**
|
||||
* Matches if value is a string that ends with $substring.
|
||||
*/
|
||||
function endsWith($substring)
|
||||
{
|
||||
return \Hamcrest\Text\StringEndsWith::endsWith($substring);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('startsWith')) {
|
||||
/**
|
||||
* Matches if value is a string that starts with $substring.
|
||||
*/
|
||||
function startsWith($substring)
|
||||
{
|
||||
return \Hamcrest\Text\StringStartsWith::startsWith($substring);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('arrayValue')) {
|
||||
/**
|
||||
* Is the value an array?
|
||||
*/
|
||||
function arrayValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsArray::arrayValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('booleanValue')) {
|
||||
/**
|
||||
* Is the value a boolean?
|
||||
*/
|
||||
function booleanValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsBoolean::booleanValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('boolValue')) {
|
||||
/**
|
||||
* Is the value a boolean?
|
||||
*/
|
||||
function boolValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsBoolean::booleanValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('callableValue')) {
|
||||
/**
|
||||
* Is the value callable?
|
||||
*/
|
||||
function callableValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsCallable::callableValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('doubleValue')) {
|
||||
/**
|
||||
* Is the value a float/double?
|
||||
*/
|
||||
function doubleValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsDouble::doubleValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('floatValue')) {
|
||||
/**
|
||||
* Is the value a float/double?
|
||||
*/
|
||||
function floatValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsDouble::doubleValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('integerValue')) {
|
||||
/**
|
||||
* Is the value an integer?
|
||||
*/
|
||||
function integerValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsInteger::integerValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('intValue')) {
|
||||
/**
|
||||
* Is the value an integer?
|
||||
*/
|
||||
function intValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsInteger::integerValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('numericValue')) {
|
||||
/**
|
||||
* Is the value a numeric?
|
||||
*/
|
||||
function numericValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsNumeric::numericValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('objectValue')) {
|
||||
/**
|
||||
* Is the value an object?
|
||||
*/
|
||||
function objectValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsObject::objectValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('anObject')) {
|
||||
/**
|
||||
* Is the value an object?
|
||||
*/
|
||||
function anObject()
|
||||
{
|
||||
return \Hamcrest\Type\IsObject::objectValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('resourceValue')) {
|
||||
/**
|
||||
* Is the value a resource?
|
||||
*/
|
||||
function resourceValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsResource::resourceValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('scalarValue')) {
|
||||
/**
|
||||
* Is the value a scalar (boolean, integer, double, or string)?
|
||||
*/
|
||||
function scalarValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsScalar::scalarValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('stringValue')) {
|
||||
/**
|
||||
* Is the value a string?
|
||||
*/
|
||||
function stringValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsString::stringValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('hasXPath')) {
|
||||
/**
|
||||
* Wraps <code>$matcher</code> with {@link Hamcrest\Core\IsEqual)
|
||||
* if it's not a matcher and the XPath in <code>count()</code>
|
||||
* if it's an integer.
|
||||
*/
|
||||
function hasXPath($xpath, $matcher = null)
|
||||
{
|
||||
return \Hamcrest\Xml\HasXPath::hasXPath($xpath, $matcher);
|
||||
}
|
||||
}
|
118
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArray.php
vendored
Normal file
118
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArray.php
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
namespace Hamcrest\Arrays;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
// NOTE: This class is not exactly a direct port of Java's since Java handles
|
||||
// arrays quite differently than PHP
|
||||
|
||||
// TODO: Allow this to take matchers or values within the array
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\TypeSafeMatcher;
|
||||
use Hamcrest\Util;
|
||||
|
||||
/**
|
||||
* Matcher for array whose elements satisfy a sequence of matchers.
|
||||
* The array size must equal the number of element matchers.
|
||||
*/
|
||||
class IsArray extends TypeSafeMatcher
|
||||
{
|
||||
|
||||
private $_elementMatchers;
|
||||
|
||||
public function __construct(array $elementMatchers)
|
||||
{
|
||||
parent::__construct(self::TYPE_ARRAY);
|
||||
|
||||
Util::checkAllAreMatchers($elementMatchers);
|
||||
|
||||
$this->_elementMatchers = $elementMatchers;
|
||||
}
|
||||
|
||||
protected function matchesSafely($array)
|
||||
{
|
||||
if (array_keys($array) != array_keys($this->_elementMatchers)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/** @var $matcher \Hamcrest\Matcher */
|
||||
foreach ($this->_elementMatchers as $k => $matcher) {
|
||||
if (!$matcher->matches($array[$k])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function describeMismatchSafely($actual, Description $mismatchDescription)
|
||||
{
|
||||
if (count($actual) != count($this->_elementMatchers)) {
|
||||
$mismatchDescription->appendText('array length was ' . count($actual));
|
||||
|
||||
return;
|
||||
} elseif (array_keys($actual) != array_keys($this->_elementMatchers)) {
|
||||
$mismatchDescription->appendText('array keys were ')
|
||||
->appendValueList(
|
||||
$this->descriptionStart(),
|
||||
$this->descriptionSeparator(),
|
||||
$this->descriptionEnd(),
|
||||
array_keys($actual)
|
||||
)
|
||||
;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/** @var $matcher \Hamcrest\Matcher */
|
||||
foreach ($this->_elementMatchers as $k => $matcher) {
|
||||
if (!$matcher->matches($actual[$k])) {
|
||||
$mismatchDescription->appendText('element ')->appendValue($k)
|
||||
->appendText(' was ')->appendValue($actual[$k]);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendList(
|
||||
$this->descriptionStart(),
|
||||
$this->descriptionSeparator(),
|
||||
$this->descriptionEnd(),
|
||||
$this->_elementMatchers
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates to true only if each $matcher[$i] is satisfied by $array[$i].
|
||||
*
|
||||
* @factory ...
|
||||
*/
|
||||
public static function anArray(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
|
||||
return new self(Util::createMatcherArray($args));
|
||||
}
|
||||
|
||||
// -- Protected Methods
|
||||
|
||||
protected function descriptionStart()
|
||||
{
|
||||
return '[';
|
||||
}
|
||||
|
||||
protected function descriptionSeparator()
|
||||
{
|
||||
return ', ';
|
||||
}
|
||||
|
||||
protected function descriptionEnd()
|
||||
{
|
||||
return ']';
|
||||
}
|
||||
}
|
63
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContaining.php
vendored
Normal file
63
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContaining.php
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
namespace Hamcrest\Arrays;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\Matcher;
|
||||
use Hamcrest\TypeSafeMatcher;
|
||||
use Hamcrest\Util;
|
||||
|
||||
/**
|
||||
* Matches if an array contains an item satisfying a nested matcher.
|
||||
*/
|
||||
class IsArrayContaining extends TypeSafeMatcher
|
||||
{
|
||||
|
||||
private $_elementMatcher;
|
||||
|
||||
public function __construct(Matcher $elementMatcher)
|
||||
{
|
||||
parent::__construct(self::TYPE_ARRAY);
|
||||
|
||||
$this->_elementMatcher = $elementMatcher;
|
||||
}
|
||||
|
||||
protected function matchesSafely($array)
|
||||
{
|
||||
foreach ($array as $element) {
|
||||
if ($this->_elementMatcher->matches($element)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function describeMismatchSafely($array, Description $mismatchDescription)
|
||||
{
|
||||
$mismatchDescription->appendText('was ')->appendValue($array);
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description
|
||||
->appendText('an array containing ')
|
||||
->appendDescriptionOf($this->_elementMatcher)
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates to true if any item in an array satisfies the given matcher.
|
||||
*
|
||||
* @param mixed $item as a {@link Hamcrest\Matcher} or a value.
|
||||
*
|
||||
* @return \Hamcrest\Arrays\IsArrayContaining
|
||||
* @factory hasValue
|
||||
*/
|
||||
public static function hasItemInArray($item)
|
||||
{
|
||||
return new self(Util::wrapValueWithIsEqual($item));
|
||||
}
|
||||
}
|
59
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContainingInAnyOrder.php
vendored
Normal file
59
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContainingInAnyOrder.php
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
namespace Hamcrest\Arrays;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\TypeSafeDiagnosingMatcher;
|
||||
use Hamcrest\Util;
|
||||
|
||||
/**
|
||||
* Matches if an array contains a set of items satisfying nested matchers.
|
||||
*/
|
||||
class IsArrayContainingInAnyOrder extends TypeSafeDiagnosingMatcher
|
||||
{
|
||||
|
||||
private $_elementMatchers;
|
||||
|
||||
public function __construct(array $elementMatchers)
|
||||
{
|
||||
parent::__construct(self::TYPE_ARRAY);
|
||||
|
||||
Util::checkAllAreMatchers($elementMatchers);
|
||||
|
||||
$this->_elementMatchers = $elementMatchers;
|
||||
}
|
||||
|
||||
protected function matchesSafelyWithDiagnosticDescription($array, Description $mismatchDescription)
|
||||
{
|
||||
$matching = new MatchingOnce($this->_elementMatchers, $mismatchDescription);
|
||||
|
||||
foreach ($array as $element) {
|
||||
if (!$matching->matches($element)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return $matching->isFinished($array);
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendList('[', ', ', ']', $this->_elementMatchers)
|
||||
->appendText(' in any order')
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* An array with elements that match the given matchers.
|
||||
*
|
||||
* @factory containsInAnyOrder ...
|
||||
*/
|
||||
public static function arrayContainingInAnyOrder(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
|
||||
return new self(Util::createMatcherArray($args));
|
||||
}
|
||||
}
|
57
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContainingInOrder.php
vendored
Normal file
57
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContainingInOrder.php
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
namespace Hamcrest\Arrays;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\TypeSafeDiagnosingMatcher;
|
||||
use Hamcrest\Util;
|
||||
|
||||
/**
|
||||
* Matches if an array contains a set of items satisfying nested matchers.
|
||||
*/
|
||||
class IsArrayContainingInOrder extends TypeSafeDiagnosingMatcher
|
||||
{
|
||||
|
||||
private $_elementMatchers;
|
||||
|
||||
public function __construct(array $elementMatchers)
|
||||
{
|
||||
parent::__construct(self::TYPE_ARRAY);
|
||||
|
||||
Util::checkAllAreMatchers($elementMatchers);
|
||||
|
||||
$this->_elementMatchers = $elementMatchers;
|
||||
}
|
||||
|
||||
protected function matchesSafelyWithDiagnosticDescription($array, Description $mismatchDescription)
|
||||
{
|
||||
$series = new SeriesMatchingOnce($this->_elementMatchers, $mismatchDescription);
|
||||
|
||||
foreach ($array as $element) {
|
||||
if (!$series->matches($element)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return $series->isFinished();
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendList('[', ', ', ']', $this->_elementMatchers);
|
||||
}
|
||||
|
||||
/**
|
||||
* An array with elements that match the given matchers in the same order.
|
||||
*
|
||||
* @factory contains ...
|
||||
*/
|
||||
public static function arrayContaining(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
|
||||
return new self(Util::createMatcherArray($args));
|
||||
}
|
||||
}
|
75
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContainingKey.php
vendored
Normal file
75
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContainingKey.php
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
namespace Hamcrest\Arrays;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\Matcher;
|
||||
use Hamcrest\TypeSafeMatcher;
|
||||
use Hamcrest\Util;
|
||||
|
||||
/**
|
||||
* Matches if an array contains the specified key.
|
||||
*/
|
||||
class IsArrayContainingKey extends TypeSafeMatcher
|
||||
{
|
||||
|
||||
private $_keyMatcher;
|
||||
|
||||
public function __construct(Matcher $keyMatcher)
|
||||
{
|
||||
parent::__construct(self::TYPE_ARRAY);
|
||||
|
||||
$this->_keyMatcher = $keyMatcher;
|
||||
}
|
||||
|
||||
protected function matchesSafely($array)
|
||||
{
|
||||
foreach ($array as $key => $element) {
|
||||
if ($this->_keyMatcher->matches($key)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function describeMismatchSafely($array, Description $mismatchDescription)
|
||||
{
|
||||
//Not using appendValueList() so that keys can be shown
|
||||
$mismatchDescription->appendText('array was ')
|
||||
->appendText('[')
|
||||
;
|
||||
$loop = false;
|
||||
foreach ($array as $key => $value) {
|
||||
if ($loop) {
|
||||
$mismatchDescription->appendText(', ');
|
||||
}
|
||||
$mismatchDescription->appendValue($key)->appendText(' => ')->appendValue($value);
|
||||
$loop = true;
|
||||
}
|
||||
$mismatchDescription->appendText(']');
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description
|
||||
->appendText('array with key ')
|
||||
->appendDescriptionOf($this->_keyMatcher)
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates to true if any key in an array matches the given matcher.
|
||||
*
|
||||
* @param mixed $key as a {@link Hamcrest\Matcher} or a value.
|
||||
*
|
||||
* @return \Hamcrest\Arrays\IsArrayContainingKey
|
||||
* @factory hasKey
|
||||
*/
|
||||
public static function hasKeyInArray($key)
|
||||
{
|
||||
return new self(Util::wrapValueWithIsEqual($key));
|
||||
}
|
||||
}
|
80
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContainingKeyValuePair.php
vendored
Normal file
80
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContainingKeyValuePair.php
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
namespace Hamcrest\Arrays;
|
||||
|
||||
/**
|
||||
* Tests for the presence of both a key and value inside an array.
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\Matcher;
|
||||
use Hamcrest\TypeSafeMatcher;
|
||||
use Hamcrest\Util;
|
||||
|
||||
/**
|
||||
* @namespace
|
||||
*/
|
||||
|
||||
class IsArrayContainingKeyValuePair extends TypeSafeMatcher
|
||||
{
|
||||
|
||||
private $_keyMatcher;
|
||||
private $_valueMatcher;
|
||||
|
||||
public function __construct(Matcher $keyMatcher, Matcher $valueMatcher)
|
||||
{
|
||||
parent::__construct(self::TYPE_ARRAY);
|
||||
|
||||
$this->_keyMatcher = $keyMatcher;
|
||||
$this->_valueMatcher = $valueMatcher;
|
||||
}
|
||||
|
||||
protected function matchesSafely($array)
|
||||
{
|
||||
foreach ($array as $key => $value) {
|
||||
if ($this->_keyMatcher->matches($key) && $this->_valueMatcher->matches($value)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function describeMismatchSafely($array, Description $mismatchDescription)
|
||||
{
|
||||
//Not using appendValueList() so that keys can be shown
|
||||
$mismatchDescription->appendText('array was ')
|
||||
->appendText('[')
|
||||
;
|
||||
$loop = false;
|
||||
foreach ($array as $key => $value) {
|
||||
if ($loop) {
|
||||
$mismatchDescription->appendText(', ');
|
||||
}
|
||||
$mismatchDescription->appendValue($key)->appendText(' => ')->appendValue($value);
|
||||
$loop = true;
|
||||
}
|
||||
$mismatchDescription->appendText(']');
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText('array containing [')
|
||||
->appendDescriptionOf($this->_keyMatcher)
|
||||
->appendText(' => ')
|
||||
->appendDescriptionOf($this->_valueMatcher)
|
||||
->appendText(']')
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if an array has both an key and value in parity with each other.
|
||||
*
|
||||
* @factory hasEntry
|
||||
*/
|
||||
public static function hasKeyValuePair($key, $value)
|
||||
{
|
||||
return new self(
|
||||
Util::wrapValueWithIsEqual($key),
|
||||
Util::wrapValueWithIsEqual($value)
|
||||
);
|
||||
}
|
||||
}
|
73
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayWithSize.php
vendored
Normal file
73
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayWithSize.php
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
namespace Hamcrest\Arrays;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Core\DescribedAs;
|
||||
use Hamcrest\Core\IsNot;
|
||||
use Hamcrest\FeatureMatcher;
|
||||
use Hamcrest\Matcher;
|
||||
use Hamcrest\Util;
|
||||
|
||||
/**
|
||||
* Matches if array size satisfies a nested matcher.
|
||||
*/
|
||||
class IsArrayWithSize extends FeatureMatcher
|
||||
{
|
||||
|
||||
public function __construct(Matcher $sizeMatcher)
|
||||
{
|
||||
parent::__construct(
|
||||
self::TYPE_ARRAY,
|
||||
null,
|
||||
$sizeMatcher,
|
||||
'an array with size',
|
||||
'array size'
|
||||
);
|
||||
}
|
||||
|
||||
protected function featureValueOf($array)
|
||||
{
|
||||
return count($array);
|
||||
}
|
||||
|
||||
/**
|
||||
* Does array size satisfy a given matcher?
|
||||
*
|
||||
* @param \Hamcrest\Matcher|int $size as a {@link Hamcrest\Matcher} or a value.
|
||||
*
|
||||
* @return \Hamcrest\Arrays\IsArrayWithSize
|
||||
* @factory
|
||||
*/
|
||||
public static function arrayWithSize($size)
|
||||
{
|
||||
return new self(Util::wrapValueWithIsEqual($size));
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches an empty array.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function emptyArray()
|
||||
{
|
||||
return DescribedAs::describedAs(
|
||||
'an empty array',
|
||||
self::arrayWithSize(0)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches an empty array.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function nonEmptyArray()
|
||||
{
|
||||
return DescribedAs::describedAs(
|
||||
'a non-empty array',
|
||||
self::arrayWithSize(IsNot::not(0))
|
||||
);
|
||||
}
|
||||
}
|
69
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/MatchingOnce.php
vendored
Normal file
69
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/MatchingOnce.php
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
namespace Hamcrest\Arrays;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
use Hamcrest\Description;
|
||||
|
||||
class MatchingOnce
|
||||
{
|
||||
|
||||
private $_elementMatchers;
|
||||
private $_mismatchDescription;
|
||||
|
||||
public function __construct(array $elementMatchers, Description $mismatchDescription)
|
||||
{
|
||||
$this->_elementMatchers = $elementMatchers;
|
||||
$this->_mismatchDescription = $mismatchDescription;
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
return $this->_isNotSurplus($item) && $this->_isMatched($item);
|
||||
}
|
||||
|
||||
public function isFinished($items)
|
||||
{
|
||||
if (empty($this->_elementMatchers)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$this->_mismatchDescription
|
||||
->appendText('No item matches: ')->appendList('', ', ', '', $this->_elementMatchers)
|
||||
->appendText(' in ')->appendValueList('[', ', ', ']', $items)
|
||||
;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// -- Private Methods
|
||||
|
||||
private function _isNotSurplus($item)
|
||||
{
|
||||
if (empty($this->_elementMatchers)) {
|
||||
$this->_mismatchDescription->appendText('Not matched: ')->appendValue($item);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private function _isMatched($item)
|
||||
{
|
||||
/** @var $matcher \Hamcrest\Matcher */
|
||||
foreach ($this->_elementMatchers as $i => $matcher) {
|
||||
if ($matcher->matches($item)) {
|
||||
unset($this->_elementMatchers[$i]);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
$this->_mismatchDescription->appendText('Not matched: ')->appendValue($item);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
75
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/SeriesMatchingOnce.php
vendored
Normal file
75
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/SeriesMatchingOnce.php
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
namespace Hamcrest\Arrays;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\Matcher;
|
||||
|
||||
class SeriesMatchingOnce
|
||||
{
|
||||
|
||||
private $_elementMatchers;
|
||||
private $_keys;
|
||||
private $_mismatchDescription;
|
||||
private $_nextMatchKey;
|
||||
|
||||
public function __construct(array $elementMatchers, Description $mismatchDescription)
|
||||
{
|
||||
$this->_elementMatchers = $elementMatchers;
|
||||
$this->_keys = array_keys($elementMatchers);
|
||||
$this->_mismatchDescription = $mismatchDescription;
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
return $this->_isNotSurplus($item) && $this->_isMatched($item);
|
||||
}
|
||||
|
||||
public function isFinished()
|
||||
{
|
||||
if (!empty($this->_elementMatchers)) {
|
||||
$nextMatcher = current($this->_elementMatchers);
|
||||
$this->_mismatchDescription->appendText('No item matched: ')->appendDescriptionOf($nextMatcher);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// -- Private Methods
|
||||
|
||||
private function _isNotSurplus($item)
|
||||
{
|
||||
if (empty($this->_elementMatchers)) {
|
||||
$this->_mismatchDescription->appendText('Not matched: ')->appendValue($item);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private function _isMatched($item)
|
||||
{
|
||||
$this->_nextMatchKey = array_shift($this->_keys);
|
||||
$nextMatcher = array_shift($this->_elementMatchers);
|
||||
|
||||
if (!$nextMatcher->matches($item)) {
|
||||
$this->_describeMismatch($nextMatcher, $item);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private function _describeMismatch(Matcher $matcher, $item)
|
||||
{
|
||||
$this->_mismatchDescription->appendText('item with key ' . $this->_nextMatchKey . ': ');
|
||||
$matcher->describeMismatch($item, $this->_mismatchDescription);
|
||||
}
|
||||
}
|
10
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/AssertionError.php
vendored
Normal file
10
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/AssertionError.php
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
class AssertionError extends \RuntimeException
|
||||
{
|
||||
}
|
132
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/BaseDescription.php
vendored
Normal file
132
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/BaseDescription.php
vendored
Normal file
@@ -0,0 +1,132 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Internal\SelfDescribingValue;
|
||||
|
||||
/**
|
||||
* A {@link Hamcrest\Description} that is stored as a string.
|
||||
*/
|
||||
abstract class BaseDescription implements Description
|
||||
{
|
||||
|
||||
public function appendText($text)
|
||||
{
|
||||
$this->append($text);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function appendDescriptionOf(SelfDescribing $value)
|
||||
{
|
||||
$value->describeTo($this);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function appendValue($value)
|
||||
{
|
||||
if (is_null($value)) {
|
||||
$this->append('null');
|
||||
} elseif (is_string($value)) {
|
||||
$this->_toPhpSyntax($value);
|
||||
} elseif (is_float($value)) {
|
||||
$this->append('<');
|
||||
$this->append($value);
|
||||
$this->append('F>');
|
||||
} elseif (is_bool($value)) {
|
||||
$this->append('<');
|
||||
$this->append($value ? 'true' : 'false');
|
||||
$this->append('>');
|
||||
} elseif (is_array($value) || $value instanceof \Iterator || $value instanceof \IteratorAggregate) {
|
||||
$this->appendValueList('[', ', ', ']', $value);
|
||||
} elseif (is_object($value) && !method_exists($value, '__toString')) {
|
||||
$this->append('<');
|
||||
$this->append(get_class($value));
|
||||
$this->append('>');
|
||||
} else {
|
||||
$this->append('<');
|
||||
$this->append($value);
|
||||
$this->append('>');
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function appendValueList($start, $separator, $end, $values)
|
||||
{
|
||||
$list = array();
|
||||
foreach ($values as $v) {
|
||||
$list[] = new SelfDescribingValue($v);
|
||||
}
|
||||
|
||||
$this->appendList($start, $separator, $end, $list);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function appendList($start, $separator, $end, $values)
|
||||
{
|
||||
$this->append($start);
|
||||
|
||||
$separate = false;
|
||||
|
||||
foreach ($values as $value) {
|
||||
/*if (!($value instanceof Hamcrest\SelfDescribing)) {
|
||||
$value = new Hamcrest\Internal\SelfDescribingValue($value);
|
||||
}*/
|
||||
|
||||
if ($separate) {
|
||||
$this->append($separator);
|
||||
}
|
||||
|
||||
$this->appendDescriptionOf($value);
|
||||
|
||||
$separate = true;
|
||||
}
|
||||
|
||||
$this->append($end);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
// -- Protected Methods
|
||||
|
||||
/**
|
||||
* Append the String <var>$str</var> to the description.
|
||||
*/
|
||||
abstract protected function append($str);
|
||||
|
||||
// -- Private Methods
|
||||
|
||||
private function _toPhpSyntax($value)
|
||||
{
|
||||
$str = '"';
|
||||
for ($i = 0, $len = strlen($value); $i < $len; ++$i) {
|
||||
switch ($value[$i]) {
|
||||
case '"':
|
||||
$str .= '\\"';
|
||||
break;
|
||||
|
||||
case "\t":
|
||||
$str .= '\\t';
|
||||
break;
|
||||
|
||||
case "\r":
|
||||
$str .= '\\r';
|
||||
break;
|
||||
|
||||
case "\n":
|
||||
$str .= '\\n';
|
||||
break;
|
||||
|
||||
default:
|
||||
$str .= $value[$i];
|
||||
}
|
||||
}
|
||||
$str .= '"';
|
||||
$this->append($str);
|
||||
}
|
||||
}
|
30
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/BaseMatcher.php
vendored
Normal file
30
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/BaseMatcher.php
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* BaseClass for all Matcher implementations.
|
||||
*
|
||||
* @see Hamcrest\Matcher
|
||||
*/
|
||||
abstract class BaseMatcher implements Matcher
|
||||
{
|
||||
|
||||
public function describeMismatch($item, Description $description)
|
||||
{
|
||||
$description->appendText('was ')->appendValue($item);
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return StringDescription::toString($this);
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return call_user_func_array(array($this, 'matches'), func_get_args());
|
||||
}
|
||||
}
|
71
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Collection/IsEmptyTraversable.php
vendored
Normal file
71
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Collection/IsEmptyTraversable.php
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
namespace Hamcrest\Collection;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\BaseMatcher;
|
||||
use Hamcrest\Description;
|
||||
|
||||
/**
|
||||
* Matches if traversable is empty or non-empty.
|
||||
*/
|
||||
class IsEmptyTraversable extends BaseMatcher
|
||||
{
|
||||
|
||||
private static $_INSTANCE;
|
||||
private static $_NOT_INSTANCE;
|
||||
|
||||
private $_empty;
|
||||
|
||||
public function __construct($empty = true)
|
||||
{
|
||||
$this->_empty = $empty;
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
if (!$item instanceof \Traversable) {
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ($item as $value) {
|
||||
return !$this->_empty;
|
||||
}
|
||||
|
||||
return $this->_empty;
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText($this->_empty ? 'an empty traversable' : 'a non-empty traversable');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if traversable is empty.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function emptyTraversable()
|
||||
{
|
||||
if (!self::$_INSTANCE) {
|
||||
self::$_INSTANCE = new self;
|
||||
}
|
||||
|
||||
return self::$_INSTANCE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if traversable is not empty.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function nonEmptyTraversable()
|
||||
{
|
||||
if (!self::$_NOT_INSTANCE) {
|
||||
self::$_NOT_INSTANCE = new self(false);
|
||||
}
|
||||
|
||||
return self::$_NOT_INSTANCE;
|
||||
}
|
||||
}
|
47
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Collection/IsTraversableWithSize.php
vendored
Normal file
47
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Collection/IsTraversableWithSize.php
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
namespace Hamcrest\Collection;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\FeatureMatcher;
|
||||
use Hamcrest\Matcher;
|
||||
use Hamcrest\Util;
|
||||
|
||||
/**
|
||||
* Matches if traversable size satisfies a nested matcher.
|
||||
*/
|
||||
class IsTraversableWithSize extends FeatureMatcher
|
||||
{
|
||||
|
||||
public function __construct(Matcher $sizeMatcher)
|
||||
{
|
||||
parent::__construct(
|
||||
self::TYPE_OBJECT,
|
||||
'Traversable',
|
||||
$sizeMatcher,
|
||||
'a traversable with size',
|
||||
'traversable size'
|
||||
);
|
||||
}
|
||||
|
||||
protected function featureValueOf($actual)
|
||||
{
|
||||
$size = 0;
|
||||
foreach ($actual as $value) {
|
||||
$size++;
|
||||
}
|
||||
|
||||
return $size;
|
||||
}
|
||||
|
||||
/**
|
||||
* Does traversable size satisfy a given matcher?
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function traversableWithSize($size)
|
||||
{
|
||||
return new self(Util::wrapValueWithIsEqual($size));
|
||||
}
|
||||
}
|
59
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/AllOf.php
vendored
Normal file
59
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/AllOf.php
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\DiagnosingMatcher;
|
||||
use Hamcrest\Util;
|
||||
|
||||
/**
|
||||
* Calculates the logical conjunction of multiple matchers. Evaluation is
|
||||
* shortcut, so subsequent matchers are not called if an earlier matcher
|
||||
* returns <code>false</code>.
|
||||
*/
|
||||
class AllOf extends DiagnosingMatcher
|
||||
{
|
||||
|
||||
private $_matchers;
|
||||
|
||||
public function __construct(array $matchers)
|
||||
{
|
||||
Util::checkAllAreMatchers($matchers);
|
||||
|
||||
$this->_matchers = $matchers;
|
||||
}
|
||||
|
||||
public function matchesWithDiagnosticDescription($item, Description $mismatchDescription)
|
||||
{
|
||||
/** @var $matcher \Hamcrest\Matcher */
|
||||
foreach ($this->_matchers as $matcher) {
|
||||
if (!$matcher->matches($item)) {
|
||||
$mismatchDescription->appendDescriptionOf($matcher)->appendText(' ');
|
||||
$matcher->describeMismatch($item, $mismatchDescription);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendList('(', ' and ', ')', $this->_matchers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates to true only if ALL of the passed in matchers evaluate to true.
|
||||
*
|
||||
* @factory ...
|
||||
*/
|
||||
public static function allOf(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
|
||||
return new self(Util::createMatcherArray($args));
|
||||
}
|
||||
}
|
58
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/AnyOf.php
vendored
Normal file
58
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/AnyOf.php
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\Util;
|
||||
|
||||
/**
|
||||
* Calculates the logical disjunction of multiple matchers. Evaluation is
|
||||
* shortcut, so subsequent matchers are not called if an earlier matcher
|
||||
* returns <code>true</code>.
|
||||
*/
|
||||
class AnyOf extends ShortcutCombination
|
||||
{
|
||||
|
||||
public function __construct(array $matchers)
|
||||
{
|
||||
parent::__construct($matchers);
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
return $this->matchesWithShortcut($item, true);
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$this->describeToWithOperator($description, 'or');
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates to true if ANY of the passed in matchers evaluate to true.
|
||||
*
|
||||
* @factory ...
|
||||
*/
|
||||
public static function anyOf(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
|
||||
return new self(Util::createMatcherArray($args));
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates to false if ANY of the passed in matchers evaluate to true.
|
||||
*
|
||||
* @factory ...
|
||||
*/
|
||||
public static function noneOf(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
|
||||
return IsNot::not(
|
||||
new self(Util::createMatcherArray($args))
|
||||
);
|
||||
}
|
||||
}
|
78
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/CombinableMatcher.php
vendored
Normal file
78
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/CombinableMatcher.php
vendored
Normal file
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
use Hamcrest\BaseMatcher;
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\Matcher;
|
||||
|
||||
class CombinableMatcher extends BaseMatcher
|
||||
{
|
||||
|
||||
private $_matcher;
|
||||
|
||||
public function __construct(Matcher $matcher)
|
||||
{
|
||||
$this->_matcher = $matcher;
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
return $this->_matcher->matches($item);
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendDescriptionOf($this->_matcher);
|
||||
}
|
||||
|
||||
/** Diversion from Hamcrest-Java... Logical "and" not permitted */
|
||||
public function andAlso(Matcher $other)
|
||||
{
|
||||
return new self(new AllOf($this->_templatedListWith($other)));
|
||||
}
|
||||
|
||||
/** Diversion from Hamcrest-Java... Logical "or" not permitted */
|
||||
public function orElse(Matcher $other)
|
||||
{
|
||||
return new self(new AnyOf($this->_templatedListWith($other)));
|
||||
}
|
||||
|
||||
/**
|
||||
* This is useful for fluently combining matchers that must both pass.
|
||||
* For example:
|
||||
* <pre>
|
||||
* assertThat($string, both(containsString("a"))->andAlso(containsString("b")));
|
||||
* </pre>
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function both(Matcher $matcher)
|
||||
{
|
||||
return new self($matcher);
|
||||
}
|
||||
|
||||
/**
|
||||
* This is useful for fluently combining matchers where either may pass,
|
||||
* for example:
|
||||
* <pre>
|
||||
* assertThat($string, either(containsString("a"))->orElse(containsString("b")));
|
||||
* </pre>
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function either(Matcher $matcher)
|
||||
{
|
||||
return new self($matcher);
|
||||
}
|
||||
|
||||
// -- Private Methods
|
||||
|
||||
private function _templatedListWith(Matcher $other)
|
||||
{
|
||||
return array($this->_matcher, $other);
|
||||
}
|
||||
}
|
68
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/DescribedAs.php
vendored
Normal file
68
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/DescribedAs.php
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\BaseMatcher;
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\Matcher;
|
||||
|
||||
/**
|
||||
* Provides a custom description to another matcher.
|
||||
*/
|
||||
class DescribedAs extends BaseMatcher
|
||||
{
|
||||
|
||||
private $_descriptionTemplate;
|
||||
private $_matcher;
|
||||
private $_values;
|
||||
|
||||
const ARG_PATTERN = '/%([0-9]+)/';
|
||||
|
||||
public function __construct($descriptionTemplate, Matcher $matcher, array $values)
|
||||
{
|
||||
$this->_descriptionTemplate = $descriptionTemplate;
|
||||
$this->_matcher = $matcher;
|
||||
$this->_values = $values;
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
return $this->_matcher->matches($item);
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$textStart = 0;
|
||||
while (preg_match(self::ARG_PATTERN, $this->_descriptionTemplate, $matches, PREG_OFFSET_CAPTURE, $textStart)) {
|
||||
$text = $matches[0][0];
|
||||
$index = $matches[1][0];
|
||||
$offset = $matches[0][1];
|
||||
|
||||
$description->appendText(substr($this->_descriptionTemplate, $textStart, $offset - $textStart));
|
||||
$description->appendValue($this->_values[$index]);
|
||||
|
||||
$textStart = $offset + strlen($text);
|
||||
}
|
||||
|
||||
if ($textStart < strlen($this->_descriptionTemplate)) {
|
||||
$description->appendText(substr($this->_descriptionTemplate, $textStart));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps an existing matcher and overrides the description when it fails.
|
||||
*
|
||||
* @factory ...
|
||||
*/
|
||||
public static function describedAs(/* $description, Hamcrest\Matcher $matcher, $values... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
$description = array_shift($args);
|
||||
$matcher = array_shift($args);
|
||||
$values = $args;
|
||||
|
||||
return new self($description, $matcher, $values);
|
||||
}
|
||||
}
|
56
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/Every.php
vendored
Normal file
56
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/Every.php
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\Matcher;
|
||||
use Hamcrest\TypeSafeDiagnosingMatcher;
|
||||
|
||||
class Every extends TypeSafeDiagnosingMatcher
|
||||
{
|
||||
|
||||
private $_matcher;
|
||||
|
||||
public function __construct(Matcher $matcher)
|
||||
{
|
||||
parent::__construct(self::TYPE_ARRAY);
|
||||
|
||||
$this->_matcher = $matcher;
|
||||
}
|
||||
|
||||
protected function matchesSafelyWithDiagnosticDescription($items, Description $mismatchDescription)
|
||||
{
|
||||
foreach ($items as $item) {
|
||||
if (!$this->_matcher->matches($item)) {
|
||||
$mismatchDescription->appendText('an item ');
|
||||
$this->_matcher->describeMismatch($item, $mismatchDescription);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText('every item is ')->appendDescriptionOf($this->_matcher);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Matcher $itemMatcher
|
||||
* A matcher to apply to every element in an array.
|
||||
*
|
||||
* @return \Hamcrest\Core\Every
|
||||
* Evaluates to TRUE for a collection in which every item matches $itemMatcher
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function everyItem(Matcher $itemMatcher)
|
||||
{
|
||||
return new self($itemMatcher);
|
||||
}
|
||||
}
|
56
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/HasToString.php
vendored
Normal file
56
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/HasToString.php
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\FeatureMatcher;
|
||||
use Hamcrest\Matcher;
|
||||
use Hamcrest\Util;
|
||||
|
||||
/**
|
||||
* Matches if array size satisfies a nested matcher.
|
||||
*/
|
||||
class HasToString extends FeatureMatcher
|
||||
{
|
||||
|
||||
public function __construct(Matcher $toStringMatcher)
|
||||
{
|
||||
parent::__construct(
|
||||
self::TYPE_OBJECT,
|
||||
null,
|
||||
$toStringMatcher,
|
||||
'an object with toString()',
|
||||
'toString()'
|
||||
);
|
||||
}
|
||||
|
||||
public function matchesSafelyWithDiagnosticDescription($actual, Description $mismatchDescription)
|
||||
{
|
||||
if (method_exists($actual, 'toString') || method_exists($actual, '__toString')) {
|
||||
return parent::matchesSafelyWithDiagnosticDescription($actual, $mismatchDescription);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function featureValueOf($actual)
|
||||
{
|
||||
if (method_exists($actual, 'toString')) {
|
||||
return $actual->toString();
|
||||
}
|
||||
|
||||
return (string) $actual;
|
||||
}
|
||||
|
||||
/**
|
||||
* Does array size satisfy a given matcher?
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function hasToString($matcher)
|
||||
{
|
||||
return new self(Util::wrapValueWithIsEqual($matcher));
|
||||
}
|
||||
}
|
57
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/Is.php
vendored
Normal file
57
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/Is.php
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\BaseMatcher;
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\Matcher;
|
||||
use Hamcrest\Util;
|
||||
|
||||
/**
|
||||
* Decorates another Matcher, retaining the behavior but allowing tests
|
||||
* to be slightly more expressive.
|
||||
*
|
||||
* For example: assertThat($cheese, equalTo($smelly))
|
||||
* vs. assertThat($cheese, is(equalTo($smelly)))
|
||||
*/
|
||||
class Is extends BaseMatcher
|
||||
{
|
||||
|
||||
private $_matcher;
|
||||
|
||||
public function __construct(Matcher $matcher)
|
||||
{
|
||||
$this->_matcher = $matcher;
|
||||
}
|
||||
|
||||
public function matches($arg)
|
||||
{
|
||||
return $this->_matcher->matches($arg);
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText('is ')->appendDescriptionOf($this->_matcher);
|
||||
}
|
||||
|
||||
public function describeMismatch($item, Description $mismatchDescription)
|
||||
{
|
||||
$this->_matcher->describeMismatch($item, $mismatchDescription);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decorates another Matcher, retaining the behavior but allowing tests
|
||||
* to be slightly more expressive.
|
||||
*
|
||||
* For example: assertThat($cheese, equalTo($smelly))
|
||||
* vs. assertThat($cheese, is(equalTo($smelly)))
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function is($value)
|
||||
{
|
||||
return new self(Util::wrapValueWithIsEqual($value));
|
||||
}
|
||||
}
|
45
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsAnything.php
vendored
Normal file
45
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsAnything.php
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\BaseMatcher;
|
||||
use Hamcrest\Description;
|
||||
|
||||
/**
|
||||
* A matcher that always returns <code>true</code>.
|
||||
*/
|
||||
class IsAnything extends BaseMatcher
|
||||
{
|
||||
|
||||
private $_message;
|
||||
|
||||
public function __construct($message = 'ANYTHING')
|
||||
{
|
||||
$this->_message = $message;
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText($this->_message);
|
||||
}
|
||||
|
||||
/**
|
||||
* This matcher always evaluates to true.
|
||||
*
|
||||
* @param string $description A meaningful string used when describing itself.
|
||||
*
|
||||
* @return \Hamcrest\Core\IsAnything
|
||||
* @factory
|
||||
*/
|
||||
public static function anything($description = 'ANYTHING')
|
||||
{
|
||||
return new self($description);
|
||||
}
|
||||
}
|
93
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsCollectionContaining.php
vendored
Normal file
93
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsCollectionContaining.php
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\Matcher;
|
||||
use Hamcrest\TypeSafeMatcher;
|
||||
use Hamcrest\Util;
|
||||
|
||||
/**
|
||||
* Tests if an array contains values that match one or more Matchers.
|
||||
*/
|
||||
class IsCollectionContaining extends TypeSafeMatcher
|
||||
{
|
||||
|
||||
private $_elementMatcher;
|
||||
|
||||
public function __construct(Matcher $elementMatcher)
|
||||
{
|
||||
parent::__construct(self::TYPE_ARRAY);
|
||||
|
||||
$this->_elementMatcher = $elementMatcher;
|
||||
}
|
||||
|
||||
protected function matchesSafely($items)
|
||||
{
|
||||
foreach ($items as $item) {
|
||||
if ($this->_elementMatcher->matches($item)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function describeMismatchSafely($items, Description $mismatchDescription)
|
||||
{
|
||||
$mismatchDescription->appendText('was ')->appendValue($items);
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description
|
||||
->appendText('a collection containing ')
|
||||
->appendDescriptionOf($this->_elementMatcher)
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the value is an array containing this matcher.
|
||||
*
|
||||
* Example:
|
||||
* <pre>
|
||||
* assertThat(array('a', 'b'), hasItem(equalTo('b')));
|
||||
* //Convenience defaults to equalTo()
|
||||
* assertThat(array('a', 'b'), hasItem('b'));
|
||||
* </pre>
|
||||
*
|
||||
* @factory ...
|
||||
*/
|
||||
public static function hasItem()
|
||||
{
|
||||
$args = func_get_args();
|
||||
$firstArg = array_shift($args);
|
||||
|
||||
return new self(Util::wrapValueWithIsEqual($firstArg));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the value is an array containing elements that match all of these
|
||||
* matchers.
|
||||
*
|
||||
* Example:
|
||||
* <pre>
|
||||
* assertThat(array('a', 'b', 'c'), hasItems(equalTo('a'), equalTo('b')));
|
||||
* </pre>
|
||||
*
|
||||
* @factory ...
|
||||
*/
|
||||
public static function hasItems(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
$matchers = array();
|
||||
|
||||
foreach ($args as $arg) {
|
||||
$matchers[] = self::hasItem($arg);
|
||||
}
|
||||
|
||||
return AllOf::allOf($matchers);
|
||||
}
|
||||
}
|
44
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsEqual.php
vendored
Normal file
44
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsEqual.php
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\BaseMatcher;
|
||||
use Hamcrest\Description;
|
||||
|
||||
/**
|
||||
* Is the value equal to another value, as tested by the use of the "=="
|
||||
* comparison operator?
|
||||
*/
|
||||
class IsEqual extends BaseMatcher
|
||||
{
|
||||
|
||||
private $_item;
|
||||
|
||||
public function __construct($item)
|
||||
{
|
||||
$this->_item = $item;
|
||||
}
|
||||
|
||||
public function matches($arg)
|
||||
{
|
||||
return (($arg == $this->_item) && ($this->_item == $arg));
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendValue($this->_item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value equal to another value, as tested by the use of the "=="
|
||||
* comparison operator?
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function equalTo($item)
|
||||
{
|
||||
return new self($item);
|
||||
}
|
||||
}
|
38
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsIdentical.php
vendored
Normal file
38
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsIdentical.php
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
|
||||
/**
|
||||
* The same as {@link Hamcrest\Core\IsSame} but with slightly different
|
||||
* semantics.
|
||||
*/
|
||||
class IsIdentical extends IsSame
|
||||
{
|
||||
|
||||
private $_value;
|
||||
|
||||
public function __construct($value)
|
||||
{
|
||||
parent::__construct($value);
|
||||
$this->_value = $value;
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendValue($this->_value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests of the value is identical to $value as tested by the "===" operator.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function identicalTo($value)
|
||||
{
|
||||
return new self($value);
|
||||
}
|
||||
}
|
67
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsInstanceOf.php
vendored
Normal file
67
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsInstanceOf.php
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\DiagnosingMatcher;
|
||||
|
||||
/**
|
||||
* Tests whether the value is an instance of a class.
|
||||
*/
|
||||
class IsInstanceOf extends DiagnosingMatcher
|
||||
{
|
||||
|
||||
private $_theClass;
|
||||
|
||||
/**
|
||||
* Creates a new instance of IsInstanceOf
|
||||
*
|
||||
* @param string $theClass
|
||||
* The predicate evaluates to true for instances of this class
|
||||
* or one of its subclasses.
|
||||
*/
|
||||
public function __construct($theClass)
|
||||
{
|
||||
$this->_theClass = $theClass;
|
||||
}
|
||||
|
||||
protected function matchesWithDiagnosticDescription($item, Description $mismatchDescription)
|
||||
{
|
||||
if (!is_object($item)) {
|
||||
$mismatchDescription->appendText('was ')->appendValue($item);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!($item instanceof $this->_theClass)) {
|
||||
$mismatchDescription->appendText('[' . get_class($item) . '] ')
|
||||
->appendValue($item);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText('an instance of ')
|
||||
->appendText($this->_theClass)
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value an instance of a particular type?
|
||||
* This version assumes no relationship between the required type and
|
||||
* the signature of the method that sets it up, for example in
|
||||
* <code>assertThat($anObject, anInstanceOf('Thing'));</code>
|
||||
*
|
||||
* @factory any
|
||||
*/
|
||||
public static function anInstanceOf($theClass)
|
||||
{
|
||||
return new self($theClass);
|
||||
}
|
||||
}
|
44
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsNot.php
vendored
Normal file
44
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsNot.php
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\BaseMatcher;
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\Matcher;
|
||||
use Hamcrest\Util;
|
||||
|
||||
/**
|
||||
* Calculates the logical negation of a matcher.
|
||||
*/
|
||||
class IsNot extends BaseMatcher
|
||||
{
|
||||
|
||||
private $_matcher;
|
||||
|
||||
public function __construct(Matcher $matcher)
|
||||
{
|
||||
$this->_matcher = $matcher;
|
||||
}
|
||||
|
||||
public function matches($arg)
|
||||
{
|
||||
return !$this->_matcher->matches($arg);
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText('not ')->appendDescriptionOf($this->_matcher);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value does not match $value.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function not($value)
|
||||
{
|
||||
return new self(Util::wrapValueWithIsEqual($value));
|
||||
}
|
||||
}
|
56
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsNull.php
vendored
Normal file
56
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsNull.php
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\BaseMatcher;
|
||||
use Hamcrest\Description;
|
||||
|
||||
/**
|
||||
* Is the value null?
|
||||
*/
|
||||
class IsNull extends BaseMatcher
|
||||
{
|
||||
|
||||
private static $_INSTANCE;
|
||||
private static $_NOT_INSTANCE;
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
return is_null($item);
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText('null');
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is null.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function nullValue()
|
||||
{
|
||||
if (!self::$_INSTANCE) {
|
||||
self::$_INSTANCE = new self();
|
||||
}
|
||||
|
||||
return self::$_INSTANCE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is not null.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function notNullValue()
|
||||
{
|
||||
if (!self::$_NOT_INSTANCE) {
|
||||
self::$_NOT_INSTANCE = IsNot::not(self::nullValue());
|
||||
}
|
||||
|
||||
return self::$_NOT_INSTANCE;
|
||||
}
|
||||
}
|
51
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsSame.php
vendored
Normal file
51
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsSame.php
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\BaseMatcher;
|
||||
use Hamcrest\Description;
|
||||
|
||||
/**
|
||||
* Is the value the same object as another value?
|
||||
* In PHP terms, does $a === $b?
|
||||
*/
|
||||
class IsSame extends BaseMatcher
|
||||
{
|
||||
|
||||
private $_object;
|
||||
|
||||
public function __construct($object)
|
||||
{
|
||||
$this->_object = $object;
|
||||
}
|
||||
|
||||
public function matches($object)
|
||||
{
|
||||
return ($object === $this->_object) && ($this->_object === $object);
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText('sameInstance(')
|
||||
->appendValue($this->_object)
|
||||
->appendText(')')
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of IsSame.
|
||||
*
|
||||
* @param mixed $object
|
||||
* The predicate evaluates to true only when the argument is
|
||||
* this object.
|
||||
*
|
||||
* @return \Hamcrest\Core\IsSame
|
||||
* @factory
|
||||
*/
|
||||
public static function sameInstance($object)
|
||||
{
|
||||
return new self($object);
|
||||
}
|
||||
}
|
71
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsTypeOf.php
vendored
Normal file
71
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/IsTypeOf.php
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2010 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\BaseMatcher;
|
||||
use Hamcrest\Description;
|
||||
|
||||
/**
|
||||
* Tests whether the value has a built-in type.
|
||||
*/
|
||||
class IsTypeOf extends BaseMatcher
|
||||
{
|
||||
|
||||
private $_theType;
|
||||
|
||||
/**
|
||||
* Creates a new instance of IsTypeOf
|
||||
*
|
||||
* @param string $theType
|
||||
* The predicate evaluates to true for values with this built-in type.
|
||||
*/
|
||||
public function __construct($theType)
|
||||
{
|
||||
$this->_theType = strtolower($theType);
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
return strtolower(gettype($item)) == $this->_theType;
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText(self::getTypeDescription($this->_theType));
|
||||
}
|
||||
|
||||
public function describeMismatch($item, Description $description)
|
||||
{
|
||||
if ($item === null) {
|
||||
$description->appendText('was null');
|
||||
} else {
|
||||
$description->appendText('was ')
|
||||
->appendText(self::getTypeDescription(strtolower(gettype($item))))
|
||||
->appendText(' ')
|
||||
->appendValue($item)
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
public static function getTypeDescription($type)
|
||||
{
|
||||
if ($type == 'null') {
|
||||
return 'null';
|
||||
}
|
||||
|
||||
return (strpos('aeiou', substr($type, 0, 1)) === false ? 'a ' : 'an ')
|
||||
. $type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a particular built-in type?
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function typeOf($theType)
|
||||
{
|
||||
return new self($theType);
|
||||
}
|
||||
}
|
95
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/Set.php
vendored
Normal file
95
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/Set.php
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2010 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\BaseMatcher;
|
||||
use Hamcrest\Description;
|
||||
|
||||
/**
|
||||
* Tests if a value (class, object, or array) has a named property.
|
||||
*
|
||||
* For example:
|
||||
* <pre>
|
||||
* assertThat(array('a', 'b'), set('b'));
|
||||
* assertThat($foo, set('bar'));
|
||||
* assertThat('Server', notSet('defaultPort'));
|
||||
* </pre>
|
||||
*
|
||||
* @todo Replace $property with a matcher and iterate all property names.
|
||||
*/
|
||||
class Set extends BaseMatcher
|
||||
{
|
||||
|
||||
private $_property;
|
||||
private $_not;
|
||||
|
||||
public function __construct($property, $not = false)
|
||||
{
|
||||
$this->_property = $property;
|
||||
$this->_not = $not;
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
if ($item === null) {
|
||||
return false;
|
||||
}
|
||||
$property = $this->_property;
|
||||
if (is_array($item)) {
|
||||
$result = isset($item[$property]);
|
||||
} elseif (is_object($item)) {
|
||||
$result = isset($item->$property);
|
||||
} elseif (is_string($item)) {
|
||||
$result = isset($item::$$property);
|
||||
} else {
|
||||
throw new \InvalidArgumentException('Must pass an object, array, or class name');
|
||||
}
|
||||
|
||||
return $this->_not ? !$result : $result;
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText($this->_not ? 'unset property ' : 'set property ')->appendText($this->_property);
|
||||
}
|
||||
|
||||
public function describeMismatch($item, Description $description)
|
||||
{
|
||||
$value = '';
|
||||
if (!$this->_not) {
|
||||
$description->appendText('was not set');
|
||||
} else {
|
||||
$property = $this->_property;
|
||||
if (is_array($item)) {
|
||||
$value = $item[$property];
|
||||
} elseif (is_object($item)) {
|
||||
$value = $item->$property;
|
||||
} elseif (is_string($item)) {
|
||||
$value = $item::$$property;
|
||||
}
|
||||
parent::describeMismatch($value, $description);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value (class, object, or array) has named $property.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function set($property)
|
||||
{
|
||||
return new self($property);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value (class, object, or array) does not have named $property.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function notSet($property)
|
||||
{
|
||||
return new self($property, true);
|
||||
}
|
||||
}
|
43
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/ShortcutCombination.php
vendored
Normal file
43
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Core/ShortcutCombination.php
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
namespace Hamcrest\Core;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
use Hamcrest\BaseMatcher;
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\Util;
|
||||
|
||||
abstract class ShortcutCombination extends BaseMatcher
|
||||
{
|
||||
|
||||
/**
|
||||
* @var array<\Hamcrest\Matcher>
|
||||
*/
|
||||
private $_matchers;
|
||||
|
||||
public function __construct(array $matchers)
|
||||
{
|
||||
Util::checkAllAreMatchers($matchers);
|
||||
|
||||
$this->_matchers = $matchers;
|
||||
}
|
||||
|
||||
protected function matchesWithShortcut($item, $shortcut)
|
||||
{
|
||||
/** @var $matcher \Hamcrest\Matcher */
|
||||
foreach ($this->_matchers as $matcher) {
|
||||
if ($matcher->matches($item) == $shortcut) {
|
||||
return $shortcut;
|
||||
}
|
||||
}
|
||||
|
||||
return !$shortcut;
|
||||
}
|
||||
|
||||
public function describeToWithOperator(Description $description, $operator)
|
||||
{
|
||||
$description->appendList('(', ' ' . $operator . ' ', ')', $this->_matchers);
|
||||
}
|
||||
}
|
70
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Description.php
vendored
Normal file
70
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Description.php
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* A description of a Matcher. A Matcher will describe itself to a description
|
||||
* which can later be used for reporting.
|
||||
*
|
||||
* @see Hamcrest\Matcher::describeTo()
|
||||
*/
|
||||
interface Description
|
||||
{
|
||||
|
||||
/**
|
||||
* Appends some plain text to the description.
|
||||
*
|
||||
* @param string $text
|
||||
*
|
||||
* @return \Hamcrest\Description
|
||||
*/
|
||||
public function appendText($text);
|
||||
|
||||
/**
|
||||
* Appends the description of a {@link Hamcrest\SelfDescribing} value to
|
||||
* this description.
|
||||
*
|
||||
* @param \Hamcrest\SelfDescribing $value
|
||||
*
|
||||
* @return \Hamcrest\Description
|
||||
*/
|
||||
public function appendDescriptionOf(SelfDescribing $value);
|
||||
|
||||
/**
|
||||
* Appends an arbitary value to the description.
|
||||
*
|
||||
* @param mixed $value
|
||||
*
|
||||
* @return \Hamcrest\Description
|
||||
*/
|
||||
public function appendValue($value);
|
||||
|
||||
/**
|
||||
* Appends a list of values to the description.
|
||||
*
|
||||
* @param string $start
|
||||
* @param string $separator
|
||||
* @param string $end
|
||||
* @param array|\IteratorAggregate|\Iterator $values
|
||||
*
|
||||
* @return \Hamcrest\Description
|
||||
*/
|
||||
public function appendValueList($start, $separator, $end, $values);
|
||||
|
||||
/**
|
||||
* Appends a list of {@link Hamcrest\SelfDescribing} objects to the
|
||||
* description.
|
||||
*
|
||||
* @param string $start
|
||||
* @param string $separator
|
||||
* @param string $end
|
||||
* @param array|\\IteratorAggregate|\\Iterator $values
|
||||
* must be instances of {@link Hamcrest\SelfDescribing}
|
||||
*
|
||||
* @return \Hamcrest\Description
|
||||
*/
|
||||
public function appendList($start, $separator, $end, $values);
|
||||
}
|
25
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/DiagnosingMatcher.php
vendored
Normal file
25
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/DiagnosingMatcher.php
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* Official documentation for this class is missing.
|
||||
*/
|
||||
abstract class DiagnosingMatcher extends BaseMatcher
|
||||
{
|
||||
|
||||
final public function matches($item)
|
||||
{
|
||||
return $this->matchesWithDiagnosticDescription($item, new NullDescription());
|
||||
}
|
||||
|
||||
public function describeMismatch($item, Description $mismatchDescription)
|
||||
{
|
||||
$this->matchesWithDiagnosticDescription($item, $mismatchDescription);
|
||||
}
|
||||
|
||||
abstract protected function matchesWithDiagnosticDescription($item, Description $mismatchDescription);
|
||||
}
|
67
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/FeatureMatcher.php
vendored
Normal file
67
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/FeatureMatcher.php
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* Supporting class for matching a feature of an object. Implement
|
||||
* <code>featureValueOf()</code> in a subclass to pull out the feature to be
|
||||
* matched against.
|
||||
*/
|
||||
abstract class FeatureMatcher extends TypeSafeDiagnosingMatcher
|
||||
{
|
||||
|
||||
private $_subMatcher;
|
||||
private $_featureDescription;
|
||||
private $_featureName;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param string $type
|
||||
* @param string $subtype
|
||||
* @param \Hamcrest\Matcher $subMatcher The matcher to apply to the feature
|
||||
* @param string $featureDescription Descriptive text to use in describeTo
|
||||
* @param string $featureName Identifying text for mismatch message
|
||||
*/
|
||||
public function __construct($type, $subtype, Matcher $subMatcher, $featureDescription, $featureName)
|
||||
{
|
||||
parent::__construct($type, $subtype);
|
||||
|
||||
$this->_subMatcher = $subMatcher;
|
||||
$this->_featureDescription = $featureDescription;
|
||||
$this->_featureName = $featureName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement this to extract the interesting feature.
|
||||
*
|
||||
* @param mixed $actual the target object
|
||||
*
|
||||
* @return mixed the feature to be matched
|
||||
*/
|
||||
abstract protected function featureValueOf($actual);
|
||||
|
||||
public function matchesSafelyWithDiagnosticDescription($actual, Description $mismatchDescription)
|
||||
{
|
||||
$featureValue = $this->featureValueOf($actual);
|
||||
|
||||
if (!$this->_subMatcher->matches($featureValue)) {
|
||||
$mismatchDescription->appendText($this->_featureName)
|
||||
->appendText(' was ')->appendValue($featureValue);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
final public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText($this->_featureDescription)->appendText(' ')
|
||||
->appendDescriptionOf($this->_subMatcher)
|
||||
;
|
||||
}
|
||||
}
|
27
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Internal/SelfDescribingValue.php
vendored
Normal file
27
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Internal/SelfDescribingValue.php
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
namespace Hamcrest\Internal;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\SelfDescribing;
|
||||
|
||||
/**
|
||||
* A wrapper around any value so that it describes itself.
|
||||
*/
|
||||
class SelfDescribingValue implements SelfDescribing
|
||||
{
|
||||
|
||||
private $_value;
|
||||
|
||||
public function __construct($value)
|
||||
{
|
||||
$this->_value = $value;
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendValue($this->_value);
|
||||
}
|
||||
}
|
50
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Matcher.php
vendored
Normal file
50
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Matcher.php
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* A matcher over acceptable values.
|
||||
* A matcher is able to describe itself to give feedback when it fails.
|
||||
* <p/>
|
||||
* Matcher implementations should <b>NOT directly implement this interface</b>.
|
||||
* Instead, <b>extend</b> the {@link Hamcrest\BaseMatcher} abstract class,
|
||||
* which will ensure that the Matcher API can grow to support
|
||||
* new features and remain compatible with all Matcher implementations.
|
||||
* <p/>
|
||||
* For easy access to common Matcher implementations, use the static factory
|
||||
* methods in {@link Hamcrest\CoreMatchers}.
|
||||
*
|
||||
* @see Hamcrest\CoreMatchers
|
||||
* @see Hamcrest\BaseMatcher
|
||||
*/
|
||||
interface Matcher extends SelfDescribing
|
||||
{
|
||||
|
||||
/**
|
||||
* Evaluates the matcher for argument <var>$item</var>.
|
||||
*
|
||||
* @param mixed $item the object against which the matcher is evaluated.
|
||||
*
|
||||
* @return boolean <code>true</code> if <var>$item</var> matches,
|
||||
* otherwise <code>false</code>.
|
||||
*
|
||||
* @see Hamcrest\BaseMatcher
|
||||
*/
|
||||
public function matches($item);
|
||||
|
||||
/**
|
||||
* Generate a description of why the matcher has not accepted the item.
|
||||
* The description will be part of a larger description of why a matching
|
||||
* failed, so it should be concise.
|
||||
* This method assumes that <code>matches($item)</code> is false, but
|
||||
* will not check this.
|
||||
*
|
||||
* @param mixed $item The item that the Matcher has rejected.
|
||||
* @param Description $description
|
||||
* @return
|
||||
*/
|
||||
public function describeMismatch($item, Description $description);
|
||||
}
|
118
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/MatcherAssert.php
vendored
Normal file
118
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/MatcherAssert.php
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
class MatcherAssert
|
||||
{
|
||||
|
||||
/**
|
||||
* Number of assertions performed.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
private static $_count = 0;
|
||||
|
||||
/**
|
||||
* Make an assertion and throw {@link Hamcrest\AssertionError} if it fails.
|
||||
*
|
||||
* The first parameter may optionally be a string identifying the assertion
|
||||
* to be included in the failure message.
|
||||
*
|
||||
* If the third parameter is not a matcher it is passed to
|
||||
* {@link Hamcrest\Core\IsEqual#equalTo} to create one.
|
||||
*
|
||||
* Example:
|
||||
* <pre>
|
||||
* // With an identifier
|
||||
* assertThat("apple flavour", $apple->flavour(), equalTo("tasty"));
|
||||
* // Without an identifier
|
||||
* assertThat($apple->flavour(), equalTo("tasty"));
|
||||
* // Evaluating a boolean expression
|
||||
* assertThat("some error", $a > $b);
|
||||
* assertThat($a > $b);
|
||||
* </pre>
|
||||
*/
|
||||
public static function assertThat(/* $args ... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
switch (count($args)) {
|
||||
case 1:
|
||||
self::$_count++;
|
||||
if (!$args[0]) {
|
||||
throw new AssertionError();
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
self::$_count++;
|
||||
if ($args[1] instanceof Matcher) {
|
||||
self::doAssert('', $args[0], $args[1]);
|
||||
} elseif (!$args[1]) {
|
||||
throw new AssertionError($args[0]);
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
self::$_count++;
|
||||
self::doAssert(
|
||||
$args[0],
|
||||
$args[1],
|
||||
Util::wrapValueWithIsEqual($args[2])
|
||||
);
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new \InvalidArgumentException('assertThat() requires one to three arguments');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of assertions performed.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public static function getCount()
|
||||
{
|
||||
return self::$_count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the number of assertions performed to zero.
|
||||
*/
|
||||
public static function resetCount()
|
||||
{
|
||||
self::$_count = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the actual assertion logic.
|
||||
*
|
||||
* If <code>$matcher</code> doesn't match <code>$actual</code>,
|
||||
* throws a {@link Hamcrest\AssertionError} with a description
|
||||
* of the failure along with the optional <code>$identifier</code>.
|
||||
*
|
||||
* @param string $identifier added to the message upon failure
|
||||
* @param mixed $actual value to compare against <code>$matcher</code>
|
||||
* @param \Hamcrest\Matcher $matcher applied to <code>$actual</code>
|
||||
* @throws AssertionError
|
||||
*/
|
||||
private static function doAssert($identifier, $actual, Matcher $matcher)
|
||||
{
|
||||
if (!$matcher->matches($actual)) {
|
||||
$description = new StringDescription();
|
||||
if (!empty($identifier)) {
|
||||
$description->appendText($identifier . PHP_EOL);
|
||||
}
|
||||
$description->appendText('Expected: ')
|
||||
->appendDescriptionOf($matcher)
|
||||
->appendText(PHP_EOL . ' but: ');
|
||||
|
||||
$matcher->describeMismatch($actual, $description);
|
||||
|
||||
throw new AssertionError((string) $description);
|
||||
}
|
||||
}
|
||||
}
|
713
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Matchers.php
vendored
Normal file
713
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Matchers.php
vendored
Normal file
@@ -0,0 +1,713 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Copyright (c) 2009-2010 hamcrest.org
|
||||
*/
|
||||
|
||||
// This file is generated from the static method @factory doctags.
|
||||
|
||||
namespace Hamcrest;
|
||||
|
||||
/**
|
||||
* A series of static factories for all hamcrest matchers.
|
||||
*/
|
||||
class Matchers
|
||||
{
|
||||
|
||||
/**
|
||||
* Evaluates to true only if each $matcher[$i] is satisfied by $array[$i].
|
||||
*/
|
||||
public static function anArray(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Arrays\IsArray', 'anArray'), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates to true if any item in an array satisfies the given matcher.
|
||||
*
|
||||
* @param mixed $item as a {@link Hamcrest\Matcher} or a value.
|
||||
*
|
||||
* @return \Hamcrest\Arrays\IsArrayContaining
|
||||
*/
|
||||
public static function hasItemInArray($item)
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayContaining::hasItemInArray($item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates to true if any item in an array satisfies the given matcher.
|
||||
*
|
||||
* @param mixed $item as a {@link Hamcrest\Matcher} or a value.
|
||||
*
|
||||
* @return \Hamcrest\Arrays\IsArrayContaining
|
||||
*/
|
||||
public static function hasValue($item)
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayContaining::hasItemInArray($item);
|
||||
}
|
||||
|
||||
/**
|
||||
* An array with elements that match the given matchers.
|
||||
*/
|
||||
public static function arrayContainingInAnyOrder(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Arrays\IsArrayContainingInAnyOrder', 'arrayContainingInAnyOrder'), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* An array with elements that match the given matchers.
|
||||
*/
|
||||
public static function containsInAnyOrder(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Arrays\IsArrayContainingInAnyOrder', 'arrayContainingInAnyOrder'), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* An array with elements that match the given matchers in the same order.
|
||||
*/
|
||||
public static function arrayContaining(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Arrays\IsArrayContainingInOrder', 'arrayContaining'), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* An array with elements that match the given matchers in the same order.
|
||||
*/
|
||||
public static function contains(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Arrays\IsArrayContainingInOrder', 'arrayContaining'), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates to true if any key in an array matches the given matcher.
|
||||
*
|
||||
* @param mixed $key as a {@link Hamcrest\Matcher} or a value.
|
||||
*
|
||||
* @return \Hamcrest\Arrays\IsArrayContainingKey
|
||||
*/
|
||||
public static function hasKeyInArray($key)
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayContainingKey::hasKeyInArray($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates to true if any key in an array matches the given matcher.
|
||||
*
|
||||
* @param mixed $key as a {@link Hamcrest\Matcher} or a value.
|
||||
*
|
||||
* @return \Hamcrest\Arrays\IsArrayContainingKey
|
||||
*/
|
||||
public static function hasKey($key)
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayContainingKey::hasKeyInArray($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if an array has both an key and value in parity with each other.
|
||||
*/
|
||||
public static function hasKeyValuePair($key, $value)
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayContainingKeyValuePair::hasKeyValuePair($key, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if an array has both an key and value in parity with each other.
|
||||
*/
|
||||
public static function hasEntry($key, $value)
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayContainingKeyValuePair::hasKeyValuePair($key, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Does array size satisfy a given matcher?
|
||||
*
|
||||
* @param \Hamcrest\Matcher|int $size as a {@link Hamcrest\Matcher} or a value.
|
||||
*
|
||||
* @return \Hamcrest\Arrays\IsArrayWithSize
|
||||
*/
|
||||
public static function arrayWithSize($size)
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayWithSize::arrayWithSize($size);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches an empty array.
|
||||
*/
|
||||
public static function emptyArray()
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayWithSize::emptyArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches an empty array.
|
||||
*/
|
||||
public static function nonEmptyArray()
|
||||
{
|
||||
return \Hamcrest\Arrays\IsArrayWithSize::nonEmptyArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if traversable is empty.
|
||||
*/
|
||||
public static function emptyTraversable()
|
||||
{
|
||||
return \Hamcrest\Collection\IsEmptyTraversable::emptyTraversable();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if traversable is not empty.
|
||||
*/
|
||||
public static function nonEmptyTraversable()
|
||||
{
|
||||
return \Hamcrest\Collection\IsEmptyTraversable::nonEmptyTraversable();
|
||||
}
|
||||
|
||||
/**
|
||||
* Does traversable size satisfy a given matcher?
|
||||
*/
|
||||
public static function traversableWithSize($size)
|
||||
{
|
||||
return \Hamcrest\Collection\IsTraversableWithSize::traversableWithSize($size);
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates to true only if ALL of the passed in matchers evaluate to true.
|
||||
*/
|
||||
public static function allOf(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Core\AllOf', 'allOf'), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates to true if ANY of the passed in matchers evaluate to true.
|
||||
*/
|
||||
public static function anyOf(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Core\AnyOf', 'anyOf'), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates to false if ANY of the passed in matchers evaluate to true.
|
||||
*/
|
||||
public static function noneOf(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Core\AnyOf', 'noneOf'), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* This is useful for fluently combining matchers that must both pass.
|
||||
* For example:
|
||||
* <pre>
|
||||
* assertThat($string, both(containsString("a"))->andAlso(containsString("b")));
|
||||
* </pre>
|
||||
*/
|
||||
public static function both(\Hamcrest\Matcher $matcher)
|
||||
{
|
||||
return \Hamcrest\Core\CombinableMatcher::both($matcher);
|
||||
}
|
||||
|
||||
/**
|
||||
* This is useful for fluently combining matchers where either may pass,
|
||||
* for example:
|
||||
* <pre>
|
||||
* assertThat($string, either(containsString("a"))->orElse(containsString("b")));
|
||||
* </pre>
|
||||
*/
|
||||
public static function either(\Hamcrest\Matcher $matcher)
|
||||
{
|
||||
return \Hamcrest\Core\CombinableMatcher::either($matcher);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps an existing matcher and overrides the description when it fails.
|
||||
*/
|
||||
public static function describedAs(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Core\DescribedAs', 'describedAs'), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Matcher $itemMatcher
|
||||
* A matcher to apply to every element in an array.
|
||||
*
|
||||
* @return \Hamcrest\Core\Every
|
||||
* Evaluates to TRUE for a collection in which every item matches $itemMatcher
|
||||
*/
|
||||
public static function everyItem(\Hamcrest\Matcher $itemMatcher)
|
||||
{
|
||||
return \Hamcrest\Core\Every::everyItem($itemMatcher);
|
||||
}
|
||||
|
||||
/**
|
||||
* Does array size satisfy a given matcher?
|
||||
*/
|
||||
public static function hasToString($matcher)
|
||||
{
|
||||
return \Hamcrest\Core\HasToString::hasToString($matcher);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decorates another Matcher, retaining the behavior but allowing tests
|
||||
* to be slightly more expressive.
|
||||
*
|
||||
* For example: assertThat($cheese, equalTo($smelly))
|
||||
* vs. assertThat($cheese, is(equalTo($smelly)))
|
||||
*/
|
||||
public static function is($value)
|
||||
{
|
||||
return \Hamcrest\Core\Is::is($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* This matcher always evaluates to true.
|
||||
*
|
||||
* @param string $description A meaningful string used when describing itself.
|
||||
*
|
||||
* @return \Hamcrest\Core\IsAnything
|
||||
*/
|
||||
public static function anything($description = 'ANYTHING')
|
||||
{
|
||||
return \Hamcrest\Core\IsAnything::anything($description);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the value is an array containing this matcher.
|
||||
*
|
||||
* Example:
|
||||
* <pre>
|
||||
* assertThat(array('a', 'b'), hasItem(equalTo('b')));
|
||||
* //Convenience defaults to equalTo()
|
||||
* assertThat(array('a', 'b'), hasItem('b'));
|
||||
* </pre>
|
||||
*/
|
||||
public static function hasItem(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Core\IsCollectionContaining', 'hasItem'), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the value is an array containing elements that match all of these
|
||||
* matchers.
|
||||
*
|
||||
* Example:
|
||||
* <pre>
|
||||
* assertThat(array('a', 'b', 'c'), hasItems(equalTo('a'), equalTo('b')));
|
||||
* </pre>
|
||||
*/
|
||||
public static function hasItems(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Core\IsCollectionContaining', 'hasItems'), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value equal to another value, as tested by the use of the "=="
|
||||
* comparison operator?
|
||||
*/
|
||||
public static function equalTo($item)
|
||||
{
|
||||
return \Hamcrest\Core\IsEqual::equalTo($item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests of the value is identical to $value as tested by the "===" operator.
|
||||
*/
|
||||
public static function identicalTo($value)
|
||||
{
|
||||
return \Hamcrest\Core\IsIdentical::identicalTo($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value an instance of a particular type?
|
||||
* This version assumes no relationship between the required type and
|
||||
* the signature of the method that sets it up, for example in
|
||||
* <code>assertThat($anObject, anInstanceOf('Thing'));</code>
|
||||
*/
|
||||
public static function anInstanceOf($theClass)
|
||||
{
|
||||
return \Hamcrest\Core\IsInstanceOf::anInstanceOf($theClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value an instance of a particular type?
|
||||
* This version assumes no relationship between the required type and
|
||||
* the signature of the method that sets it up, for example in
|
||||
* <code>assertThat($anObject, anInstanceOf('Thing'));</code>
|
||||
*/
|
||||
public static function any($theClass)
|
||||
{
|
||||
return \Hamcrest\Core\IsInstanceOf::anInstanceOf($theClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value does not match $value.
|
||||
*/
|
||||
public static function not($value)
|
||||
{
|
||||
return \Hamcrest\Core\IsNot::not($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is null.
|
||||
*/
|
||||
public static function nullValue()
|
||||
{
|
||||
return \Hamcrest\Core\IsNull::nullValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is not null.
|
||||
*/
|
||||
public static function notNullValue()
|
||||
{
|
||||
return \Hamcrest\Core\IsNull::notNullValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of IsSame.
|
||||
*
|
||||
* @param mixed $object
|
||||
* The predicate evaluates to true only when the argument is
|
||||
* this object.
|
||||
*
|
||||
* @return \Hamcrest\Core\IsSame
|
||||
*/
|
||||
public static function sameInstance($object)
|
||||
{
|
||||
return \Hamcrest\Core\IsSame::sameInstance($object);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a particular built-in type?
|
||||
*/
|
||||
public static function typeOf($theType)
|
||||
{
|
||||
return \Hamcrest\Core\IsTypeOf::typeOf($theType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value (class, object, or array) has named $property.
|
||||
*/
|
||||
public static function set($property)
|
||||
{
|
||||
return \Hamcrest\Core\Set::set($property);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value (class, object, or array) does not have named $property.
|
||||
*/
|
||||
public static function notSet($property)
|
||||
{
|
||||
return \Hamcrest\Core\Set::notSet($property);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a number equal to $value within some range of
|
||||
* acceptable error $delta.
|
||||
*/
|
||||
public static function closeTo($value, $delta)
|
||||
{
|
||||
return \Hamcrest\Number\IsCloseTo::closeTo($value, $delta);
|
||||
}
|
||||
|
||||
/**
|
||||
* The value is not > $value, nor < $value.
|
||||
*/
|
||||
public static function comparesEqualTo($value)
|
||||
{
|
||||
return \Hamcrest\Number\OrderingComparison::comparesEqualTo($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* The value is > $value.
|
||||
*/
|
||||
public static function greaterThan($value)
|
||||
{
|
||||
return \Hamcrest\Number\OrderingComparison::greaterThan($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* The value is >= $value.
|
||||
*/
|
||||
public static function greaterThanOrEqualTo($value)
|
||||
{
|
||||
return \Hamcrest\Number\OrderingComparison::greaterThanOrEqualTo($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* The value is >= $value.
|
||||
*/
|
||||
public static function atLeast($value)
|
||||
{
|
||||
return \Hamcrest\Number\OrderingComparison::greaterThanOrEqualTo($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* The value is < $value.
|
||||
*/
|
||||
public static function lessThan($value)
|
||||
{
|
||||
return \Hamcrest\Number\OrderingComparison::lessThan($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* The value is <= $value.
|
||||
*/
|
||||
public static function lessThanOrEqualTo($value)
|
||||
{
|
||||
return \Hamcrest\Number\OrderingComparison::lessThanOrEqualTo($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* The value is <= $value.
|
||||
*/
|
||||
public static function atMost($value)
|
||||
{
|
||||
return \Hamcrest\Number\OrderingComparison::lessThanOrEqualTo($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a zero-length string.
|
||||
*/
|
||||
public static function isEmptyString()
|
||||
{
|
||||
return \Hamcrest\Text\IsEmptyString::isEmptyString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a zero-length string.
|
||||
*/
|
||||
public static function emptyString()
|
||||
{
|
||||
return \Hamcrest\Text\IsEmptyString::isEmptyString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is null or a zero-length string.
|
||||
*/
|
||||
public static function isEmptyOrNullString()
|
||||
{
|
||||
return \Hamcrest\Text\IsEmptyString::isEmptyOrNullString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is null or a zero-length string.
|
||||
*/
|
||||
public static function nullOrEmptyString()
|
||||
{
|
||||
return \Hamcrest\Text\IsEmptyString::isEmptyOrNullString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a non-zero-length string.
|
||||
*/
|
||||
public static function isNonEmptyString()
|
||||
{
|
||||
return \Hamcrest\Text\IsEmptyString::isNonEmptyString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a non-zero-length string.
|
||||
*/
|
||||
public static function nonEmptyString()
|
||||
{
|
||||
return \Hamcrest\Text\IsEmptyString::isNonEmptyString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a string equal to $string, regardless of the case.
|
||||
*/
|
||||
public static function equalToIgnoringCase($string)
|
||||
{
|
||||
return \Hamcrest\Text\IsEqualIgnoringCase::equalToIgnoringCase($string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a string equal to $string, regardless of whitespace.
|
||||
*/
|
||||
public static function equalToIgnoringWhiteSpace($string)
|
||||
{
|
||||
return \Hamcrest\Text\IsEqualIgnoringWhiteSpace::equalToIgnoringWhiteSpace($string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a string that matches regular expression $pattern.
|
||||
*/
|
||||
public static function matchesPattern($pattern)
|
||||
{
|
||||
return \Hamcrest\Text\MatchesPattern::matchesPattern($pattern);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a string that contains $substring.
|
||||
*/
|
||||
public static function containsString($substring)
|
||||
{
|
||||
return \Hamcrest\Text\StringContains::containsString($substring);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a string that contains $substring regardless of the case.
|
||||
*/
|
||||
public static function containsStringIgnoringCase($substring)
|
||||
{
|
||||
return \Hamcrest\Text\StringContainsIgnoringCase::containsStringIgnoringCase($substring);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value contains $substrings in a constrained order.
|
||||
*/
|
||||
public static function stringContainsInOrder(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
return call_user_func_array(array('\Hamcrest\Text\StringContainsInOrder', 'stringContainsInOrder'), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a string that ends with $substring.
|
||||
*/
|
||||
public static function endsWith($substring)
|
||||
{
|
||||
return \Hamcrest\Text\StringEndsWith::endsWith($substring);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a string that starts with $substring.
|
||||
*/
|
||||
public static function startsWith($substring)
|
||||
{
|
||||
return \Hamcrest\Text\StringStartsWith::startsWith($substring);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value an array?
|
||||
*/
|
||||
public static function arrayValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsArray::arrayValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a boolean?
|
||||
*/
|
||||
public static function booleanValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsBoolean::booleanValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a boolean?
|
||||
*/
|
||||
public static function boolValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsBoolean::booleanValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value callable?
|
||||
*/
|
||||
public static function callableValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsCallable::callableValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a float/double?
|
||||
*/
|
||||
public static function doubleValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsDouble::doubleValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a float/double?
|
||||
*/
|
||||
public static function floatValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsDouble::doubleValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value an integer?
|
||||
*/
|
||||
public static function integerValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsInteger::integerValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value an integer?
|
||||
*/
|
||||
public static function intValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsInteger::integerValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a numeric?
|
||||
*/
|
||||
public static function numericValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsNumeric::numericValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value an object?
|
||||
*/
|
||||
public static function objectValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsObject::objectValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value an object?
|
||||
*/
|
||||
public static function anObject()
|
||||
{
|
||||
return \Hamcrest\Type\IsObject::objectValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a resource?
|
||||
*/
|
||||
public static function resourceValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsResource::resourceValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a scalar (boolean, integer, double, or string)?
|
||||
*/
|
||||
public static function scalarValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsScalar::scalarValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a string?
|
||||
*/
|
||||
public static function stringValue()
|
||||
{
|
||||
return \Hamcrest\Type\IsString::stringValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps <code>$matcher</code> with {@link Hamcrest\Core\IsEqual)
|
||||
* if it's not a matcher and the XPath in <code>count()</code>
|
||||
* if it's an integer.
|
||||
*/
|
||||
public static function hasXPath($xpath, $matcher = null)
|
||||
{
|
||||
return \Hamcrest\Xml\HasXPath::hasXPath($xpath, $matcher);
|
||||
}
|
||||
}
|
43
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/NullDescription.php
vendored
Normal file
43
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/NullDescription.php
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* Null implementation of {@link Hamcrest\Description}.
|
||||
*/
|
||||
class NullDescription implements Description
|
||||
{
|
||||
|
||||
public function appendText($text)
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function appendDescriptionOf(SelfDescribing $value)
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function appendValue($value)
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function appendValueList($start, $separator, $end, $values)
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function appendList($start, $separator, $end, $values)
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return '';
|
||||
}
|
||||
}
|
67
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Number/IsCloseTo.php
vendored
Normal file
67
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Number/IsCloseTo.php
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
namespace Hamcrest\Number;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\TypeSafeMatcher;
|
||||
|
||||
/**
|
||||
* Is the value a number equal to a value within some range of
|
||||
* acceptable error?
|
||||
*/
|
||||
class IsCloseTo extends TypeSafeMatcher
|
||||
{
|
||||
|
||||
private $_value;
|
||||
private $_delta;
|
||||
|
||||
public function __construct($value, $delta)
|
||||
{
|
||||
parent::__construct(self::TYPE_NUMERIC);
|
||||
|
||||
$this->_value = $value;
|
||||
$this->_delta = $delta;
|
||||
}
|
||||
|
||||
protected function matchesSafely($item)
|
||||
{
|
||||
return $this->_actualDelta($item) <= 0.0;
|
||||
}
|
||||
|
||||
protected function describeMismatchSafely($item, Description $mismatchDescription)
|
||||
{
|
||||
$mismatchDescription->appendValue($item)
|
||||
->appendText(' differed by ')
|
||||
->appendValue($this->_actualDelta($item))
|
||||
;
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText('a numeric value within ')
|
||||
->appendValue($this->_delta)
|
||||
->appendText(' of ')
|
||||
->appendValue($this->_value)
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a number equal to $value within some range of
|
||||
* acceptable error $delta.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function closeTo($value, $delta)
|
||||
{
|
||||
return new self($value, $delta);
|
||||
}
|
||||
|
||||
// -- Private Methods
|
||||
|
||||
private function _actualDelta($item)
|
||||
{
|
||||
return (abs(($item - $this->_value)) - $this->_delta);
|
||||
}
|
||||
}
|
132
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Number/OrderingComparison.php
vendored
Normal file
132
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Number/OrderingComparison.php
vendored
Normal file
@@ -0,0 +1,132 @@
|
||||
<?php
|
||||
namespace Hamcrest\Number;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\TypeSafeMatcher;
|
||||
|
||||
class OrderingComparison extends TypeSafeMatcher
|
||||
{
|
||||
|
||||
private $_value;
|
||||
private $_minCompare;
|
||||
private $_maxCompare;
|
||||
|
||||
public function __construct($value, $minCompare, $maxCompare)
|
||||
{
|
||||
parent::__construct(self::TYPE_NUMERIC);
|
||||
|
||||
$this->_value = $value;
|
||||
$this->_minCompare = $minCompare;
|
||||
$this->_maxCompare = $maxCompare;
|
||||
}
|
||||
|
||||
protected function matchesSafely($other)
|
||||
{
|
||||
$compare = $this->_compare($this->_value, $other);
|
||||
|
||||
return ($this->_minCompare <= $compare) && ($compare <= $this->_maxCompare);
|
||||
}
|
||||
|
||||
protected function describeMismatchSafely($item, Description $mismatchDescription)
|
||||
{
|
||||
$mismatchDescription
|
||||
->appendValue($item)->appendText(' was ')
|
||||
->appendText($this->_comparison($this->_compare($this->_value, $item)))
|
||||
->appendText(' ')->appendValue($this->_value)
|
||||
;
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText('a value ')
|
||||
->appendText($this->_comparison($this->_minCompare))
|
||||
;
|
||||
if ($this->_minCompare != $this->_maxCompare) {
|
||||
$description->appendText(' or ')
|
||||
->appendText($this->_comparison($this->_maxCompare))
|
||||
;
|
||||
}
|
||||
$description->appendText(' ')->appendValue($this->_value);
|
||||
}
|
||||
|
||||
/**
|
||||
* The value is not > $value, nor < $value.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function comparesEqualTo($value)
|
||||
{
|
||||
return new self($value, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* The value is > $value.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function greaterThan($value)
|
||||
{
|
||||
return new self($value, -1, -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* The value is >= $value.
|
||||
*
|
||||
* @factory atLeast
|
||||
*/
|
||||
public static function greaterThanOrEqualTo($value)
|
||||
{
|
||||
return new self($value, -1, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* The value is < $value.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function lessThan($value)
|
||||
{
|
||||
return new self($value, 1, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* The value is <= $value.
|
||||
*
|
||||
* @factory atMost
|
||||
*/
|
||||
public static function lessThanOrEqualTo($value)
|
||||
{
|
||||
return new self($value, 0, 1);
|
||||
}
|
||||
|
||||
// -- Private Methods
|
||||
|
||||
private function _compare($left, $right)
|
||||
{
|
||||
$a = $left;
|
||||
$b = $right;
|
||||
|
||||
if ($a < $b) {
|
||||
return -1;
|
||||
} elseif ($a == $b) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
private function _comparison($compare)
|
||||
{
|
||||
if ($compare > 0) {
|
||||
return 'less than';
|
||||
} elseif ($compare == 0) {
|
||||
return 'equal to';
|
||||
} else {
|
||||
return 'greater than';
|
||||
}
|
||||
}
|
||||
}
|
23
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/SelfDescribing.php
vendored
Normal file
23
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/SelfDescribing.php
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* The ability of an object to describe itself.
|
||||
*/
|
||||
interface SelfDescribing
|
||||
{
|
||||
|
||||
/**
|
||||
* Generates a description of the object. The description may be part
|
||||
* of a description of a larger object of which this is just a component,
|
||||
* so it should be worded appropriately.
|
||||
*
|
||||
* @param \Hamcrest\Description $description
|
||||
* The description to be built or appended to.
|
||||
*/
|
||||
public function describeTo(Description $description);
|
||||
}
|
57
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/StringDescription.php
vendored
Normal file
57
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/StringDescription.php
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* A {@link Hamcrest\Description} that is stored as a string.
|
||||
*/
|
||||
class StringDescription extends BaseDescription
|
||||
{
|
||||
|
||||
private $_out;
|
||||
|
||||
public function __construct($out = '')
|
||||
{
|
||||
$this->_out = (string) $out;
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return $this->_out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the description of a {@link Hamcrest\SelfDescribing} object as a
|
||||
* String.
|
||||
*
|
||||
* @param \Hamcrest\SelfDescribing $selfDescribing
|
||||
* The object to be described.
|
||||
*
|
||||
* @return string
|
||||
* The description of the object.
|
||||
*/
|
||||
public static function toString(SelfDescribing $selfDescribing)
|
||||
{
|
||||
$self = new self();
|
||||
|
||||
return (string) $self->appendDescriptionOf($selfDescribing);
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link toString()}.
|
||||
*/
|
||||
public static function asString(SelfDescribing $selfDescribing)
|
||||
{
|
||||
return self::toString($selfDescribing);
|
||||
}
|
||||
|
||||
// -- Protected Methods
|
||||
|
||||
protected function append($str)
|
||||
{
|
||||
$this->_out .= $str;
|
||||
}
|
||||
}
|
85
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/IsEmptyString.php
vendored
Normal file
85
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/IsEmptyString.php
vendored
Normal file
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
namespace Hamcrest\Text;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\BaseMatcher;
|
||||
use Hamcrest\Core\AnyOf;
|
||||
use Hamcrest\Core\IsNull;
|
||||
use Hamcrest\Description;
|
||||
|
||||
/**
|
||||
* Matches empty Strings (and null).
|
||||
*/
|
||||
class IsEmptyString extends BaseMatcher
|
||||
{
|
||||
|
||||
private static $_INSTANCE;
|
||||
private static $_NULL_OR_EMPTY_INSTANCE;
|
||||
private static $_NOT_INSTANCE;
|
||||
|
||||
private $_empty;
|
||||
|
||||
public function __construct($empty = true)
|
||||
{
|
||||
$this->_empty = $empty;
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
return $this->_empty
|
||||
? ($item === '')
|
||||
: is_string($item) && $item !== '';
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText($this->_empty ? 'an empty string' : 'a non-empty string');
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a zero-length string.
|
||||
*
|
||||
* @factory emptyString
|
||||
*/
|
||||
public static function isEmptyString()
|
||||
{
|
||||
if (!self::$_INSTANCE) {
|
||||
self::$_INSTANCE = new self(true);
|
||||
}
|
||||
|
||||
return self::$_INSTANCE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is null or a zero-length string.
|
||||
*
|
||||
* @factory nullOrEmptyString
|
||||
*/
|
||||
public static function isEmptyOrNullString()
|
||||
{
|
||||
if (!self::$_NULL_OR_EMPTY_INSTANCE) {
|
||||
self::$_NULL_OR_EMPTY_INSTANCE = AnyOf::anyOf(
|
||||
IsNull::nullvalue(),
|
||||
self::isEmptyString()
|
||||
);
|
||||
}
|
||||
|
||||
return self::$_NULL_OR_EMPTY_INSTANCE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a non-zero-length string.
|
||||
*
|
||||
* @factory nonEmptyString
|
||||
*/
|
||||
public static function isNonEmptyString()
|
||||
{
|
||||
if (!self::$_NOT_INSTANCE) {
|
||||
self::$_NOT_INSTANCE = new self(false);
|
||||
}
|
||||
|
||||
return self::$_NOT_INSTANCE;
|
||||
}
|
||||
}
|
52
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/IsEqualIgnoringCase.php
vendored
Normal file
52
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/IsEqualIgnoringCase.php
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
namespace Hamcrest\Text;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\TypeSafeMatcher;
|
||||
|
||||
/**
|
||||
* Tests if a string is equal to another string, regardless of the case.
|
||||
*/
|
||||
class IsEqualIgnoringCase extends TypeSafeMatcher
|
||||
{
|
||||
|
||||
private $_string;
|
||||
|
||||
public function __construct($string)
|
||||
{
|
||||
parent::__construct(self::TYPE_STRING);
|
||||
|
||||
$this->_string = $string;
|
||||
}
|
||||
|
||||
protected function matchesSafely($item)
|
||||
{
|
||||
return strtolower($this->_string) === strtolower($item);
|
||||
}
|
||||
|
||||
protected function describeMismatchSafely($item, Description $mismatchDescription)
|
||||
{
|
||||
$mismatchDescription->appendText('was ')->appendText($item);
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText('equalToIgnoringCase(')
|
||||
->appendValue($this->_string)
|
||||
->appendText(')')
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a string equal to $string, regardless of the case.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function equalToIgnoringCase($string)
|
||||
{
|
||||
return new self($string);
|
||||
}
|
||||
}
|
66
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/IsEqualIgnoringWhiteSpace.php
vendored
Normal file
66
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/IsEqualIgnoringWhiteSpace.php
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
namespace Hamcrest\Text;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\TypeSafeMatcher;
|
||||
|
||||
/**
|
||||
* Tests if a string is equal to another string, ignoring any changes in
|
||||
* whitespace.
|
||||
*/
|
||||
class IsEqualIgnoringWhiteSpace extends TypeSafeMatcher
|
||||
{
|
||||
|
||||
private $_string;
|
||||
|
||||
public function __construct($string)
|
||||
{
|
||||
parent::__construct(self::TYPE_STRING);
|
||||
|
||||
$this->_string = $string;
|
||||
}
|
||||
|
||||
protected function matchesSafely($item)
|
||||
{
|
||||
return (strtolower($this->_stripSpace($item))
|
||||
=== strtolower($this->_stripSpace($this->_string)));
|
||||
}
|
||||
|
||||
protected function describeMismatchSafely($item, Description $mismatchDescription)
|
||||
{
|
||||
$mismatchDescription->appendText('was ')->appendText($item);
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText('equalToIgnoringWhiteSpace(')
|
||||
->appendValue($this->_string)
|
||||
->appendText(')')
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a string equal to $string, regardless of whitespace.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function equalToIgnoringWhiteSpace($string)
|
||||
{
|
||||
return new self($string);
|
||||
}
|
||||
|
||||
// -- Private Methods
|
||||
|
||||
private function _stripSpace($string)
|
||||
{
|
||||
$parts = preg_split("/[\r\n\t ]+/", $string);
|
||||
foreach ($parts as $i => $part) {
|
||||
$parts[$i] = trim($part, " \r\n\t");
|
||||
}
|
||||
|
||||
return trim(implode(' ', $parts), " \r\n\t");
|
||||
}
|
||||
}
|
40
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/MatchesPattern.php
vendored
Normal file
40
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/MatchesPattern.php
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
namespace Hamcrest\Text;
|
||||
|
||||
/*
|
||||
Copyright (c) 2010 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* Tests if the argument is a string that matches a regular expression.
|
||||
*/
|
||||
class MatchesPattern extends SubstringMatcher
|
||||
{
|
||||
|
||||
public function __construct($pattern)
|
||||
{
|
||||
parent::__construct($pattern);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a string that matches regular expression $pattern.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function matchesPattern($pattern)
|
||||
{
|
||||
return new self($pattern);
|
||||
}
|
||||
|
||||
// -- Protected Methods
|
||||
|
||||
protected function evalSubstringOf($item)
|
||||
{
|
||||
return preg_match($this->_substring, (string) $item) >= 1;
|
||||
}
|
||||
|
||||
protected function relationship()
|
||||
{
|
||||
return 'matching';
|
||||
}
|
||||
}
|
45
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/StringContains.php
vendored
Normal file
45
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/StringContains.php
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
namespace Hamcrest\Text;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* Tests if the argument is a string that contains a substring.
|
||||
*/
|
||||
class StringContains extends SubstringMatcher
|
||||
{
|
||||
|
||||
public function __construct($substring)
|
||||
{
|
||||
parent::__construct($substring);
|
||||
}
|
||||
|
||||
public function ignoringCase()
|
||||
{
|
||||
return new StringContainsIgnoringCase($this->_substring);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a string that contains $substring.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function containsString($substring)
|
||||
{
|
||||
return new self($substring);
|
||||
}
|
||||
|
||||
// -- Protected Methods
|
||||
|
||||
protected function evalSubstringOf($item)
|
||||
{
|
||||
return (false !== strpos((string) $item, $this->_substring));
|
||||
}
|
||||
|
||||
protected function relationship()
|
||||
{
|
||||
return 'containing';
|
||||
}
|
||||
}
|
40
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/StringContainsIgnoringCase.php
vendored
Normal file
40
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/StringContainsIgnoringCase.php
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
namespace Hamcrest\Text;
|
||||
|
||||
/*
|
||||
Copyright (c) 2010 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* Tests if the argument is a string that contains a substring ignoring case.
|
||||
*/
|
||||
class StringContainsIgnoringCase extends SubstringMatcher
|
||||
{
|
||||
|
||||
public function __construct($substring)
|
||||
{
|
||||
parent::__construct($substring);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a string that contains $substring regardless of the case.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function containsStringIgnoringCase($substring)
|
||||
{
|
||||
return new self($substring);
|
||||
}
|
||||
|
||||
// -- Protected Methods
|
||||
|
||||
protected function evalSubstringOf($item)
|
||||
{
|
||||
return (false !== stripos((string) $item, $this->_substring));
|
||||
}
|
||||
|
||||
protected function relationship()
|
||||
{
|
||||
return 'containing in any case';
|
||||
}
|
||||
}
|
66
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/StringContainsInOrder.php
vendored
Normal file
66
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/StringContainsInOrder.php
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
namespace Hamcrest\Text;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\TypeSafeMatcher;
|
||||
|
||||
/**
|
||||
* Tests if the value contains a series of substrings in a constrained order.
|
||||
*/
|
||||
class StringContainsInOrder extends TypeSafeMatcher
|
||||
{
|
||||
|
||||
private $_substrings;
|
||||
|
||||
public function __construct(array $substrings)
|
||||
{
|
||||
parent::__construct(self::TYPE_STRING);
|
||||
|
||||
$this->_substrings = $substrings;
|
||||
}
|
||||
|
||||
protected function matchesSafely($item)
|
||||
{
|
||||
$fromIndex = 0;
|
||||
|
||||
foreach ($this->_substrings as $substring) {
|
||||
if (false === $fromIndex = strpos($item, $substring, $fromIndex)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function describeMismatchSafely($item, Description $mismatchDescription)
|
||||
{
|
||||
$mismatchDescription->appendText('was ')->appendText($item);
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText('a string containing ')
|
||||
->appendValueList('', ', ', '', $this->_substrings)
|
||||
->appendText(' in order')
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value contains $substrings in a constrained order.
|
||||
*
|
||||
* @factory ...
|
||||
*/
|
||||
public static function stringContainsInOrder(/* args... */)
|
||||
{
|
||||
$args = func_get_args();
|
||||
|
||||
if (isset($args[0]) && is_array($args[0])) {
|
||||
$args = $args[0];
|
||||
}
|
||||
|
||||
return new self($args);
|
||||
}
|
||||
}
|
40
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/StringEndsWith.php
vendored
Normal file
40
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/StringEndsWith.php
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
namespace Hamcrest\Text;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* Tests if the argument is a string that ends with a substring.
|
||||
*/
|
||||
class StringEndsWith extends SubstringMatcher
|
||||
{
|
||||
|
||||
public function __construct($substring)
|
||||
{
|
||||
parent::__construct($substring);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a string that ends with $substring.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function endsWith($substring)
|
||||
{
|
||||
return new self($substring);
|
||||
}
|
||||
|
||||
// -- Protected Methods
|
||||
|
||||
protected function evalSubstringOf($string)
|
||||
{
|
||||
return (substr($string, (-1 * strlen($this->_substring))) === $this->_substring);
|
||||
}
|
||||
|
||||
protected function relationship()
|
||||
{
|
||||
return 'ending with';
|
||||
}
|
||||
}
|
40
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/StringStartsWith.php
vendored
Normal file
40
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/StringStartsWith.php
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
namespace Hamcrest\Text;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* Tests if the argument is a string that contains a substring.
|
||||
*/
|
||||
class StringStartsWith extends SubstringMatcher
|
||||
{
|
||||
|
||||
public function __construct($substring)
|
||||
{
|
||||
parent::__construct($substring);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if value is a string that starts with $substring.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function startsWith($substring)
|
||||
{
|
||||
return new self($substring);
|
||||
}
|
||||
|
||||
// -- Protected Methods
|
||||
|
||||
protected function evalSubstringOf($string)
|
||||
{
|
||||
return (substr($string, 0, strlen($this->_substring)) === $this->_substring);
|
||||
}
|
||||
|
||||
protected function relationship()
|
||||
{
|
||||
return 'starting with';
|
||||
}
|
||||
}
|
45
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/SubstringMatcher.php
vendored
Normal file
45
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Text/SubstringMatcher.php
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
namespace Hamcrest\Text;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\TypeSafeMatcher;
|
||||
|
||||
abstract class SubstringMatcher extends TypeSafeMatcher
|
||||
{
|
||||
|
||||
protected $_substring;
|
||||
|
||||
public function __construct($substring)
|
||||
{
|
||||
parent::__construct(self::TYPE_STRING);
|
||||
|
||||
$this->_substring = $substring;
|
||||
}
|
||||
|
||||
protected function matchesSafely($item)
|
||||
{
|
||||
return $this->evalSubstringOf($item);
|
||||
}
|
||||
|
||||
protected function describeMismatchSafely($item, Description $mismatchDescription)
|
||||
{
|
||||
$mismatchDescription->appendText('was "')->appendText($item)->appendText('"');
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText('a string ')
|
||||
->appendText($this->relationship())
|
||||
->appendText(' ')
|
||||
->appendValue($this->_substring)
|
||||
;
|
||||
}
|
||||
|
||||
abstract protected function evalSubstringOf($string);
|
||||
|
||||
abstract protected function relationship();
|
||||
}
|
32
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsArray.php
vendored
Normal file
32
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsArray.php
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
namespace Hamcrest\Type;
|
||||
|
||||
/*
|
||||
Copyright (c) 2010 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Core\IsTypeOf;
|
||||
|
||||
/**
|
||||
* Tests whether the value is an array.
|
||||
*/
|
||||
class IsArray extends IsTypeOf
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates a new instance of IsArray
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('array');
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value an array?
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function arrayValue()
|
||||
{
|
||||
return new self;
|
||||
}
|
||||
}
|
32
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsBoolean.php
vendored
Normal file
32
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsBoolean.php
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
namespace Hamcrest\Type;
|
||||
|
||||
/*
|
||||
Copyright (c) 2010 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Core\IsTypeOf;
|
||||
|
||||
/**
|
||||
* Tests whether the value is a boolean.
|
||||
*/
|
||||
class IsBoolean extends IsTypeOf
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates a new instance of IsBoolean
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('boolean');
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a boolean?
|
||||
*
|
||||
* @factory boolValue
|
||||
*/
|
||||
public static function booleanValue()
|
||||
{
|
||||
return new self;
|
||||
}
|
||||
}
|
37
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsCallable.php
vendored
Normal file
37
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsCallable.php
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
namespace Hamcrest\Type;
|
||||
|
||||
/*
|
||||
Copyright (c) 2010 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Core\IsTypeOf;
|
||||
|
||||
/**
|
||||
* Tests whether the value is callable.
|
||||
*/
|
||||
class IsCallable extends IsTypeOf
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates a new instance of IsCallable
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('callable');
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
return is_callable($item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value callable?
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function callableValue()
|
||||
{
|
||||
return new self;
|
||||
}
|
||||
}
|
34
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsDouble.php
vendored
Normal file
34
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsDouble.php
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
namespace Hamcrest\Type;
|
||||
|
||||
/*
|
||||
Copyright (c) 2010 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Core\IsTypeOf;
|
||||
|
||||
/**
|
||||
* Tests whether the value is a float/double.
|
||||
*
|
||||
* PHP returns "double" for values of type "float".
|
||||
*/
|
||||
class IsDouble extends IsTypeOf
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates a new instance of IsDouble
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('double');
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a float/double?
|
||||
*
|
||||
* @factory floatValue
|
||||
*/
|
||||
public static function doubleValue()
|
||||
{
|
||||
return new self;
|
||||
}
|
||||
}
|
32
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsInteger.php
vendored
Normal file
32
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsInteger.php
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
namespace Hamcrest\Type;
|
||||
|
||||
/*
|
||||
Copyright (c) 2010 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Core\IsTypeOf;
|
||||
|
||||
/**
|
||||
* Tests whether the value is an integer.
|
||||
*/
|
||||
class IsInteger extends IsTypeOf
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates a new instance of IsInteger
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('integer');
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value an integer?
|
||||
*
|
||||
* @factory intValue
|
||||
*/
|
||||
public static function integerValue()
|
||||
{
|
||||
return new self;
|
||||
}
|
||||
}
|
54
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsNumeric.php
vendored
Normal file
54
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsNumeric.php
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
namespace Hamcrest\Type;
|
||||
|
||||
/*
|
||||
Copyright (c) 2010 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Core\IsTypeOf;
|
||||
|
||||
/**
|
||||
* Tests whether the value is numeric.
|
||||
*/
|
||||
class IsNumeric extends IsTypeOf
|
||||
{
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('number');
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
if ($this->isHexadecimal($item)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return is_numeric($item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return if the string passed is a valid hexadecimal number.
|
||||
* This check is necessary because PHP 7 doesn't recognize hexadecimal string as numeric anymore.
|
||||
*
|
||||
* @param mixed $item
|
||||
* @return boolean
|
||||
*/
|
||||
private function isHexadecimal($item)
|
||||
{
|
||||
if (is_string($item) && preg_match('/^0x(.*)$/', $item, $matches)) {
|
||||
return ctype_xdigit($matches[1]);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a numeric?
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function numericValue()
|
||||
{
|
||||
return new self;
|
||||
}
|
||||
}
|
32
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsObject.php
vendored
Normal file
32
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsObject.php
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
namespace Hamcrest\Type;
|
||||
|
||||
/*
|
||||
Copyright (c) 2010 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Core\IsTypeOf;
|
||||
|
||||
/**
|
||||
* Tests whether the value is an object.
|
||||
*/
|
||||
class IsObject extends IsTypeOf
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates a new instance of IsObject
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('object');
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value an object?
|
||||
*
|
||||
* @factory anObject
|
||||
*/
|
||||
public static function objectValue()
|
||||
{
|
||||
return new self;
|
||||
}
|
||||
}
|
32
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsResource.php
vendored
Normal file
32
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsResource.php
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
namespace Hamcrest\Type;
|
||||
|
||||
/*
|
||||
Copyright (c) 2010 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Core\IsTypeOf;
|
||||
|
||||
/**
|
||||
* Tests whether the value is a resource.
|
||||
*/
|
||||
class IsResource extends IsTypeOf
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates a new instance of IsResource
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('resource');
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a resource?
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function resourceValue()
|
||||
{
|
||||
return new self;
|
||||
}
|
||||
}
|
34
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsScalar.php
vendored
Normal file
34
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsScalar.php
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
namespace Hamcrest\Type;
|
||||
|
||||
/*
|
||||
Copyright (c) 2010 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Core\IsTypeOf;
|
||||
|
||||
/**
|
||||
* Tests whether the value is a scalar (boolean, integer, double, or string).
|
||||
*/
|
||||
class IsScalar extends IsTypeOf
|
||||
{
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('scalar');
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
return is_scalar($item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a scalar (boolean, integer, double, or string)?
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function scalarValue()
|
||||
{
|
||||
return new self;
|
||||
}
|
||||
}
|
32
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsString.php
vendored
Normal file
32
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsString.php
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
namespace Hamcrest\Type;
|
||||
|
||||
/*
|
||||
Copyright (c) 2010 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Core\IsTypeOf;
|
||||
|
||||
/**
|
||||
* Tests whether the value is a string.
|
||||
*/
|
||||
class IsString extends IsTypeOf
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates a new instance of IsString
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('string');
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the value a string?
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function stringValue()
|
||||
{
|
||||
return new self;
|
||||
}
|
||||
}
|
29
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/TypeSafeDiagnosingMatcher.php
vendored
Normal file
29
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/TypeSafeDiagnosingMatcher.php
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
/**
|
||||
* Convenient base class for Matchers that require a value of a specific type.
|
||||
* This simply checks the type and then casts.
|
||||
*/
|
||||
|
||||
abstract class TypeSafeDiagnosingMatcher extends TypeSafeMatcher
|
||||
{
|
||||
|
||||
final public function matchesSafely($item)
|
||||
{
|
||||
return $this->matchesSafelyWithDiagnosticDescription($item, new NullDescription());
|
||||
}
|
||||
|
||||
final public function describeMismatchSafely($item, Description $mismatchDescription)
|
||||
{
|
||||
$this->matchesSafelyWithDiagnosticDescription($item, $mismatchDescription);
|
||||
}
|
||||
|
||||
// -- Protected Methods
|
||||
|
||||
/**
|
||||
* Subclasses should implement these. The item will already have been checked for
|
||||
* the specific type.
|
||||
*/
|
||||
abstract protected function matchesSafelyWithDiagnosticDescription($item, Description $mismatchDescription);
|
||||
}
|
107
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/TypeSafeMatcher.php
vendored
Normal file
107
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/TypeSafeMatcher.php
vendored
Normal file
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
/**
|
||||
* Convenient base class for Matchers that require a value of a specific type.
|
||||
* This simply checks the type.
|
||||
*
|
||||
* While it may seem a useless exercise to have this in PHP, objects cannot
|
||||
* be cast to certain data types such as numerics (or even strings if
|
||||
* __toString() has not be defined).
|
||||
*/
|
||||
|
||||
abstract class TypeSafeMatcher extends BaseMatcher
|
||||
{
|
||||
|
||||
/* Types that PHP can compare against */
|
||||
const TYPE_ANY = 0;
|
||||
const TYPE_STRING = 1;
|
||||
const TYPE_NUMERIC = 2;
|
||||
const TYPE_ARRAY = 3;
|
||||
const TYPE_OBJECT = 4;
|
||||
const TYPE_RESOURCE = 5;
|
||||
const TYPE_BOOLEAN = 6;
|
||||
|
||||
/**
|
||||
* The type that is required for a safe comparison
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
private $_expectedType;
|
||||
|
||||
/**
|
||||
* The subtype (e.g. class for objects) that is required
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $_expectedSubtype;
|
||||
|
||||
public function __construct($expectedType, $expectedSubtype = null)
|
||||
{
|
||||
$this->_expectedType = $expectedType;
|
||||
$this->_expectedSubtype = $expectedSubtype;
|
||||
}
|
||||
|
||||
final public function matches($item)
|
||||
{
|
||||
return $this->_isSafeType($item) && $this->matchesSafely($item);
|
||||
}
|
||||
|
||||
final public function describeMismatch($item, Description $mismatchDescription)
|
||||
{
|
||||
if (!$this->_isSafeType($item)) {
|
||||
parent::describeMismatch($item, $mismatchDescription);
|
||||
} else {
|
||||
$this->describeMismatchSafely($item, $mismatchDescription);
|
||||
}
|
||||
}
|
||||
|
||||
// -- Protected Methods
|
||||
|
||||
/**
|
||||
* The item will already have been checked for the specific type and subtype.
|
||||
*/
|
||||
abstract protected function matchesSafely($item);
|
||||
|
||||
/**
|
||||
* The item will already have been checked for the specific type and subtype.
|
||||
*/
|
||||
abstract protected function describeMismatchSafely($item, Description $mismatchDescription);
|
||||
|
||||
// -- Private Methods
|
||||
|
||||
private function _isSafeType($value)
|
||||
{
|
||||
switch ($this->_expectedType) {
|
||||
|
||||
case self::TYPE_ANY:
|
||||
return true;
|
||||
|
||||
case self::TYPE_STRING:
|
||||
return is_string($value) || is_numeric($value);
|
||||
|
||||
case self::TYPE_NUMERIC:
|
||||
return is_numeric($value) || is_string($value);
|
||||
|
||||
case self::TYPE_ARRAY:
|
||||
return is_array($value);
|
||||
|
||||
case self::TYPE_OBJECT:
|
||||
return is_object($value)
|
||||
&& ($this->_expectedSubtype === null
|
||||
|| $value instanceof $this->_expectedSubtype);
|
||||
|
||||
case self::TYPE_RESOURCE:
|
||||
return is_resource($value)
|
||||
&& ($this->_expectedSubtype === null
|
||||
|| get_resource_type($value) == $this->_expectedSubtype);
|
||||
|
||||
case self::TYPE_BOOLEAN:
|
||||
return true;
|
||||
|
||||
default:
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
76
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Util.php
vendored
Normal file
76
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Util.php
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
/*
|
||||
Copyright (c) 2012 hamcrest.org
|
||||
*/
|
||||
|
||||
/**
|
||||
* Contains utility methods for handling Hamcrest matchers.
|
||||
*
|
||||
* @see Hamcrest\Matcher
|
||||
*/
|
||||
class Util
|
||||
{
|
||||
public static function registerGlobalFunctions()
|
||||
{
|
||||
require_once __DIR__.'/../Hamcrest.php';
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps the item with an IsEqual matcher if it isn't a matcher already.
|
||||
*
|
||||
* @param mixed $item matcher or any value
|
||||
* @return \Hamcrest\Matcher
|
||||
*/
|
||||
public static function wrapValueWithIsEqual($item)
|
||||
{
|
||||
return ($item instanceof Matcher)
|
||||
? $item
|
||||
: Core\IsEqual::equalTo($item)
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Throws an exception if any item in $matchers is not a Hamcrest\Matcher.
|
||||
*
|
||||
* @param array $matchers expected to contain only matchers
|
||||
* @throws \InvalidArgumentException if any item is not a matcher
|
||||
*/
|
||||
public static function checkAllAreMatchers(array $matchers)
|
||||
{
|
||||
foreach ($matchers as $m) {
|
||||
if (!($m instanceof Matcher)) {
|
||||
throw new \InvalidArgumentException(
|
||||
'Each argument or element must be a Hamcrest matcher'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a copy of $items where each non-Matcher item is replaced by
|
||||
* a Hamcrest\Core\IsEqual matcher for the item. If the first and only item
|
||||
* is an array, it is used as the $items array to support the old style
|
||||
* of passing an array as the sole argument to a matcher.
|
||||
*
|
||||
* @param array $items contains items and matchers
|
||||
* @return array<Matchers> all items are
|
||||
*/
|
||||
public static function createMatcherArray(array $items)
|
||||
{
|
||||
//Extract single array item
|
||||
if (count($items) == 1 && is_array($items[0])) {
|
||||
$items = $items[0];
|
||||
}
|
||||
|
||||
//Replace non-matchers
|
||||
foreach ($items as &$item) {
|
||||
if (!($item instanceof Matcher)) {
|
||||
$item = Core\IsEqual::equalTo($item);
|
||||
}
|
||||
}
|
||||
|
||||
return $items;
|
||||
}
|
||||
}
|
195
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Xml/HasXPath.php
vendored
Normal file
195
vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Xml/HasXPath.php
vendored
Normal file
@@ -0,0 +1,195 @@
|
||||
<?php
|
||||
namespace Hamcrest\Xml;
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
use Hamcrest\Core\IsEqual;
|
||||
use Hamcrest\Description;
|
||||
use Hamcrest\DiagnosingMatcher;
|
||||
use Hamcrest\Matcher;
|
||||
|
||||
/**
|
||||
* Matches if XPath applied to XML/HTML/XHTML document either
|
||||
* evaluates to result matching the matcher or returns at least
|
||||
* one node, matching the matcher if present.
|
||||
*/
|
||||
class HasXPath extends DiagnosingMatcher
|
||||
{
|
||||
|
||||
/**
|
||||
* XPath to apply to the DOM.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $_xpath;
|
||||
|
||||
/**
|
||||
* Optional matcher to apply to the XPath expression result
|
||||
* or the content of the returned nodes.
|
||||
*
|
||||
* @var Matcher
|
||||
*/
|
||||
private $_matcher;
|
||||
|
||||
public function __construct($xpath, Matcher $matcher = null)
|
||||
{
|
||||
$this->_xpath = $xpath;
|
||||
$this->_matcher = $matcher;
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if the XPath matches against the DOM node and the matcher.
|
||||
*
|
||||
* @param string|\DOMNode $actual
|
||||
* @param Description $mismatchDescription
|
||||
* @return bool
|
||||
*/
|
||||
protected function matchesWithDiagnosticDescription($actual, Description $mismatchDescription)
|
||||
{
|
||||
if (is_string($actual)) {
|
||||
$actual = $this->createDocument($actual);
|
||||
} elseif (!$actual instanceof \DOMNode) {
|
||||
$mismatchDescription->appendText('was ')->appendValue($actual);
|
||||
|
||||
return false;
|
||||
}
|
||||
$result = $this->evaluate($actual);
|
||||
if ($result instanceof \DOMNodeList) {
|
||||
return $this->matchesContent($result, $mismatchDescription);
|
||||
} else {
|
||||
return $this->matchesExpression($result, $mismatchDescription);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and returns a <code>DOMDocument</code> from the given
|
||||
* XML or HTML string.
|
||||
*
|
||||
* @param string $text
|
||||
* @return \DOMDocument built from <code>$text</code>
|
||||
* @throws \InvalidArgumentException if the document is not valid
|
||||
*/
|
||||
protected function createDocument($text)
|
||||
{
|
||||
$document = new \DOMDocument();
|
||||
if (preg_match('/^\s*<\?xml/', $text)) {
|
||||
if (!@$document->loadXML($text)) {
|
||||
throw new \InvalidArgumentException('Must pass a valid XML document');
|
||||
}
|
||||
} else {
|
||||
if (!@$document->loadHTML($text)) {
|
||||
throw new \InvalidArgumentException('Must pass a valid HTML or XHTML document');
|
||||
}
|
||||
}
|
||||
|
||||
return $document;
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies the configured XPath to the DOM node and returns either
|
||||
* the result if it's an expression or the node list if it's a query.
|
||||
*
|
||||
* @param \DOMNode $node context from which to issue query
|
||||
* @return mixed result of expression or DOMNodeList from query
|
||||
*/
|
||||
protected function evaluate(\DOMNode $node)
|
||||
{
|
||||
if ($node instanceof \DOMDocument) {
|
||||
$xpathDocument = new \DOMXPath($node);
|
||||
|
||||
return $xpathDocument->evaluate($this->_xpath);
|
||||
} else {
|
||||
$xpathDocument = new \DOMXPath($node->ownerDocument);
|
||||
|
||||
return $xpathDocument->evaluate($this->_xpath, $node);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if the list of nodes is not empty and the content of at least
|
||||
* one node matches the configured matcher, if supplied.
|
||||
*
|
||||
* @param \DOMNodeList $nodes selected by the XPath query
|
||||
* @param Description $mismatchDescription
|
||||
* @return bool
|
||||
*/
|
||||
protected function matchesContent(\DOMNodeList $nodes, Description $mismatchDescription)
|
||||
{
|
||||
if ($nodes->length == 0) {
|
||||
$mismatchDescription->appendText('XPath returned no results');
|
||||
} elseif ($this->_matcher === null) {
|
||||
return true;
|
||||
} else {
|
||||
foreach ($nodes as $node) {
|
||||
if ($this->_matcher->matches($node->textContent)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
$content = array();
|
||||
foreach ($nodes as $node) {
|
||||
$content[] = $node->textContent;
|
||||
}
|
||||
$mismatchDescription->appendText('XPath returned ')
|
||||
->appendValue($content);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches if the result of the XPath expression matches the configured
|
||||
* matcher or evaluates to <code>true</code> if there is none.
|
||||
*
|
||||
* @param mixed $result result of the XPath expression
|
||||
* @param Description $mismatchDescription
|
||||
* @return bool
|
||||
*/
|
||||
protected function matchesExpression($result, Description $mismatchDescription)
|
||||
{
|
||||
if ($this->_matcher === null) {
|
||||
if ($result) {
|
||||
return true;
|
||||
}
|
||||
$mismatchDescription->appendText('XPath expression result was ')
|
||||
->appendValue($result);
|
||||
} else {
|
||||
if ($this->_matcher->matches($result)) {
|
||||
return true;
|
||||
}
|
||||
$mismatchDescription->appendText('XPath expression result ');
|
||||
$this->_matcher->describeMismatch($result, $mismatchDescription);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function describeTo(Description $description)
|
||||
{
|
||||
$description->appendText('XML or HTML document with XPath "')
|
||||
->appendText($this->_xpath)
|
||||
->appendText('"');
|
||||
if ($this->_matcher !== null) {
|
||||
$description->appendText(' ');
|
||||
$this->_matcher->describeTo($description);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps <code>$matcher</code> with {@link Hamcrest\Core\IsEqual)
|
||||
* if it's not a matcher and the XPath in <code>count()</code>
|
||||
* if it's an integer.
|
||||
*
|
||||
* @factory
|
||||
*/
|
||||
public static function hasXPath($xpath, $matcher = null)
|
||||
{
|
||||
if ($matcher === null || $matcher instanceof Matcher) {
|
||||
return new self($xpath, $matcher);
|
||||
} elseif (is_int($matcher) && strpos($xpath, 'count(') !== 0) {
|
||||
$xpath = 'count(' . $xpath . ')';
|
||||
}
|
||||
|
||||
return new self($xpath, IsEqual::equalTo($matcher));
|
||||
}
|
||||
}
|
68
vendor/hamcrest/hamcrest-php/tests/Hamcrest/AbstractMatcherTest.php
vendored
Normal file
68
vendor/hamcrest/hamcrest-php/tests/Hamcrest/AbstractMatcherTest.php
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
namespace Hamcrest;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class UnknownType {
|
||||
}
|
||||
|
||||
abstract class AbstractMatcherTest extends TestCase
|
||||
{
|
||||
|
||||
const ARGUMENT_IGNORED = "ignored";
|
||||
const ANY_NON_NULL_ARGUMENT = "notnull";
|
||||
|
||||
abstract protected function createMatcher();
|
||||
|
||||
public function assertMatches(\Hamcrest\Matcher $matcher, $arg, $message)
|
||||
{
|
||||
$this->assertTrue($matcher->matches($arg), $message);
|
||||
}
|
||||
|
||||
public function assertDoesNotMatch(\Hamcrest\Matcher $matcher, $arg, $message)
|
||||
{
|
||||
$this->assertFalse($matcher->matches($arg), $message);
|
||||
}
|
||||
|
||||
public function assertDescription($expected, \Hamcrest\Matcher $matcher)
|
||||
{
|
||||
$description = new \Hamcrest\StringDescription();
|
||||
$description->appendDescriptionOf($matcher);
|
||||
$this->assertEquals($expected, (string) $description, 'Expected description');
|
||||
}
|
||||
|
||||
public function assertMismatchDescription($expected, \Hamcrest\Matcher $matcher, $arg)
|
||||
{
|
||||
$description = new \Hamcrest\StringDescription();
|
||||
$this->assertFalse(
|
||||
$matcher->matches($arg),
|
||||
'Precondtion: Matcher should not match item'
|
||||
);
|
||||
$matcher->describeMismatch($arg, $description);
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
(string) $description,
|
||||
'Expected mismatch description'
|
||||
);
|
||||
}
|
||||
|
||||
public function testIsNullSafe()
|
||||
{
|
||||
//Should not generate any notices
|
||||
$this->createMatcher()->matches(null);
|
||||
$this->createMatcher()->describeMismatch(
|
||||
null,
|
||||
new \Hamcrest\NullDescription()
|
||||
);
|
||||
}
|
||||
|
||||
public function testCopesWithUnknownTypes()
|
||||
{
|
||||
//Should not generate any notices
|
||||
$this->createMatcher()->matches(new UnknownType());
|
||||
$this->createMatcher()->describeMismatch(
|
||||
new UnknownType(),
|
||||
new NullDescription()
|
||||
);
|
||||
}
|
||||
}
|
54
vendor/hamcrest/hamcrest-php/tests/Hamcrest/Array/IsArrayContainingInAnyOrderTest.php
vendored
Normal file
54
vendor/hamcrest/hamcrest-php/tests/Hamcrest/Array/IsArrayContainingInAnyOrderTest.php
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
namespace Hamcrest\Arrays;
|
||||
|
||||
use Hamcrest\AbstractMatcherTest;
|
||||
|
||||
class IsArrayContainingInAnyOrderTest extends AbstractMatcherTest
|
||||
{
|
||||
|
||||
protected function createMatcher()
|
||||
{
|
||||
return IsArrayContainingInAnyOrder::arrayContainingInAnyOrder(array(1, 2));
|
||||
}
|
||||
|
||||
public function testHasAReadableDescription()
|
||||
{
|
||||
$this->assertDescription('[<1>, <2>] in any order', containsInAnyOrder(array(1, 2)));
|
||||
}
|
||||
|
||||
public function testMatchesItemsInAnyOrder()
|
||||
{
|
||||
$this->assertMatches(containsInAnyOrder(array(1, 2, 3)), array(1, 2, 3), 'in order');
|
||||
$this->assertMatches(containsInAnyOrder(array(1, 2, 3)), array(3, 2, 1), 'out of order');
|
||||
$this->assertMatches(containsInAnyOrder(array(1)), array(1), 'single');
|
||||
}
|
||||
|
||||
public function testAppliesMatchersInAnyOrder()
|
||||
{
|
||||
$this->assertMatches(
|
||||
containsInAnyOrder(array(1, 2, 3)),
|
||||
array(1, 2, 3),
|
||||
'in order'
|
||||
);
|
||||
$this->assertMatches(
|
||||
containsInAnyOrder(array(1, 2, 3)),
|
||||
array(3, 2, 1),
|
||||
'out of order'
|
||||
);
|
||||
$this->assertMatches(
|
||||
containsInAnyOrder(array(1)),
|
||||
array(1),
|
||||
'single'
|
||||
);
|
||||
}
|
||||
|
||||
public function testMismatchesItemsInAnyOrder()
|
||||
{
|
||||
$matcher = containsInAnyOrder(array(1, 2, 3));
|
||||
|
||||
$this->assertMismatchDescription('was null', $matcher, null);
|
||||
$this->assertMismatchDescription('No item matches: <1>, <2>, <3> in []', $matcher, array());
|
||||
$this->assertMismatchDescription('No item matches: <2>, <3> in [<1>]', $matcher, array(1));
|
||||
$this->assertMismatchDescription('Not matched: <4>', $matcher, array(4, 3, 2, 1));
|
||||
}
|
||||
}
|
48
vendor/hamcrest/hamcrest-php/tests/Hamcrest/Array/IsArrayContainingInOrderTest.php
vendored
Normal file
48
vendor/hamcrest/hamcrest-php/tests/Hamcrest/Array/IsArrayContainingInOrderTest.php
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
namespace Hamcrest\Arrays;
|
||||
|
||||
use Hamcrest\AbstractMatcherTest;
|
||||
|
||||
class IsArrayContainingInOrderTest extends AbstractMatcherTest
|
||||
{
|
||||
|
||||
protected function createMatcher()
|
||||
{
|
||||
return IsArrayContainingInOrder::arrayContaining(array(1, 2));
|
||||
}
|
||||
|
||||
public function testHasAReadableDescription()
|
||||
{
|
||||
$this->assertDescription('[<1>, <2>]', arrayContaining(array(1, 2)));
|
||||
}
|
||||
|
||||
public function testMatchesItemsInOrder()
|
||||
{
|
||||
$this->assertMatches(arrayContaining(array(1, 2, 3)), array(1, 2, 3), 'in order');
|
||||
$this->assertMatches(arrayContaining(array(1)), array(1), 'single');
|
||||
}
|
||||
|
||||
public function testAppliesMatchersInOrder()
|
||||
{
|
||||
$this->assertMatches(
|
||||
arrayContaining(array(1, 2, 3)),
|
||||
array(1, 2, 3),
|
||||
'in order'
|
||||
);
|
||||
$this->assertMatches(arrayContaining(array(1)), array(1), 'single');
|
||||
}
|
||||
|
||||
public function testMismatchesItemsInAnyOrder()
|
||||
{
|
||||
if (defined('HHVM_VERSION')) {
|
||||
$this->markTestSkipped('Broken on HHVM.');
|
||||
}
|
||||
|
||||
$matcher = arrayContaining(array(1, 2, 3));
|
||||
$this->assertMismatchDescription('was null', $matcher, null);
|
||||
$this->assertMismatchDescription('No item matched: <1>', $matcher, array());
|
||||
$this->assertMismatchDescription('No item matched: <2>', $matcher, array(1));
|
||||
$this->assertMismatchDescription('item with key 0: was <4>', $matcher, array(4, 3, 2, 1));
|
||||
$this->assertMismatchDescription('item with key 2: was <4>', $matcher, array(1, 2, 4));
|
||||
}
|
||||
}
|
62
vendor/hamcrest/hamcrest-php/tests/Hamcrest/Array/IsArrayContainingKeyTest.php
vendored
Normal file
62
vendor/hamcrest/hamcrest-php/tests/Hamcrest/Array/IsArrayContainingKeyTest.php
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
namespace Hamcrest\Arrays;
|
||||
|
||||
use Hamcrest\AbstractMatcherTest;
|
||||
|
||||
class IsArrayContainingKeyTest extends AbstractMatcherTest
|
||||
{
|
||||
|
||||
protected function createMatcher()
|
||||
{
|
||||
return IsArrayContainingKey::hasKeyInArray('irrelevant');
|
||||
}
|
||||
|
||||
public function testMatchesSingleElementArrayContainingKey()
|
||||
{
|
||||
$array = array('a'=>1);
|
||||
|
||||
$this->assertMatches(hasKey('a'), $array, 'Matches single key');
|
||||
}
|
||||
|
||||
public function testMatchesArrayContainingKey()
|
||||
{
|
||||
$array = array('a'=>1, 'b'=>2, 'c'=>3);
|
||||
|
||||
$this->assertMatches(hasKey('a'), $array, 'Matches a');
|
||||
$this->assertMatches(hasKey('c'), $array, 'Matches c');
|
||||
}
|
||||
|
||||
public function testMatchesArrayContainingKeyWithIntegerKeys()
|
||||
{
|
||||
$array = array(1=>'A', 2=>'B');
|
||||
|
||||
assertThat($array, hasKey(1));
|
||||
}
|
||||
|
||||
public function testMatchesArrayContainingKeyWithNumberKeys()
|
||||
{
|
||||
$array = array(1=>'A', 2=>'B');
|
||||
|
||||
assertThat($array, hasKey(1));
|
||||
|
||||
// very ugly version!
|
||||
assertThat($array, IsArrayContainingKey::hasKeyInArray(2));
|
||||
}
|
||||
|
||||
public function testHasReadableDescription()
|
||||
{
|
||||
$this->assertDescription('array with key "a"', hasKey('a'));
|
||||
}
|
||||
|
||||
public function testDoesNotMatchEmptyArray()
|
||||
{
|
||||
$this->assertMismatchDescription('array was []', hasKey('Foo'), array());
|
||||
}
|
||||
|
||||
public function testDoesNotMatchArrayMissingKey()
|
||||
{
|
||||
$array = array('a'=>1, 'b'=>2, 'c'=>3);
|
||||
|
||||
$this->assertMismatchDescription('array was ["a" => <1>, "b" => <2>, "c" => <3>]', hasKey('d'), $array);
|
||||
}
|
||||
}
|
36
vendor/hamcrest/hamcrest-php/tests/Hamcrest/Array/IsArrayContainingKeyValuePairTest.php
vendored
Normal file
36
vendor/hamcrest/hamcrest-php/tests/Hamcrest/Array/IsArrayContainingKeyValuePairTest.php
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
namespace Hamcrest\Arrays;
|
||||
|
||||
use Hamcrest\AbstractMatcherTest;
|
||||
|
||||
class IsArrayContainingKeyValuePairTest extends AbstractMatcherTest
|
||||
{
|
||||
|
||||
protected function createMatcher()
|
||||
{
|
||||
return IsArrayContainingKeyValuePair::hasKeyValuePair('irrelevant', 'irrelevant');
|
||||
}
|
||||
|
||||
public function testMatchesArrayContainingMatchingKeyAndValue()
|
||||
{
|
||||
$array = array('a'=>1, 'b'=>2);
|
||||
|
||||
$this->assertMatches(hasKeyValuePair(equalTo('a'), equalTo(1)), $array, 'matcherA');
|
||||
$this->assertMatches(hasKeyValuePair(equalTo('b'), equalTo(2)), $array, 'matcherB');
|
||||
$this->assertMismatchDescription(
|
||||
'array was ["a" => <1>, "b" => <2>]',
|
||||
hasKeyValuePair(equalTo('c'), equalTo(3)),
|
||||
$array
|
||||
);
|
||||
}
|
||||
|
||||
public function testDoesNotMatchNull()
|
||||
{
|
||||
$this->assertMismatchDescription('was null', hasKeyValuePair(anything(), anything()), null);
|
||||
}
|
||||
|
||||
public function testHasReadableDescription()
|
||||
{
|
||||
$this->assertDescription('array containing ["a" => <2>]', hasKeyValuePair(equalTo('a'), equalTo(2)));
|
||||
}
|
||||
}
|
50
vendor/hamcrest/hamcrest-php/tests/Hamcrest/Array/IsArrayContainingTest.php
vendored
Normal file
50
vendor/hamcrest/hamcrest-php/tests/Hamcrest/Array/IsArrayContainingTest.php
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
namespace Hamcrest\Arrays;
|
||||
|
||||
use Hamcrest\AbstractMatcherTest;
|
||||
|
||||
class IsArrayContainingTest extends AbstractMatcherTest
|
||||
{
|
||||
|
||||
protected function createMatcher()
|
||||
{
|
||||
return IsArrayContaining::hasItemInArray('irrelevant');
|
||||
}
|
||||
|
||||
public function testMatchesAnArrayThatContainsAnElementMatchingTheGivenMatcher()
|
||||
{
|
||||
$this->assertMatches(
|
||||
hasItemInArray('a'),
|
||||
array('a', 'b', 'c'),
|
||||
"should matches array that contains 'a'"
|
||||
);
|
||||
}
|
||||
|
||||
public function testDoesNotMatchAnArrayThatDoesntContainAnElementMatchingTheGivenMatcher()
|
||||
{
|
||||
$this->assertDoesNotMatch(
|
||||
hasItemInArray('a'),
|
||||
array('b', 'c'),
|
||||
"should not matches array that doesn't contain 'a'"
|
||||
);
|
||||
$this->assertDoesNotMatch(
|
||||
hasItemInArray('a'),
|
||||
array(),
|
||||
'should not match empty array'
|
||||
);
|
||||
}
|
||||
|
||||
public function testDoesNotMatchNull()
|
||||
{
|
||||
$this->assertDoesNotMatch(
|
||||
hasItemInArray('a'),
|
||||
null,
|
||||
'should not match null'
|
||||
);
|
||||
}
|
||||
|
||||
public function testHasAReadableDescription()
|
||||
{
|
||||
$this->assertDescription('an array containing "a"', hasItemInArray('a'));
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user