418 lines
12 KiB
Python
418 lines
12 KiB
Python
|
'''
|
||
|
TestUtils
|
||
|
=========
|
||
|
|
||
|
Tested platforms:
|
||
|
|
||
|
* Android
|
||
|
* iOS
|
||
|
* Windows
|
||
|
* MacOS
|
||
|
* Linux
|
||
|
'''
|
||
|
|
||
|
import unittest
|
||
|
from mock import patch
|
||
|
|
||
|
|
||
|
class TestUtils(unittest.TestCase):
|
||
|
'''
|
||
|
TestCase for plyer.utils.
|
||
|
'''
|
||
|
|
||
|
def cutter(self, part, string):
|
||
|
'''
|
||
|
Cut off a part of a string if it contains a substring,
|
||
|
otherwise raise an error.
|
||
|
'''
|
||
|
self.assertIn(part, string)
|
||
|
return string[len(part):]
|
||
|
|
||
|
def test_deprecated_function(self):
|
||
|
'''
|
||
|
Test printed out warning with @deprecated decorator
|
||
|
on a function without any arguments.
|
||
|
'''
|
||
|
|
||
|
from plyer.utils import deprecated
|
||
|
|
||
|
@deprecated
|
||
|
def function():
|
||
|
'''
|
||
|
Dummy deprecated function.
|
||
|
'''
|
||
|
return 1
|
||
|
|
||
|
with patch(target='warnings.warn') as stderr:
|
||
|
self.assertEqual(function(), 1)
|
||
|
|
||
|
args, _ = stderr.call_args_list[0]
|
||
|
args = args[0]
|
||
|
args = self.cutter('[WARNING] ', args)
|
||
|
args = self.cutter('deprecated function function', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter('Called from', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter('by test_deprecated_function().\n', args)
|
||
|
|
||
|
args, _ = stderr.call_args_list[1]
|
||
|
self.assertEqual(args, (
|
||
|
'''
|
||
|
Dummy deprecated function.
|
||
|
''',
|
||
|
))
|
||
|
|
||
|
def test_deprecated_function_arg(self):
|
||
|
'''
|
||
|
Test printed out warning with @deprecated decorator
|
||
|
on a function with arguments.
|
||
|
'''
|
||
|
|
||
|
from plyer.utils import deprecated
|
||
|
|
||
|
@deprecated
|
||
|
def function_with_arg(arg):
|
||
|
'''
|
||
|
Dummy deprecated function with arg.
|
||
|
'''
|
||
|
return arg
|
||
|
|
||
|
with patch(target='warnings.warn') as stderr:
|
||
|
self.assertEqual(function_with_arg(1), 1)
|
||
|
|
||
|
args, _ = stderr.call_args_list[0]
|
||
|
args = args[0]
|
||
|
args = self.cutter('[WARNING] ', args)
|
||
|
args = self.cutter('deprecated function function_with_arg', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter('Called from', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter('by test_deprecated_function_arg().\n', args)
|
||
|
|
||
|
args, _ = stderr.call_args_list[1]
|
||
|
self.assertEqual(args, (
|
||
|
'''
|
||
|
Dummy deprecated function with arg.
|
||
|
''',
|
||
|
))
|
||
|
|
||
|
def test_deprecated_function_kwarg(self):
|
||
|
'''
|
||
|
Test printed out warning with @deprecated decorator
|
||
|
on a function with keyword arguments.
|
||
|
'''
|
||
|
|
||
|
from plyer.utils import deprecated
|
||
|
|
||
|
@deprecated
|
||
|
def function_with_kwarg(kwarg):
|
||
|
'''
|
||
|
Dummy deprecated function with kwarg.
|
||
|
'''
|
||
|
return kwarg
|
||
|
|
||
|
with patch(target='warnings.warn') as stderr:
|
||
|
self.assertEqual(function_with_kwarg(kwarg=1), 1)
|
||
|
|
||
|
args, _ = stderr.call_args_list[0]
|
||
|
args = args[0]
|
||
|
args = self.cutter('[WARNING] ', args)
|
||
|
args = self.cutter('deprecated function function_with_kwarg', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter('Called from', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter('by test_deprecated_function_kwarg().\n', args)
|
||
|
|
||
|
args, _ = stderr.call_args_list[1]
|
||
|
self.assertEqual(args, (
|
||
|
'''
|
||
|
Dummy deprecated function with kwarg.
|
||
|
''',
|
||
|
))
|
||
|
|
||
|
def test_deprecated_class_method(self):
|
||
|
'''
|
||
|
Test printed out warning with @deprecated decorator
|
||
|
on a instance bound method.
|
||
|
'''
|
||
|
|
||
|
from plyer.utils import deprecated
|
||
|
|
||
|
class Class:
|
||
|
'''
|
||
|
Dummy class with deprecated method method.
|
||
|
'''
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
self.args = args
|
||
|
self.kwargs = kwargs
|
||
|
|
||
|
@deprecated
|
||
|
def method(self):
|
||
|
'''
|
||
|
Dummy deprecated method.
|
||
|
'''
|
||
|
return (self.args, self.kwargs)
|
||
|
|
||
|
with patch(target='warnings.warn') as stderr:
|
||
|
args = (1, 2, 3)
|
||
|
kwargs = dict(x=1, y=2)
|
||
|
|
||
|
cls = Class(*args, **kwargs)
|
||
|
self.assertEqual(cls.method(), (args, kwargs))
|
||
|
|
||
|
args, kwargs = stderr.call_args_list[0]
|
||
|
args = args[0]
|
||
|
args = self.cutter('[WARNING] ', args)
|
||
|
args = self.cutter('deprecated function method', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter('Called from', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter('by test_deprecated_class_method().\n', args)
|
||
|
|
||
|
args, kwargs = stderr.call_args_list[1]
|
||
|
self.assertEqual(args, (
|
||
|
'''
|
||
|
Dummy deprecated method.
|
||
|
''',
|
||
|
))
|
||
|
|
||
|
def test_deprecated_class_static_none(self):
|
||
|
'''
|
||
|
Test printed out warning with @deprecated decorator
|
||
|
on a static method without arguments.
|
||
|
'''
|
||
|
|
||
|
from plyer.utils import deprecated
|
||
|
|
||
|
class Class:
|
||
|
'''
|
||
|
Dummy class with deprecated static method.
|
||
|
'''
|
||
|
args = None
|
||
|
kwargs = None
|
||
|
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
Class.args = args
|
||
|
Class.kwargs = kwargs
|
||
|
|
||
|
@staticmethod
|
||
|
@deprecated
|
||
|
def static():
|
||
|
'''
|
||
|
Dummy deprecated static method.
|
||
|
'''
|
||
|
return (Class.args, Class.kwargs)
|
||
|
|
||
|
with patch(target='warnings.warn') as stderr:
|
||
|
self.assertEqual(Class.static(), (None, None))
|
||
|
|
||
|
args, _ = stderr.call_args_list[0]
|
||
|
args = args[0]
|
||
|
args = self.cutter('[WARNING] ', args)
|
||
|
args = self.cutter('deprecated function static', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter('Called from', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter(
|
||
|
'by test_deprecated_class_static_none().\n', args
|
||
|
)
|
||
|
|
||
|
args, _ = stderr.call_args_list[1]
|
||
|
self.assertEqual(args, (
|
||
|
'''
|
||
|
Dummy deprecated static method.
|
||
|
''',
|
||
|
))
|
||
|
|
||
|
def test_deprecated_class_static_argskwargs(self):
|
||
|
'''
|
||
|
Test printed out warning with @deprecated decorator
|
||
|
on a static method with arguments and keyword argument.
|
||
|
'''
|
||
|
|
||
|
from plyer.utils import deprecated
|
||
|
|
||
|
class Class:
|
||
|
'''
|
||
|
Dummy class with deprecated static method.
|
||
|
'''
|
||
|
args = None
|
||
|
kwargs = None
|
||
|
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
Class.args = args
|
||
|
Class.kwargs = kwargs
|
||
|
|
||
|
@staticmethod
|
||
|
@deprecated
|
||
|
def static():
|
||
|
'''
|
||
|
Dummy deprecated static method.
|
||
|
'''
|
||
|
return (Class.args, Class.kwargs)
|
||
|
|
||
|
with patch(target='warnings.warn') as stderr:
|
||
|
args = (1, 2, 3)
|
||
|
kwargs = dict(x=1, y=2)
|
||
|
|
||
|
cls = Class(*args, **kwargs)
|
||
|
self.assertEqual(cls.static(), (args, kwargs))
|
||
|
|
||
|
args, kwargs = stderr.call_args_list[0]
|
||
|
args = args[0]
|
||
|
args = self.cutter('[WARNING] ', args)
|
||
|
args = self.cutter('deprecated function static', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter('Called from', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter(
|
||
|
'by test_deprecated_class_static_argskwargs().\n', args
|
||
|
)
|
||
|
|
||
|
args, kwargs = stderr.call_args_list[1]
|
||
|
self.assertEqual(args, (
|
||
|
'''
|
||
|
Dummy deprecated static method.
|
||
|
''',
|
||
|
))
|
||
|
|
||
|
def test_deprecated_class_clsmethod(self):
|
||
|
'''
|
||
|
Test printed out warning with @deprecated decorator
|
||
|
on a class bound method.
|
||
|
'''
|
||
|
|
||
|
from plyer.utils import deprecated
|
||
|
|
||
|
class Class:
|
||
|
'''
|
||
|
Dummy class with deprecated class method.
|
||
|
'''
|
||
|
args = None
|
||
|
kwargs = None
|
||
|
|
||
|
@classmethod
|
||
|
@deprecated
|
||
|
def clsmethod(cls):
|
||
|
'''
|
||
|
Dummy deprecated class method.
|
||
|
'''
|
||
|
return (cls.args, cls.kwargs)
|
||
|
|
||
|
with patch(target='warnings.warn') as stderr:
|
||
|
self.assertEqual(Class.clsmethod(), (None, None))
|
||
|
|
||
|
args, _ = stderr.call_args_list[0]
|
||
|
args = args[0]
|
||
|
args = self.cutter('[WARNING] ', args)
|
||
|
args = self.cutter('deprecated function clsmethod', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter('Called from', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter('by test_deprecated_class_clsmethod().\n', args)
|
||
|
|
||
|
args, _ = stderr.call_args_list[1]
|
||
|
self.assertEqual(args, (
|
||
|
'''
|
||
|
Dummy deprecated class method.
|
||
|
''',
|
||
|
))
|
||
|
|
||
|
def test_deprecated_class(self):
|
||
|
'''
|
||
|
Test printed out warning with @deprecated decorator on a class.
|
||
|
'''
|
||
|
|
||
|
from plyer.utils import deprecated
|
||
|
|
||
|
@deprecated
|
||
|
class Class:
|
||
|
'''
|
||
|
Dummy deprecated class.
|
||
|
'''
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
self.args = args
|
||
|
self.kwargs = kwargs
|
||
|
|
||
|
with patch(target='warnings.warn') as stderr:
|
||
|
args = (1, 2, 3)
|
||
|
kwargs = dict(x=1, y=2)
|
||
|
|
||
|
cls = Class(*args, **kwargs)
|
||
|
self.assertIsInstance(cls, Class)
|
||
|
self.assertEqual(cls.args, args)
|
||
|
self.assertEqual(cls.kwargs, kwargs)
|
||
|
|
||
|
args, _ = stderr.call_args_list[0]
|
||
|
args = args[0]
|
||
|
args = self.cutter('[WARNING] ', args)
|
||
|
args = self.cutter('Creating an instance', args)
|
||
|
args = self.cutter('deprecated class Class in', args)
|
||
|
args = self.cutter(__name__, args)
|
||
|
args = self.cutter('Called from', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter('by test_deprecated_class().\n', args)
|
||
|
|
||
|
args, kwargs = stderr.call_args_list[1]
|
||
|
self.assertEqual(args, (
|
||
|
'''
|
||
|
Dummy deprecated class.
|
||
|
''',
|
||
|
))
|
||
|
|
||
|
def test_deprecated_class_inherited(self):
|
||
|
'''
|
||
|
Test printed out warning with @deprecated decorator on a class
|
||
|
which inherits from a deprecated class.
|
||
|
'''
|
||
|
|
||
|
from plyer.utils import deprecated
|
||
|
|
||
|
@deprecated
|
||
|
class Class:
|
||
|
'''
|
||
|
Dummy deprecated class.
|
||
|
'''
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
self.args = args
|
||
|
self.kwargs = kwargs
|
||
|
|
||
|
class Inherited(Class):
|
||
|
'''
|
||
|
Dummy class inheriting from a dummy deprecated class.
|
||
|
'''
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
super().__init__(*args, **kwargs)
|
||
|
self.args = args
|
||
|
self.kwargs = kwargs
|
||
|
|
||
|
with patch(target='warnings.warn') as stderr:
|
||
|
args = (1, 2, 3)
|
||
|
kwargs = dict(x=1, y=2)
|
||
|
|
||
|
cls = Inherited(*args, **kwargs)
|
||
|
self.assertIsInstance(cls, Inherited)
|
||
|
self.assertEqual(cls.args, args)
|
||
|
self.assertEqual(cls.kwargs, kwargs)
|
||
|
|
||
|
args, _ = stderr.call_args_list[0]
|
||
|
args = args[0]
|
||
|
args = self.cutter('[WARNING] ', args)
|
||
|
args = self.cutter('Creating an instance', args)
|
||
|
args = self.cutter('deprecated class Class in', args)
|
||
|
args = self.cutter(__name__, args)
|
||
|
args = self.cutter('Called from', args)
|
||
|
args = self.cutter('test_utils.py', args)
|
||
|
args = self.cutter('by test_deprecated_class_inherited().\n', args)
|
||
|
|
||
|
args, kwargs = stderr.call_args_list[1]
|
||
|
self.assertEqual(args, (
|
||
|
'''
|
||
|
Dummy deprecated class.
|
||
|
''',
|
||
|
))
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
unittest.main()
|