54 lines
2.3 KiB
Markdown
54 lines
2.3 KiB
Markdown
|
This is the PHP port of Hamcrest Matchers
|
||
|
=========================================
|
||
|
|
||
|
[![Build Status](https://travis-ci.org/hamcrest/hamcrest-php.png?branch=master)](https://travis-ci.org/hamcrest/hamcrest-php)
|
||
|
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/hamcrest/hamcrest-php/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/hamcrest/hamcrest-php/?branch=master)
|
||
|
[![Code Coverage](https://scrutinizer-ci.com/g/hamcrest/hamcrest-php/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/hamcrest/hamcrest-php/?branch=master)
|
||
|
|
||
|
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'));
|
||
|
```
|