Skip to content

Commit f8fac47

Browse files
committed
Support RF 3.2 get_keyword_arguments new format
1 parent 5954b5a commit f8fac47

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

src/robotlibcore.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030

3131
from robot.api.deco import keyword # noqa F401
32+
from robot import __version__ as robot_version
3233

3334
PY2 = sys.version_info < (3,)
3435

@@ -97,7 +98,27 @@ def run_keyword(self, name, args, kwargs=None):
9798
return self.keywords[name](*args, **(kwargs or {}))
9899

99100
def get_keyword_arguments(self, name):
100-
kw = self.keywords[name] if name != '__init__' else self.__init__
101+
if robot_version >= '3.2':
102+
return self.__new_arg_spec(name)
103+
return self.__old_arg_spec(name)
104+
105+
def __new_arg_spec(self, keyword_name):
106+
kw = self.__get_keyword(keyword_name)
107+
if kw is None:
108+
return [tuple(), ]
109+
args, defaults, varargs, kwargs = self.__get_arg_spec(kw)
110+
args = [(arg, ) for arg in args]
111+
args += [(name, value) for name, value in defaults]
112+
if varargs:
113+
args.append(('*{}'.format(varargs), ))
114+
if kwargs:
115+
args.append(('**{}'.format(kwargs), ))
116+
return args
117+
118+
def __old_arg_spec(self, keyword_name):
119+
kw = self.__get_keyword(keyword_name)
120+
if kw is None:
121+
return []
101122
args, defaults, varargs, kwargs = self.__get_arg_spec(kw)
102123
args += ['{}={}'.format(name, value) for name, value in defaults]
103124
if varargs:

utest/test_robotlibcore.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import sys
22

33
import pytest
4+
from robot import __version__ as robot__version
45

56
from robotlibcore import HybridCore
6-
77
from HybridLibrary import HybridLibrary
88
from DynamicLibrary import DynamicLibrary
99

@@ -36,6 +36,8 @@ def test_dir():
3636
'_DynamicCore__get_keyword_tags_supported',
3737
'_DynamicCore__get_typing_hints',
3838
'_DynamicCore__join_defaults_with_types',
39+
'_DynamicCore__new_arg_spec',
40+
'_DynamicCore__old_arg_spec',
3941
'_HybridCore__get_members',
4042
'_HybridCore__get_members_from_instance',
4143
'_custom_name',
@@ -72,6 +74,8 @@ def test_dir():
7274
'_DynamicCore__get_keyword_path',
7375
'_DynamicCore__get_keyword_tags_supported',
7476
'_DynamicCore__join_defaults_with_types',
77+
'_DynamicCore__new_arg_spec',
78+
'_DynamicCore__old_arg_spec',
7579
'get_keyword_arguments',
7680
'get_keyword_documentation',
7781
'get_keyword_source',
@@ -94,14 +98,26 @@ def test_getattr():
9498
assert str(exc_info.value) == \
9599
"'%s' object has no attribute 'non_existing'" % type(lib).__name__
96100

97-
98-
def test_get_keyword_arguments():
101+
@pytest.mark.skipif(robot__version >= '3.2', reason='For RF 3.1')
102+
def test_get_keyword_arguments_rf31():
99103
args = DynamicLibrary().get_keyword_arguments
100104
assert args('mandatory') == ['arg1', 'arg2']
101105
assert args('defaults') == ['arg1', 'arg2=default', 'arg3=3']
102106
assert args('varargs_and_kwargs') == ['*args', '**kws']
103107
assert args('all_arguments') == ['mandatory', 'default=value', '*varargs', '**kwargs']
104108
assert args('__init__') == ['arg=None']
109+
assert args('__foobar__') == []
110+
111+
112+
@pytest.mark.skipif(robot__version < '3.2', reason='For RF 3.2 or greater')
113+
def test_get_keyword_arguments_rf32():
114+
args = DynamicLibrary().get_keyword_arguments
115+
assert args('mandatory') == [('arg1', ), ('arg2', )]
116+
assert args('defaults') == [('arg1', ), ('arg2', 'default'), ('arg3', 3)]
117+
assert args('varargs_and_kwargs') == [('*args', ), ('**kws', )]
118+
assert args('all_arguments') == [('mandatory', ), ('default', 'value'), ('*varargs', ), ('**kwargs', )]
119+
assert args('__init__') == [('arg', None)]
120+
assert args('__foobar__') == [()]
105121

106122

107123
def test_get_keyword_documentation():

0 commit comments

Comments
 (0)