diff options
author | Eric Lin <anselor@gmail.com> | 2020-08-05 15:08:37 -0400 |
---|---|---|
committer | anselor <anselor@gmail.com> | 2020-08-06 16:01:19 -0400 |
commit | 62eccdac73d852d3ab9df06497bc8c9063e3d283 (patch) | |
tree | 2c7a02a8589270447d9ef611f0f6f170e5f0528f /tests | |
parent | 2c99c0d9e7ddea1a93e97e3198aea01beca7c5d5 (diff) | |
download | cmd2-git-62eccdac73d852d3ab9df06497bc8c9063e3d283.tar.gz |
Verify that a completer function is defined in a CommandSet before
passing it a CommandSet instance.
Search for a CommandSet instance that matches the completer's parent
class type.`
Resolves Issue #967
Renamed isolated_tests directory to tests_isolated for better visual grouping. Added some exception documentation
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_utils_defining_class.py | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/tests/test_utils_defining_class.py b/tests/test_utils_defining_class.py new file mode 100644 index 00000000..0fbcf83b --- /dev/null +++ b/tests/test_utils_defining_class.py @@ -0,0 +1,83 @@ +# coding=utf-8 +# flake8: noqa E302 +""" +Unit testing for get_defining_class in cmd2/utils.py module. +""" +import functools + +import cmd2.utils as cu + + +class ParentClass(object): + def func_with_overrides(self): + pass + + def parent_only_func(self, param1, param2): + pass + + +class ChildClass(ParentClass): + def func_with_overrides(self): + super(ChildClass, self).func_with_overrides() + + def child_function(self): + pass + + lambda1 = lambda: 1 + + lambda2 = (lambda: lambda: 2)() + + @classmethod + def class_method(cls): + pass + + @staticmethod + def static_meth(): + pass + + +def func_not_in_class(): + pass + + +def test_get_defining_class(): + parent_instance = ParentClass() + child_instance = ChildClass() + + # validate unbound class functions + assert cu.get_defining_class(ParentClass.func_with_overrides) is ParentClass + assert cu.get_defining_class(ParentClass.parent_only_func) is ParentClass + assert cu.get_defining_class(ChildClass.func_with_overrides) is ChildClass + assert cu.get_defining_class(ChildClass.parent_only_func) is ParentClass + assert cu.get_defining_class(ChildClass.child_function) is ChildClass + assert cu.get_defining_class(ChildClass.class_method) is ChildClass + assert cu.get_defining_class(ChildClass.static_meth) is ChildClass + + # validate bound class methods + assert cu.get_defining_class(parent_instance.func_with_overrides) is ParentClass + assert cu.get_defining_class(parent_instance.parent_only_func) is ParentClass + assert cu.get_defining_class(child_instance.func_with_overrides) is ChildClass + assert cu.get_defining_class(child_instance.parent_only_func) is ParentClass + assert cu.get_defining_class(child_instance.child_function) is ChildClass + assert cu.get_defining_class(child_instance.class_method) is ChildClass + assert cu.get_defining_class(child_instance.static_meth) is ChildClass + + # bare functions resolve to nothing + assert cu.get_defining_class(func_not_in_class) is None + + # lambdas and nested lambdas + assert cu.get_defining_class(ChildClass.lambda1) is ChildClass + assert cu.get_defining_class(ChildClass.lambda2) is ChildClass + assert cu.get_defining_class(ChildClass().lambda1) is ChildClass + assert cu.get_defining_class(ChildClass().lambda2) is ChildClass + + # partials + partial_unbound = functools.partial(ParentClass.parent_only_func, 1) + nested_partial_unbound = functools.partial(partial_unbound, 2) + assert cu.get_defining_class(partial_unbound) is ParentClass + assert cu.get_defining_class(nested_partial_unbound) is ParentClass + + partial_bound = functools.partial(parent_instance.parent_only_func, 1) + nested_partial_bound = functools.partial(partial_bound, 2) + assert cu.get_defining_class(partial_bound) is ParentClass + assert cu.get_defining_class(nested_partial_bound) is ParentClass |