From 4c2ae5ab3e80f2fe4e04576ced4a68ffbf879127cdc9a1a98634666975654161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= Date: Thu, 14 Feb 2019 08:53:26 +0000 Subject: [PATCH] Accepting request 674883 from home:jayvdb:coala:python3-bears - Activate test suite - Update to v1.0.9 * Make 'stub' object callable * Build and doc enhancements - Remove superfluous devel dependency for noarch package - Switch to singlespec approach - Initial version for v1.0.8 OBS-URL: https://build.opensuse.org/request/show/674883 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-pretend?expand=0&rev=9 --- pretend-1.0.8.tar.gz | 3 - pretend-1.0.9.tar.gz | 3 + python-pretend.changes | 11 ++- python-pretend.spec | 10 ++- test_pretend.py | 184 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 204 insertions(+), 7 deletions(-) delete mode 100644 pretend-1.0.8.tar.gz create mode 100644 pretend-1.0.9.tar.gz create mode 100644 test_pretend.py diff --git a/pretend-1.0.8.tar.gz b/pretend-1.0.8.tar.gz deleted file mode 100644 index acac5cf..0000000 --- a/pretend-1.0.8.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:930f2c1e18503e8f8c403abe2e02166c4a881941745147e712cdd4f49f3fb964 -size 4848 diff --git a/pretend-1.0.9.tar.gz b/pretend-1.0.9.tar.gz new file mode 100644 index 0000000..acae45f --- /dev/null +++ b/pretend-1.0.9.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c90eb810cde8ebb06dafcb8796f9a95228ce796531bc806e794c2f4649aa1b10 +size 4848 diff --git a/python-pretend.changes b/python-pretend.changes index 048536a..3915466 100644 --- a/python-pretend.changes +++ b/python-pretend.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Thu Feb 14 08:25:57 UTC 2019 - John Vandenberg + +- Activate test suite +- Update to v1.0.9 + * Make 'stub' object callable + * Build and doc enhancements + ------------------------------------------------------------------- Tue Dec 4 12:51:39 UTC 2018 - Matej Cepl @@ -11,5 +19,4 @@ Thu Mar 16 14:48:02 UTC 2017 - tbechtold@suse.com ------------------------------------------------------------------- Mon Mar 31 14:59:55 UTC 2014 - speilicke@suse.com -- Initial version - +- Initial version for v1.0.8 diff --git a/python-pretend.spec b/python-pretend.spec index a5e37dc..51b5dfd 100644 --- a/python-pretend.spec +++ b/python-pretend.spec @@ -1,7 +1,7 @@ # # spec file for package python-pretend # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,13 +18,15 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-pretend -Version: 1.0.8 +Version: 1.0.9 Release: 0 Summary: A library for stubbing in Python License: BSD-3-Clause Group: Development/Languages/Python URL: https://github.com/alex/pretend Source: https://files.pythonhosted.org/packages/source/p/pretend/pretend-%{version}.tar.gz +Source1: https://raw.githubusercontent.com/alex/pretend/master/test_pretend.py +BuildRequires: %{python_module pytest} BuildRequires: %{python_module setuptools} BuildRequires: python-rpm-macros BuildArch: noarch @@ -35,6 +37,7 @@ Pretend is a library to make stubbing with Python easier. %prep %setup -q -n pretend-%{version} +cp %{SOURCE1} . %build %python_build @@ -42,6 +45,9 @@ Pretend is a library to make stubbing with Python easier. %install %python_install +%check +%python_exec -m pytest + %files %{python_files} %license LICENSE.rst %doc README.rst diff --git a/test_pretend.py b/test_pretend.py new file mode 100644 index 0000000..3e38622 --- /dev/null +++ b/test_pretend.py @@ -0,0 +1,184 @@ +import operator + +import pytest + +from pretend import stub, raiser, call, call_recorder, PY3K + + +class TestStub(object): + def test_attribute(self): + x = stub(attr=3) + assert hasattr(x, "attr") + assert x.attr == 3 + + def test_function(self): + x = stub(meth=lambda x, y: x + y) + assert x.meth(3, 4) == 7 + + def test_iter(self): + x = stub(__iter__=lambda: iter([1, 2, 3])) + iterator = iter(x) + assert next(iterator) == 1 + + @pytest.mark.skipif("not PY3K") + def test_next(self): + x = stub(__next__=lambda: 12) + assert next(x) == 12 + + def test_contains(self): + x = stub(__contains__=lambda other: True) + assert "hello world" in x + + @pytest.mark.skipif("PY3K") + def test_nonzero(self): + x = stub(__nonzero__=lambda: False) + assert not bool(x) + + @pytest.mark.skipif("not PY3K") + def test_bool(self): + x = stub(__bool__=lambda: False) + assert not bool(x) + + def test_len(self): + x = stub(__len__=lambda: 12) + assert len(x) == 12 + + @pytest.mark.parametrize(("func", "op"), [ + (operator.lt, "__lt__"), + (operator.le, "__le__"), + (operator.eq, "__eq__"), + (operator.ne, "__ne__"), + (operator.gt, "__gt__"), + (operator.ge, "__ge__"), + + (operator.add, "__add__"), + (operator.and_, "__and__"), + (divmod, "__divmod__"), + (operator.floordiv, "__floordiv__"), + (operator.lshift, "__lshift__"), + (operator.mod, "__mod__"), + (operator.mul, "__mul__"), + (operator.or_, "__or__"), + (operator.pow, "__pow__"), + (operator.rshift, "__rshift__"), + (operator.sub, "__sub__"), + (operator.truediv, "__truediv__"), + (operator.xor, "__xor__"), + ]) + def test_special_binops(self, func, op): + x = stub(**{ + op: lambda y: func(2, y) + }) + assert func(x, 4) == func(2, 4) + assert func(x, 2) == func(2, 2) + + @pytest.mark.skipif("PY3K") + def test_div(self): + x = stub( + __div__=lambda y: 4 + ) + assert x / 3 == 4 + + def test_missing_op_error(self): + x = stub() + with pytest.raises(TypeError): + x + 2 + + def test_subscript(self): + x = stub( + __getitem__=lambda idx: idx + ) + assert x[5] == 5 + assert x[1, 2] == (1, 2) + + def test_setitem(self): + d = {} + x = stub( + __setitem__=d.__setitem__ + ) + x[5] = 'a' + x['b'] = 6 + assert d == {5: 'a', 'b': 6} + + def test_delitem(self): + d = {5: 'a', 'b': 6} + x = stub( + __delitem__=d.__delitem__ + ) + del x['b'] + assert d == {5: 'a'} + + def test_context_manager(self): + should_reraise = True + x = stub( + __enter__=lambda: 3, + __exit__=lambda exc_type, exc_value, tb: should_reraise + ) + with x as value: + assert value == 3 + raise ValueError + should_reraise = False + with pytest.raises(ValueError): + with x as value: + assert value == 3 + raise ValueError + + def test_default_repr(self): + x = stub(a=10) + + assert repr(x) == "" + + def test_custom_repr(self): + x = stub(id=300, __repr__=lambda: '') + + assert x.id == 300 + assert repr(x) == '' + + def test_callable(self): + x = stub(__call__=lambda: 4) + + assert x() == 4 + + +class TestRaiser(object): + def test_call_raiser(self): + f = raiser(ValueError) + with pytest.raises(ValueError): + f() + + def test_call_raiser_exc_value(self): + exc = ValueError(14) + f = raiser(exc) + with pytest.raises(ValueError) as exc_info: + f() + assert exc_info.value is exc + + def test_non_exc_raiser(self): + with pytest.raises(TypeError): + raiser("test") + + +class TestCallRecorder(object): + def test_call_eq(self): + assert call(a=2) == call(a=2) + assert not (call(a=2) != call(a=2)) + assert call(a=2) != call(a=3) + assert not (call(a=2) == call(a=3)) + + assert call() != [] + + def test_call_repr(self): + assert repr(call(1, 2, a=3)) == "" + assert repr(call(a=2)) == "" + + def test_call_hash(self): + c1 = call(a=2) + c2 = call(a=2) + assert hash(c1) == hash(c2) + + def test_simple(self): + f = call_recorder(lambda *args, **kwargs: 3) + assert f() == 3 + assert f.calls == [ + call() + ]