Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-flexmock for openSUSE:Factory
checked in at 2021-09-03 21:26:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-flexmock (Old)
and /work/SRC/openSUSE:Factory/.python-flexmock.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-flexmock"
Fri Sep 3 21:26:06 2021 rev:5 rq:915211 version:0.10.8
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-flexmock/python-flexmock.changes
2019-04-02 09:21:52.216687124 +0200
+++
/work/SRC/openSUSE:Factory/.python-flexmock.new.1899/python-flexmock.changes
2021-09-03 21:26:53.094224877 +0200
@@ -1,0 +2,21 @@
+Tue Aug 31 08:53:33 UTC 2021 - Steve Kowalik <[email protected]>
+
+- Update to 0.10.8:
+ * Fix with_args not working built-in functions.
+
+-------------------------------------------------------------------
+Wed Aug 25 09:55:08 UTC 2021 - John Paul Adrian Glaubitz
<[email protected]>
+
+- Update to 0.10.7:
+ - Fix ``with_args`` not working built-in functions and methods.
+ - Fix previous pytest ``--durations`` fix not working.
+- from version 0.10.6
+ - Fix flexmock broken with Pytest 4 & 5.
+ - Fix new_instances method not working with Python 2.7.
+ - Fix multiple expectations for the same classmethod are not matched.
+- from version 0.10.5
+ - Improve error message on unmatched method signature expectation.
+ - Fix using ``should_call`` passes wrong ``runtime_self``.
+ - Fix pytest ``--durations`` flag when flexmock is installed.
+
+-------------------------------------------------------------------
@@ -38 +58,0 @@
-
Old:
----
flexmock-0.10.4.tar.gz
New:
----
flexmock-0.10.8.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-flexmock.spec ++++++
--- /var/tmp/diff_new_pack.Exg9Lf/_old 2021-09-03 21:26:53.574225825 +0200
+++ /var/tmp/diff_new_pack.Exg9Lf/_new 2021-09-03 21:26:53.574225825 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-flexmock
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,11 +18,10 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-flexmock
-Version: 0.10.4
+Version: 0.10.8
Release: 0
Summary: Testing library for creating mocks, stubs and fakes
License: BSD-2-Clause
-Group: Development/Languages/Python
URL: https://github.com/bkabrda/flexmock
Source:
https://files.pythonhosted.org/packages/source/f/flexmock/flexmock-%{version}.tar.gz
BuildRequires: %{python_module pytest}
++++++ flexmock-0.10.4.tar.gz -> flexmock-0.10.8.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flexmock-0.10.4/CHANGELOG
new/flexmock-0.10.8/CHANGELOG
--- old/flexmock-0.10.4/CHANGELOG 2019-03-25 10:58:29.000000000 +0100
+++ new/flexmock-0.10.8/CHANGELOG 2021-08-28 02:15:25.000000000 +0200
@@ -1,3 +1,56 @@
+This project follows semantic versioning.
+
+Types of changes:
+
+- **Added**: New features.
+- **Changed**: Changes in existing functionality.
+- **Deprecated**: Soon-to-be removed features.
+- **Removed**: Removed features.
+- **Fixed**: Bug fixes.
+- **Infrastructure**: Changes in build or deployment infrastructure.
+- **Documentation**: Changes in documentation.
+
+Release 0.10.8
+--------------
+
+Fixed
+#####
+
+- Fix ``with_args`` not working built-in functions.
+
+Release 0.10.7
+--------------
+
+Fixed
+#####
+
+- Fix ``with_args`` not working built-in methods.
+- Fix previous pytest ``--durations`` fix not working.
+
+Release 0.10.6
+--------------
+
+Fixed
+#####
+
+- Fix flexmock broken with Pytest 4 & 5.
+- Fix new_instances method not working with Python 2.7.
+- Fix multiple expectations for the same classmethod are not matched.
+
+Release 0.10.5
+--------------
+
+Added
+#####
+
+- Improve error message on unmatched method signature expectation.
+
+Fixed
+#####
+
+- Fix using ``should_call`` passes wrong ``runtime_self``.
+- Fix pytest ``--durations`` flag when flexmock is installed.
+
Release 0.10.4
--------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flexmock-0.10.4/PKG-INFO new/flexmock-0.10.8/PKG-INFO
--- old/flexmock-0.10.4/PKG-INFO 2019-03-25 11:04:06.000000000 +0100
+++ new/flexmock-0.10.8/PKG-INFO 2021-08-28 02:20:22.439960200 +0200
@@ -1,44 +1,11 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: flexmock
-Version: 0.10.4
+Version: 0.10.8
Summary: flexmock is a testing library for Python that makes it easy to create
mocks,stubs and fakes.
Home-page: http://flexmock.readthedocs.org
Author: Slavek Kabrda, Herman Sheremetyev
Author-email: [email protected]
License: BSD License
-Description: flexmock
- ========
-
- .. image:: https://travis-ci.org/bkabrda/flexmock.svg?branch=master
- :target: https://travis-ci.org/bkabrda/flexmock
-
- .. image::
https://coveralls.io/repos/bkabrda/flexmock/badge.svg?branch=master&service=github
- :target: https://coveralls.io/github/bkabrda/flexmock?branch=master
-
- flexmock is a testing library for Python that makes it easy to create
mocks, stubs and fakes.
- ::
-
- from flexmock import flexmock
- flexmock(pirate).should_receive('drink').with_args('full
bottle').and_return('empty bottle')
-
- Its API is inspired by a Ruby library of the same name. However, it is
not a goal of Python flexmock to be a clone of the Ruby version. Instead, the
focus is on providing full support for testing Python programs and making the
creation of fake objects as unobtrusive as possible.
-
- As a result, Python flexmock removes a number of redundancies in the
Ruby flexmock API, alters some defaults, and introduces a number of Python-only
features.
-
- flexmock???s design focuses on simplicity and intuitivenes. This means
that the API is as lean as possible, though a few convenient short-hand methods
are provided to aid brevity and readability.
-
- flexmock declarations are structured to read more like English
sentences than API calls, and it is possible to chain them together in any
order to achieve high degree of expressiveness in a single line of code.
-
- In addition, flexmock integrates seamlessly with all major test
runners to reduce even more mock-related boilerplate code.
-
- More details, including full API and user documentation, available
here:
-
- https://flexmock.readthedocs.org
-
- To report bugs or file feature requests:
-
- https://github.com/bkabrda/flexmock/issues
-
Keywords: flexmock mock stub test unittest pytest nose
Platform: UNKNOWN
Classifier: License :: OSI Approved :: BSD License
@@ -49,3 +16,39 @@
Classifier: Programming Language :: Python :: Implementation :: Jython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Testing
+License-File: LICENSE
+
+flexmock
+========
+
+.. image:: https://travis-ci.org/bkabrda/flexmock.svg?branch=master
+ :target: https://travis-ci.org/bkabrda/flexmock
+
+.. image::
https://coveralls.io/repos/bkabrda/flexmock/badge.svg?branch=master&service=github
+ :target: https://coveralls.io/github/bkabrda/flexmock?branch=master
+
+flexmock is a testing library for Python that makes it easy to create mocks,
stubs and fakes.
+::
+
+ from flexmock import flexmock
+ flexmock(pirate).should_receive('drink').with_args('full
bottle').and_return('empty bottle')
+
+Its API is inspired by a Ruby library of the same name. However, it is not a
goal of Python flexmock to be a clone of the Ruby version. Instead, the focus
is on providing full support for testing Python programs and making the
creation of fake objects as unobtrusive as possible.
+
+As a result, Python flexmock removes a number of redundancies in the Ruby
flexmock API, alters some defaults, and introduces a number of Python-only
features.
+
+flexmock???s design focuses on simplicity and intuitivenes. This means that
the API is as lean as possible, though a few convenient short-hand methods are
provided to aid brevity and readability.
+
+flexmock declarations are structured to read more like English sentences than
API calls, and it is possible to chain them together in any order to achieve
high degree of expressiveness in a single line of code.
+
+In addition, flexmock integrates seamlessly with all major test runners to
reduce even more mock-related boilerplate code.
+
+More details, including full API and user documentation, available here:
+
+https://flexmock.readthedocs.org
+
+To report bugs or file feature requests:
+
+https://github.com/bkabrda/flexmock/issues
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flexmock-0.10.4/docs/conf.py
new/flexmock-0.10.8/docs/conf.py
--- old/flexmock-0.10.4/docs/conf.py 2019-03-25 10:58:48.000000000 +0100
+++ new/flexmock-0.10.8/docs/conf.py 2021-08-28 02:17:37.000000000 +0200
@@ -51,7 +51,7 @@
# built documents.
#
# The short X.Y version.
-version = '0.10.4'
+version = '0.10.8'
# The full version, including alpha/beta/rc tags.
release = version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flexmock-0.10.4/flexmock.egg-info/PKG-INFO
new/flexmock-0.10.8/flexmock.egg-info/PKG-INFO
--- old/flexmock-0.10.4/flexmock.egg-info/PKG-INFO 2019-03-25
11:04:06.000000000 +0100
+++ new/flexmock-0.10.8/flexmock.egg-info/PKG-INFO 2021-08-28
02:20:22.000000000 +0200
@@ -1,44 +1,11 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: flexmock
-Version: 0.10.4
+Version: 0.10.8
Summary: flexmock is a testing library for Python that makes it easy to create
mocks,stubs and fakes.
Home-page: http://flexmock.readthedocs.org
Author: Slavek Kabrda, Herman Sheremetyev
Author-email: [email protected]
License: BSD License
-Description: flexmock
- ========
-
- .. image:: https://travis-ci.org/bkabrda/flexmock.svg?branch=master
- :target: https://travis-ci.org/bkabrda/flexmock
-
- .. image::
https://coveralls.io/repos/bkabrda/flexmock/badge.svg?branch=master&service=github
- :target: https://coveralls.io/github/bkabrda/flexmock?branch=master
-
- flexmock is a testing library for Python that makes it easy to create
mocks, stubs and fakes.
- ::
-
- from flexmock import flexmock
- flexmock(pirate).should_receive('drink').with_args('full
bottle').and_return('empty bottle')
-
- Its API is inspired by a Ruby library of the same name. However, it is
not a goal of Python flexmock to be a clone of the Ruby version. Instead, the
focus is on providing full support for testing Python programs and making the
creation of fake objects as unobtrusive as possible.
-
- As a result, Python flexmock removes a number of redundancies in the
Ruby flexmock API, alters some defaults, and introduces a number of Python-only
features.
-
- flexmock???s design focuses on simplicity and intuitivenes. This means
that the API is as lean as possible, though a few convenient short-hand methods
are provided to aid brevity and readability.
-
- flexmock declarations are structured to read more like English
sentences than API calls, and it is possible to chain them together in any
order to achieve high degree of expressiveness in a single line of code.
-
- In addition, flexmock integrates seamlessly with all major test
runners to reduce even more mock-related boilerplate code.
-
- More details, including full API and user documentation, available
here:
-
- https://flexmock.readthedocs.org
-
- To report bugs or file feature requests:
-
- https://github.com/bkabrda/flexmock/issues
-
Keywords: flexmock mock stub test unittest pytest nose
Platform: UNKNOWN
Classifier: License :: OSI Approved :: BSD License
@@ -49,3 +16,39 @@
Classifier: Programming Language :: Python :: Implementation :: Jython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Testing
+License-File: LICENSE
+
+flexmock
+========
+
+.. image:: https://travis-ci.org/bkabrda/flexmock.svg?branch=master
+ :target: https://travis-ci.org/bkabrda/flexmock
+
+.. image::
https://coveralls.io/repos/bkabrda/flexmock/badge.svg?branch=master&service=github
+ :target: https://coveralls.io/github/bkabrda/flexmock?branch=master
+
+flexmock is a testing library for Python that makes it easy to create mocks,
stubs and fakes.
+::
+
+ from flexmock import flexmock
+ flexmock(pirate).should_receive('drink').with_args('full
bottle').and_return('empty bottle')
+
+Its API is inspired by a Ruby library of the same name. However, it is not a
goal of Python flexmock to be a clone of the Ruby version. Instead, the focus
is on providing full support for testing Python programs and making the
creation of fake objects as unobtrusive as possible.
+
+As a result, Python flexmock removes a number of redundancies in the Ruby
flexmock API, alters some defaults, and introduces a number of Python-only
features.
+
+flexmock???s design focuses on simplicity and intuitivenes. This means that
the API is as lean as possible, though a few convenient short-hand methods are
provided to aid brevity and readability.
+
+flexmock declarations are structured to read more like English sentences than
API calls, and it is possible to chain them together in any order to achieve
high degree of expressiveness in a single line of code.
+
+In addition, flexmock integrates seamlessly with all major test runners to
reduce even more mock-related boilerplate code.
+
+More details, including full API and user documentation, available here:
+
+https://flexmock.readthedocs.org
+
+To report bugs or file feature requests:
+
+https://github.com/bkabrda/flexmock/issues
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flexmock-0.10.4/flexmock.py
new/flexmock-0.10.8/flexmock.py
--- old/flexmock-0.10.4/flexmock.py 2019-03-25 10:59:04.000000000 +0100
+++ new/flexmock-0.10.8/flexmock.py 2021-08-28 02:17:21.000000000 +0200
@@ -25,7 +25,7 @@
# from flexmock import * is evil, keep it from doing any damage
__all__ = ['flexmock']
-__version__ = '0.10.4'
+__version__ = '0.10.8'
import inspect
@@ -33,7 +33,6 @@
import sys
import types
-
AT_LEAST = 'at least'
AT_MOST = 'at most'
EXACTLY = 'exactly'
@@ -247,21 +246,25 @@
if isinstance(self._mock, Mock):
return # no sense in enforcing this for fake objects
allowed = self.argspec
- # we consider object a method for purposes or not counting
"self"/"cls" as argument if:
- # - one of inspect.ismethod, inspect.isfunction, _isclass return True
- # (in Python 3 it's sometimes impossible to tell whether callable
is method or not,
- # so we try both inspect.ismethod and inspect.isfunction; classes
are callable too -
- # they have __init__)
- # - it's not a static method
- # - the mocked object is a module - module "methods" are in fact
plain functions;
- # unless they're classes, which means they still have __init__
- is_method = ((inspect.ismethod(self.original) or
inspect.isfunction(self.original)
- or _isclass(self.original)) and
- self.method_type is not staticmethod and
- (not isinstance(self._mock, types.ModuleType) or
- _isclass(self.original)))
args_len = len(allowed.args)
- if is_method:
+
+ # self is the first expected argument
+ has_self = allowed.args and allowed.args[0] == "self"
+ # Builtin methods take `self` as the first argument but
`inspect.ismethod` returns False
+ # so we need to check for them explicitly
+ is_builtin_method = isinstance(self.original, types.BuiltinMethodType)
and has_self
+ # Methods take `self` if not a staticmethod
+ is_method = inspect.ismethod(self.original) and self.method_type is
not staticmethod
+ # Class init takes `self`
+ is_class = inspect.isclass(self.original)
+ # When calling class methods or instance methods on a class method
takes `cls`
+ is_class_method = (
+ inspect.isfunction(self.original)
+ and inspect.isclass(self._mock)
+ and self.method_type is not staticmethod
+ )
+ if is_builtin_method or is_method or is_class or is_class_method:
+ # Do not count `self` or `cls`.
args_len -= 1
minimum = args_len - (allowed.defaults and len(allowed.defaults) or 0)
maximum = None
@@ -834,20 +837,29 @@
def _update_method(self, expectation, name):
method_instance = self._create_mock_method(name)
obj = self._object
- if _hasattr(obj, name) and not hasattr(expectation, 'original'):
- expectation._update_original(name, obj)
- method_type = type(_getattr(expectation, 'original'))
- try:
- # TODO(herman): this is awful, fix this properly.
- # When a class/static method is mocked out on an *instance*
- # we need to fetch the type from the class
- method_type = type(_getattr(obj.__class__, name))
- except:
- pass
- if method_type in SPECIAL_METHODS:
- expectation.original_function = getattr(obj, name)
- expectation.method_type = method_type
- override = _setattr(obj, name, types.MethodType(method_instance, obj))
+ if _hasattr(obj, name):
+ if hasattr(expectation, 'original'):
+ expectation.method_type = type(_getattr(expectation,
'original'))
+ else:
+ expectation._update_original(name, obj)
+ method_type = type(_getattr(expectation, 'original'))
+ try:
+ # TODO(herman): this is awful, fix this properly.
+ # When a class/static method is mocked out on an *instance*
+ # we need to fetch the type from the class
+ method_type = type(_getattr(obj.__class__, name))
+ except:
+ pass
+ if method_type in SPECIAL_METHODS:
+ expectation.original_function = getattr(obj, name)
+ expectation.method_type = method_type
+ if (
+ not _isclass(obj)
+ or expectation.method_type in SPECIAL_METHODS
+ or name == '__new__'
+ ):
+ method_instance = types.MethodType(method_instance, obj)
+ override = _setattr(obj, name, method_instance)
expectation._local_override = override
if (override and not _isclass(obj) and not isinstance(obj, Mock) and
hasattr(obj.__class__, name)):
@@ -946,45 +958,56 @@
(expected_values[0].value, return_values)))
return return_values
+ def _handle_matched_expectation(expectation, runtime_self, *kargs,
**kwargs):
+ if not expectation.runnable():
+ raise StateError('%s expected to be called when %s is True' %
+ (name, expectation._get_runnable()))
+ expectation.times_called += 1
+ expectation.verify(final=False)
+ _pass_thru = _getattr(expectation, '_pass_thru')
+ _replace_with = _getattr(expectation, '_replace_with')
+ if _pass_thru:
+ return pass_thru(expectation, runtime_self, *kargs, **kwargs)
+ elif _replace_with:
+ return _replace_with(*kargs, **kwargs)
+ return_values = _getattr(expectation, 'return_values')
+ if return_values:
+ return_value = return_values[0]
+ del return_values[0]
+ return_values.append(return_value)
+ else:
+ return_value = ReturnValue()
+ if return_value.raises:
+ if _isclass(return_value.raises):
+ raise return_value.raises(
+ *return_value.value['kargs'],
**return_value.value['kwargs'])
+ else:
+ raise return_value.raises
+ else:
+ return return_value.value
+
def mock_method(runtime_self, *kargs, **kwargs):
arguments = {'kargs': kargs, 'kwargs': kwargs}
expectation = FlexmockContainer.get_flexmock_expectation(
self, name, arguments)
if expectation:
- if not expectation.runnable():
- raise StateError('%s expected to be called when %s is
True' %
- (name, expectation._get_runnable()))
- expectation.times_called += 1
- expectation.verify(final=False)
- _pass_thru = _getattr(expectation, '_pass_thru')
- _replace_with = _getattr(expectation, '_replace_with')
- if _pass_thru:
- return pass_thru(expectation, runtime_self, *kargs,
**kwargs)
- elif _replace_with:
- return _replace_with(*kargs, **kwargs)
- return_values = _getattr(expectation, 'return_values')
- if return_values:
- return_value = return_values[0]
- del return_values[0]
- return_values.append(return_value)
- else:
- return_value = ReturnValue()
- if return_value.raises:
- if _isclass(return_value.raises):
- raise return_value.raises(
- *return_value.value['kargs'],
**return_value.value['kwargs'])
- else:
- raise return_value.raises
- else:
- return return_value.value
- else:
- # make sure to clean up expectations to ensure none of them
- # interfere with the runner's error reporing mechanism
- # e.g. open()
- for _, expectations in
FlexmockContainer.flexmock_objects.items():
- for expectation in expectations:
- _getattr(expectation, 'reset')()
- raise MethodSignatureError(_format_args(name, arguments))
+ return _handle_matched_expectation(expectation, runtime_self,
*kargs, **kwargs)
+ # inform the user which expectation(s) for the method were _not_
matched
+ expectations = [
+ e for e in
reversed(FlexmockContainer.flexmock_objects.get(self, []))
+ if e.name == name
+ ]
+ error_msg = _format_args(name, arguments)
+ if expectations:
+ for e in expectations:
+ error_msg += '\nDid not match expectation %s' %
_format_args(name, e.args)
+ # make sure to clean up expectations to ensure none of them
+ # interfere with the runner's error reporting mechanism
+ # e.g. open()
+ for _, expectations in FlexmockContainer.flexmock_objects.items():
+ for expectation in expectations:
+ _getattr(expectation, 'reset')()
+ raise MethodSignatureError(error_msg)
return mock_method
@@ -1233,6 +1256,9 @@
return ret
if hasattr(runner.CallInfo, "from_call"):
teardown = runner.CallInfo.from_call(flexmock_teardown,
when=when)
+ if hasattr(teardown, "duration"):
+ # CallInfo.duration only available in Pytest 6+
+ teardown.duration = ret.duration
else:
teardown = runner.CallInfo(flexmock_teardown, when=when)
teardown.result = None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flexmock-0.10.4/setup.py new/flexmock-0.10.8/setup.py
--- old/flexmock-0.10.4/setup.py 2019-03-25 10:59:17.000000000 +0100
+++ new/flexmock-0.10.8/setup.py 2021-08-28 02:17:30.000000000 +0200
@@ -6,7 +6,7 @@
from distutils.core import setup
setup(name='flexmock',
- version='0.10.4',
+ version='0.10.8',
author='Slavek Kabrda, Herman Sheremetyev',
author_email='[email protected]',
url='http://flexmock.readthedocs.org',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flexmock-0.10.4/tests/flexmock_test.py
new/flexmock-0.10.8/tests/flexmock_test.py
--- old/flexmock-0.10.4/tests/flexmock_test.py 2019-03-14 15:13:41.000000000
+0100
+++ new/flexmock-0.10.8/tests/flexmock_test.py 2021-08-28 02:15:25.000000000
+0200
@@ -1,4 +1,4 @@
-# -*- coding: utf8 -*-
+# -*- coding: utf-8 -*-
from flexmock import EXACTLY
from flexmock import AT_LEAST
from flexmock import AT_MOST
@@ -18,6 +18,8 @@
from flexmock import _format_args
from flexmock import _isproperty
import flexmock
+import random
+import os
import re
import sys
import unittest
@@ -32,6 +34,18 @@
module_level_attribute = 'test'
+class SomeClass:
+ @classmethod
+ def class_method(cls, a):
+ pass
+
+ @staticmethod
+ def static_method(a):
+ pass
+
+ def instance_method(self, a):
+ pass
+
class OldStyleClass:
pass
@@ -296,6 +310,24 @@
assertEqual('got an int', mock.method_foo(23))
assertRaises(MethodSignatureError, mock.method_foo, 2.0)
+ def test_with_args_should_work_with_builtin_c_methods(self):
+ if sys.version_info > (3, 0):
+ flexmock(sys.stdout).should_call("write") # set fall-through
+
flexmock(sys.stdout).should_receive("write").with_args("flexmock_builtin_test").once()
+ sys.stdout.write("flexmock_builtin_test")
+
+ def test_with_args_should_work_with_builtin_c_functions(self):
+ mocked = flexmock(sys)
+ mocked.should_receive("exit").with_args(1).once()
+ mocked.exit(1)
+ self._tear_down()
+ flexmock(os).should_receive("remove").with_args("path").once()
+ os.remove("path")
+
+ def test_with_args_should_work_with_builtin_python_methods(self):
+ flexmock(random).should_receive("randint").with_args(1, 10).once()
+ random.randint(1, 10)
+
def
test_flexmock_should_match_expectations_against_user_defined_classes(self):
mock = flexmock(name='temp')
@@ -514,15 +546,58 @@
def test_should_call_on_class_mock(self):
class User:
- def foo(self): return 'class'
+ def __init__(self):
+ self.value = 'value'
+
+ def foo(self):
+ return 'class'
+
+ def bar(self):
+ return self.value
+
user1 = User()
user2 = User()
+
+ # Access class-level method
flexmock(User).should_call('foo').once()
assertRaises(MethodCallError, self._tear_down)
flexmock(User).should_call('foo').twice()
assertEqual('class', user1.foo())
assertEqual('class', user2.foo())
+ # Access instance attributes
+ flexmock(User).should_call('bar').once()
+ assertRaises(MethodCallError, self._tear_down)
+ flexmock(User).should_call('bar').twice()
+ assertEqual('value', user1.bar())
+ assertEqual('value', user2.bar())
+
+ # Try resetting the expectation
+ flexmock(User).should_call('bar').once()
+ assertEqual('value', user1.bar())
+
+ def test_with_args_on_class_mock(self):
+ # Instance method
+
flexmock(SomeClass).should_receive("instance_method").with_args("red").once()
+
flexmock(SomeClass).should_receive("instance_method").with_args("blue").once()
+ instance = SomeClass()
+ instance.instance_method("red")
+ instance.instance_method("blue")
+ self._tear_down()
+
+ # Class method
+
flexmock(SomeClass).should_receive("class_method").with_args("red").once()
+
flexmock(SomeClass).should_receive("class_method").with_args("blue").once()
+ SomeClass.class_method("red")
+ SomeClass.class_method("blue")
+ self._tear_down()
+
+ # Static method
+
flexmock(SomeClass).should_receive("static_method").with_args("red").once()
+
flexmock(SomeClass).should_receive("static_method").with_args("blue").once()
+ SomeClass.static_method("red")
+ SomeClass.static_method("blue")
+
def
test_flexmock_should_not_blow_up_on_should_call_for_class_methods(self):
class User:
@classmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flexmock-0.10.4/tests/run_tests.sh
new/flexmock-0.10.8/tests/run_tests.sh
--- old/flexmock-0.10.4/tests/run_tests.sh 2019-01-10 13:54:09.000000000
+0100
+++ new/flexmock-0.10.8/tests/run_tests.sh 2021-08-28 02:15:18.000000000
+0200
@@ -1,7 +1,7 @@
#!/bin/bash
PYTHON_IMPLEMENTATIONS=${PYTHON_IMPLEMENTATIONS:-"python pypy jython"}
-python_VERSIONS=${PYTHON_VERSIONS:-"2.7 3.3 3.4 3.5"}
+python_VERSIONS=${PYTHON_VERSIONS:-"2.7 3.3 3.4 3.5 3.6 3.7 3.8 3.9"}
pypy_VERSIONS=${PYPY_VERSIONS:-"nover 3"}
jython_VERSIONS=${JYTHON_VERSIONS:-"nover"}