https://github.com/wmde/hamcrest-html-matchers
Set of Hamcrest matchers for HTML assertrions
https://github.com/wmde/hamcrest-html-matchers
assert assertion-library hamcrest html html-assertrions matcher testing
Last synced: 13 days ago
JSON representation
Set of Hamcrest matchers for HTML assertrions
- Host: GitHub
- URL: https://github.com/wmde/hamcrest-html-matchers
- Owner: wmde
- License: other
- Created: 2017-01-24T12:00:03.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2025-01-28T22:27:50.000Z (3 months ago)
- Last Synced: 2025-03-27T22:22:54.690Z (30 days ago)
- Topics: assert, assertion-library, hamcrest, html, html-assertrions, matcher, testing
- Language: PHP
- Size: 120 KB
- Stars: 1
- Watchers: 22
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: COPYING
Awesome Lists containing this project
README
This is the set of Hamcrest matchers for HTML assertions
========================================================
[](https://github.com/wmde/hamcrest-html-matchers/actions/workflows/php.yml)
[](https://scrutinizer-ci.com/g/wmde/hamcrest-html-matchers/?branch=master)
[](https://scrutinizer-ci.com/g/wmde/hamcrest-html-matchers/?branch=master)Usage examples
--------------
Hamcrest allows you to create pretty complicated and flexible assertions. Just remember:*"You can" does not mean "you should".*
The following example shows how we can ensure that there is an HTML form and password entered in it is not weak:
```php
$html = '';
assertThat($html, is(htmlPiece(
havingChild(
both(withTagName('form'))
->andAlso(
havingDirectChild(
allOf(
withTagName('input'),
withAttribute('name')->havingValue('password'),
withAttribute('value')->havingValue(not('weak password')))))))));
```
Usage limitations:
* Each HTML assertion starts with `htmlPiece()` call (`is()` can be used to improve readability)
* One of `havingRootElement()`, `havingDirectChild()` or `havingChild()` needed to be passed as an argument to `htmlPiece()`Documentation
-------------
Information about general Hamcrest usage can be found at [Hamcrest GitHub repository](https://github.com/hamcrest/hamcrest-php).Available Matchers
', is(htmlPiece())); // Just checking that string is a valid piece of HTML
------------------
* `htmlPiece()` - checks that string is a valid HTML, parses it and passes control to given matcher if one present
```php
assertThat('
```
* `havingRootElement` - checks given constraint against root element of HTML. *NOTE: Can be passed only to `htmlPiece()`*
```php
assertThat('', htmlPiece(havingRootElement(withTagName('p'))));
```* `havingDirectChild` - checks given constraint against direct children
```php
assertThat('', htmlPiece(havingRootElement(havingDirectChild(withTagName('b')))));
```* `havingChild` - checks given constraint against all children
```php
assertThat('', htmlPiece(havingChild(withTagName('b'))));
```* `withTagName` - checks given constraint against tag name
```php
assertThat('', htmlPiece(havingChild(withTagName(
either(equalTo('i'))->orElse(equalTo('b'))
))));
```* `withAttribute` - checks given constraint against elements attributes comparing names and values
', htmlPiece(havingChild(withAttribute('required'))));
```php
assertThat('
```
```php
assertThat('', htmlPiece(havingChild(
withAttribute(startsWith('data-'))->havingValue('some data'))));
```
* `withClass` - checks given constraint against element's class list
```php
assertThat('', htmlPiece(havingChild(
withClass('class2'))));
```* `havingTextContents` - checks given constraint against elements text contents
```php
assertThat('', htmlPiece(havingChild(this is Some Text
havingTextContents(containsString('some text')->ignoringCase()))));
```* `tagMatchingOutline` - tolerantly checks that tag matches given *outline* (*outline* - tag representation in HTML format)
That means:
* Element's tag name is equal to outline's tag name
* Element has all the attributes that outline has with the same values. If element has more attributes than outline it still matches.
* **NOTE:** Attribute `class` is treated in a different manner (see further).
* **NOTE:** If attribute outlined is boolean, then its value in element won't be checked, just presence.
* Element has all html classes that outline has.
This will pass:
```php
assertThat('',
htmlPiece(havingChild(
tagMatchingOutline('')
)));
```