Spaces:
Build error
Build error
File size: 4,136 Bytes
d61b9c7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
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()
|