Spaces:
Build error
Build error
import unittest | |
import sys | |
from lime.utils.generic_utils import has_arg | |
class TestGenericUtils(unittest.TestCase): | |
def test_has_arg(self): | |
# fn is callable / is not callable | |
class FooNotCallable: | |
def __init__(self, word): | |
self.message = word | |
class FooCallable: | |
def __init__(self, word): | |
self.message = word | |
def __call__(self, message): | |
return message | |
def positional_argument_call(self, arg1): | |
return self.message | |
def multiple_positional_arguments_call(self, *args): | |
res = [] | |
for a in args: | |
res.append(a) | |
return res | |
def keyword_argument_call(self, filter_=True): | |
res = self.message | |
if filter_: | |
res = 'KO' | |
return res | |
def multiple_keyword_arguments_call(self, arg1='1', arg2='2'): | |
return self.message + arg1 + arg2 | |
def undefined_keyword_arguments_call(self, **kwargs): | |
res = self.message | |
for a in kwargs: | |
res = res + a | |
return a | |
foo_callable = FooCallable('OK') | |
self.assertTrue(has_arg(foo_callable, 'message')) | |
if sys.version_info < (3,): | |
foo_not_callable = FooNotCallable('KO') | |
self.assertFalse(has_arg(foo_not_callable, 'message')) | |
elif sys.version_info < (3, 6): | |
with self.assertRaises(TypeError): | |
foo_not_callable = FooNotCallable('KO') | |
has_arg(foo_not_callable, 'message') | |
# Python 2, argument in / not in valid arguments / keyword arguments | |
if sys.version_info < (3,): | |
self.assertFalse(has_arg(foo_callable, 'invalid_arg')) | |
self.assertTrue(has_arg(foo_callable.positional_argument_call, 'arg1')) | |
self.assertFalse(has_arg(foo_callable.multiple_positional_arguments_call, 'argX')) | |
self.assertFalse(has_arg(foo_callable.keyword_argument_call, 'argX')) | |
self.assertTrue(has_arg(foo_callable.keyword_argument_call, 'filter_')) | |
self.assertTrue(has_arg(foo_callable.multiple_keyword_arguments_call, 'arg2')) | |
self.assertFalse(has_arg(foo_callable.multiple_keyword_arguments_call, 'arg3')) | |
self.assertFalse(has_arg(foo_callable.undefined_keyword_arguments_call, 'argX')) | |
# Python 3, argument in / not in valid arguments / keyword arguments | |
elif sys.version_info < (3, 6): | |
self.assertFalse(has_arg(foo_callable, 'invalid_arg')) | |
self.assertTrue(has_arg(foo_callable.positional_argument_call, 'arg1')) | |
self.assertFalse(has_arg(foo_callable.multiple_positional_arguments_call, 'argX')) | |
self.assertFalse(has_arg(foo_callable.keyword_argument_call, 'argX')) | |
self.assertTrue(has_arg(foo_callable.keyword_argument_call, 'filter_')) | |
self.assertTrue(has_arg(foo_callable.multiple_keyword_arguments_call, 'arg2')) | |
self.assertFalse(has_arg(foo_callable.multiple_keyword_arguments_call, 'arg3')) | |
self.assertFalse(has_arg(foo_callable.undefined_keyword_arguments_call, 'argX')) | |
else: | |
self.assertFalse(has_arg(foo_callable, 'invalid_arg')) | |
self.assertTrue(has_arg(foo_callable.positional_argument_call, 'arg1')) | |
self.assertFalse(has_arg(foo_callable.multiple_positional_arguments_call, 'argX')) | |
self.assertFalse(has_arg(foo_callable.keyword_argument_call, 'argX')) | |
self.assertTrue(has_arg(foo_callable.keyword_argument_call, 'filter_')) | |
self.assertTrue(has_arg(foo_callable.multiple_keyword_arguments_call, 'arg2')) | |
self.assertFalse(has_arg(foo_callable.multiple_keyword_arguments_call, 'arg3')) | |
self.assertFalse(has_arg(foo_callable.undefined_keyword_arguments_call, 'argX')) | |
# argname is None | |
self.assertFalse(has_arg(foo_callable, None)) | |
if __name__ == '__main__': | |
unittest.main() | |