Metadata-Version: 2.1
Name: pytest-monkeyplus
Version: 1.1.0
Summary: pytest's monkeypatch subclass with extra functionalities
Home-page: http://bitbucket.org/hsoft/pytest-monkeyplus/
Author: Virgil Dupras
Author-email: hsoft@hardcoded.net
License: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python :: 3

===========================================
pytest-monkeyplus - monkeypatch with extras
===========================================

The ``monkeyplus`` plugin is a funcarg that subclasses ``monkeypatch`` and adds 
a few extra features to it.

Extra features
--------------

``monkeyplus`` has three extra methods: ``patch_osstat``, ``patch_today`` and
``patch_time_ticking``.

``patch_osstat(path, **osstat_attrs)``

Patching ``os.stat`` is tricky because you usually want to patch only one file,
not the whole filesystem. Moreover, to patch it properly, you have to return a
full ``stat_result`` structure. ``patch_osstat`` takes care of this stuff.
Just call it with a path to patch and keyword arguments for the stat attributes
you want, for example::

    monkeyplus.patch_osstat('foo/bar', st_mtime=42)

Arguments that are not specified will be assigned a default value.

``patch_today(year, month, day)``

Patching dates can be tricky because there's a couple of time relates modules,
namely ``datetime`` and ``time``. If you want your patch to affect the whole app
uniformly, you have to patch the ``time`` module, not the ``datetime`` module.
The arithmetics to transform a year/month/day value in a suitable ``time.time``
value are non-trivial, so it can get boring to repeat. Call ``patch_today`` with
the date you'd like the app to be patched to, example::

    monkeyplus.patch_today(2011, 2, 16)

``patch_time_ticking(force_int_diff=False)``

This monkeypatch ensures that all ``time.time()`` calls yield different results (and increasing). On
many platforms, this is already guaranteed, but not on all of them.

If ``force_int_diff`` is True, the patch ensures that all ``int(time.time())`` calls yield different
results. Note that it also means that the patches function will return ``int`` values.

Replacing monkeypatch
---------------------

``monkeyplus`` is a subclass of ``monkeypatch``, so it can be used everywhere
``monkeypatch`` is used. Instead of having to use a different funcarg, you can
replace ``monkeypatch`` by putting this in your ``conftest.py`` file::

    def pytest_funcarg__monkeypatch(request):
        monkeyplus = request.getfuncargvalue('monkeyplus')
        return monkeyplus

Contributions welcome
---------------------

For now, ``monkeyplus`` is a plugin that reflect my own needs, but if you'd like
to contribute new features to it, they're welcome. The source is hosted at http://bitbucket.org/hsoft/pytest-monkeyplus


Changes
=======

Version 1.1.0 -- 2012-09-18
---------------------------

* Added patch_time_ticking() function.

Version 1.0.0 -- 2011-02-16
---------------------------

* Initial Release


