Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion src/robotremoteserver.py
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,11 @@ def run_keyword(self, name, args, kwargs=None):
result = {'status': 'FAIL'}
self._intercept_std_streams()
try:
return_value = self._get_keyword(name)(*args, **kwargs)
lib_run_keyword = self._get_run_keyword()
if lib_run_keyword:
return_value = lib_run_keyword(name, *args, **kwargs)
else:
return_value = self._get_keyword(name)(*args, **kwargs)
except:
exc_type, exc_value, exc_tb = sys.exc_info()
self._add_to_result(result, 'error',
Expand Down Expand Up @@ -199,6 +203,12 @@ def get_keyword_documentation(self, name):
return ''
return inspect.getdoc(self._get_keyword(name)) or ''

def _get_run_keyword(self):
lib_run_keyword = getattr(self._library, 'run_keyword', None)
if not self._is_function_or_method(lib_run_keyword):
return None
return lib_run_keyword

def _get_keyword(self, name):
if name == 'stop_remote_server':
return self.stop_remote_server
Expand Down
19 changes: 19 additions & 0 deletions test/utest/test_robotremoteserver.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,22 @@ def not_included(self):
"""Not returned by get_keyword_names"""


class DynamicLibrary:

def __init__(self):
self.library = StaticLibrary()

def get_keyword_names(self):
return [n for n in dir(self.library) if n.endswith('_keyword')]

def run_keyword(self, name, *args, **kwargs):
return getattr(self.library, name)(*args, **kwargs)

@property
def streams(self):
return self.library.streams


class TestStaticApi(unittest.TestCase):
library = StaticLibrary()

Expand Down Expand Up @@ -131,5 +147,8 @@ class TestHybridApi(TestStaticApi):
library = HybridLibrary()


class TestDynamicApi(TestStaticApi):
library = DynamicLibrary()

if __name__ == '__main__':
unittest.main()