Skip to main content

Test objects which pass equality checks with other objects

Project description

h-matchers

Test objects which pass equality checks with other objects

Usage

from h_matchers import Any
import re

assert [1, 2, ValueError(), print, print] == [
        Any(),
        Any.int(),
        Any.instance_of(ValueError),
        Any.function(),
        Any.callable()
    ]

assert ["easy", "string", "matching"] == [
        Any.string(),
        Any.string.containing("in"),
        Any.string.matching('^.*CHING!', re.IGNORECASE)
    ]

Comparing to collections

You can make basic comparisons to collections as follows:

Any.iterable()
Any.list()
Any.set()

You can specify a custom class with:

Any.iterable.of_type(MyCustomList)

Specifying size

You can also chain on to add requirements for the size.

Any.iterable.of_size(4)
Any.list.of_size(at_least=3)
Any.set.of_size(at_most=5)
Any.set.of_size(at_least=3, at_most=5)

Specifying specific content

You can require an iterable to have a minimum number of items, with repetitions , optionally in order:

Any.iterable.containing([1])
Any.list.containing([1, 2, 2])
Any.list.containing([1, 2, 2]).in_order()

This will match if the sequence is found any where in the iterable.

You can also say that there cannot be any extra items in the iterable:

Any.set.containing({2, 3, 4}).only()
Any.list.containing([1, 2, 2, 3]).only().in_order()

All of this should work with non-hashable items too as long as the items test as equal:

Any.set.containing([{'a': 1}, {'b': 2}])

Specifying every item must match something

You can specify that every item in the collection must match a certain item. You can also pass matchers to this:

Any.list.comprised_of(Any.string).of_size(6)
Any.iterable.comprised_of(True)

Comparing to dicts

Basic comparisons are available:

Any.iterable()
Any.dict()

Most things for collections go for dicts too

Any.dict.of_size(at_most=4)
Any.dict.containing(['key_1', 'key_2']).only()

You can test for key value pairs

Any.dict.containing({'a': 5, 'b': 6})
Any.dict.containing({'a': 5, 'b': 6}).only()

Hacking

Installing h-matchers in a development environment

You will need

  • Git

  • pyenv Follow the instructions in the pyenv README to install it. The Homebrew method works best on macOS. On Ubuntu follow the Basic GitHub Checkout method.

Clone the git repo

git clone https://github.com/hypothesis/h-matchers.git

This will download the code into a h-matchers directory in your current working directory. You need to be in the h-matchers directory for the rest of the installation process:

cd h-matchers

Run the tests

make test

That's it! You’ve finished setting up your h-matchers development environment. Run make help to see all the commands that're available for linting, code formatting, packaging, etc.

Updating the Cookiecutter scaffolding

This project was created from the https://github.com/hypothesis/h-cookiecutter-pypackage/ template. If h-cookiecutter-pypackage itself has changed since this project was created, and you want to update this project with the latest changes, you can "replay" the cookiecutter over this project. Run:

make template

This will change the files in your working tree, applying the latest updates from the h-cookiecutter-pypackage template. Inspect and test the changes, do any fixups that are needed, and then commit them to git and send a pull request.

If you want make template to skip certain files, never changing them, add these files to "options.disable_replay" in .cookiecutter.json and commit that to git.

If you want make template to update a file that's listed in disable_replay simply delete that file and then run make template, it'll recreate the file for you.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

h_matchers-1.2.0.tar.gz (10.5 kB view hashes)

Uploaded Source

Built Distribution

h_matchers-1.2.0-py3-none-any.whl (14.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page