Skip to content

Commit 44d4cda

Browse files
committed
Drop RF 3.1 support
Fixes #80
1 parent b7a68ff commit 44d4cda

File tree

4 files changed

+17
-122
lines changed

4 files changed

+17
-122
lines changed

src/robotlibcore.py

+2-12
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@
3030
typing = None
3131

3232
from robot.api.deco import keyword # noqa F401
33-
from robot import __version__ as robot_version
3433

35-
RF31 = robot_version < '3.2'
3634

3735
__version__ = '2.2.2.dev1'
3836

@@ -195,9 +193,7 @@ def _get_default_and_named_args(cls, arg_spec, function):
195193
formated_args = []
196194
for arg in args:
197195
if defaults:
198-
formated_args.append(
199-
cls._format_defaults(arg, defaults.pop())
200-
)
196+
formated_args.append((arg, defaults.pop()))
201197
else:
202198
formated_args.append(arg)
203199
formated_args.reverse()
@@ -225,15 +221,9 @@ def _get_kw_only(cls, arg_spec):
225221
kw_only_args.append(arg)
226222
else:
227223
value = arg_spec.kwonlydefaults.get(arg, '')
228-
kw_only_args.append(cls._format_defaults(arg, value))
224+
kw_only_args.append((arg, value))
229225
return kw_only_args
230226

231-
@classmethod
232-
def _format_defaults(cls, arg, value):
233-
if RF31:
234-
return '{}={}'.format(arg, value)
235-
return arg, value
236-
237227
@classmethod
238228
def _get_types(cls, function):
239229
if function is None:

utest/test_get_keyword_types.py

+7-44
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import pytest
2-
1+
from typing import List, Union
32

4-
from robotlibcore import RF31
3+
import pytest
54

6-
from typing import List, Union
75
from DynamicTypesAnnotationsLibrary import DynamicTypesAnnotationsLibrary
86
from DynamicTypesAnnotationsLibrary import CustomObject
97
from DynamicTypesLibrary import DynamicTypesLibrary
@@ -29,14 +27,7 @@ def test_types_disabled(lib):
2927
assert types is None
3028

3129

32-
@pytest.mark.skipif(not RF31, reason='Only for RF3.1')
33-
def test_keyword_types_and_bool_default_rf31(lib):
34-
types = lib.get_keyword_types('keyword_robot_types_and_bool_default')
35-
assert types == {'arg1': str}
36-
37-
38-
@pytest.mark.skipif(RF31, reason='Only for RF3.2+')
39-
def test_keyword_types_and_bool_default_rf32(lib):
30+
def test_keyword_types_and_bool_default(lib):
4031
types = lib.get_keyword_types('keyword_robot_types_and_bool_default')
4132
assert types == {'arg1': str}
4233

@@ -56,14 +47,7 @@ def test_not_keyword(lib):
5647
lib.get_keyword_types('not_keyword')
5748

5849

59-
@pytest.mark.skipif(RF31, reason='Only for RF3.2+')
60-
def test_keyword_none_rf32(lib):
61-
types = lib.get_keyword_types('keyword_none')
62-
assert types == {}
63-
64-
65-
@pytest.mark.skipif(not RF31, reason='Only for RF3.2+')
66-
def test_keyword_none_rf31(lib):
50+
def test_keyword_none(lib):
6751
types = lib.get_keyword_types('keyword_none')
6852
assert types == {}
6953

@@ -114,7 +98,7 @@ def test_keyword_with_annotation_external_class(lib_types):
11498
assert types == {'arg': CustomObject}
11599

116100

117-
def test_keyword_with_annotation_and_default(lib_types):
101+
def test_keyword_with_annotation_and_default_part2(lib_types):
118102
types = lib_types.get_keyword_types('keyword_default_and_annotation')
119103
assert types == {'arg1': int, 'arg2': Union[bool, str]}
120104

@@ -163,13 +147,6 @@ def test_keyword_only_arguments(lib_types):
163147
assert types == {}
164148

165149

166-
@pytest.mark.skipif(RF31, reason='Only for RF3.2+')
167-
def test_keyword_only_arguments_many(lib_types):
168-
types = lib_types.get_keyword_types('keyword_only_arguments_many')
169-
assert types == {}
170-
171-
172-
@pytest.mark.skipif(not RF31, reason='Only for RF3.1')
173150
def test_keyword_only_arguments_many(lib_types):
174151
types = lib_types.get_keyword_types('keyword_only_arguments_many')
175152
assert types == {}
@@ -180,26 +157,12 @@ def test_keyword_mandatory_and_keyword_only_arguments(lib_types):
180157
assert types == {'arg': int, 'some': bool}
181158

182159

183-
@pytest.mark.skipif(RF31, reason='Only for RF3.2+')
184-
def test_keyword_only_arguments_many_positional_and_default_rf32(lib_types):
160+
def test_keyword_only_arguments_many_positional_and_default(lib_types):
185161
types = lib_types.get_keyword_types('keyword_only_arguments_many_positional_and_default')
186162
assert types == {'four': Union[int, str], 'six': Union[bool, str]}
187163

188164

189-
@pytest.mark.skipif(not RF31, reason='Only for RF3.1')
190-
def test_keyword_only_arguments_many_positional_and_default_rf31(lib_types):
191-
types = lib_types.get_keyword_types('keyword_only_arguments_many_positional_and_default')
192-
assert types == {'four': Union[int, str], 'six': Union[bool, str]}
193-
194-
195-
@pytest.mark.skipif(RF31, reason='Only for RF3.2+')
196-
def test_keyword_all_args_rf32(lib_types):
197-
types = lib_types.get_keyword_types('keyword_all_args')
198-
assert types == {}
199-
200-
201-
@pytest.mark.skipif(not RF31, reason='Only for RF3.1')
202-
def test_keyword_all_args_rf31(lib_types):
165+
def test_keyword_all_args(lib_types):
203166
types = lib_types.get_keyword_types('keyword_all_args')
204167
assert types == {}
205168

utest/test_keyword_builder.py

+6-36
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import pytest
22

3-
from robotlibcore import RF31, KeywordBuilder
3+
from robotlibcore import KeywordBuilder
44
from moc_library import MockLibrary
55
from DynamicTypesAnnotationsLibrary import DynamicTypesAnnotationsLibrary
66

@@ -32,52 +32,31 @@ def test_positional_args(lib):
3232
assert spec.argument_specification == ['arg1', 'arg2']
3333

3434

35-
@pytest.mark.skipif(RF31, reason='Only for RF3.2+')
36-
def test_positional_and_named_rf32(lib):
35+
def test_positional_and_named(lib):
3736
spec = KeywordBuilder.build(lib.positional_and_default)
3837
assert spec.argument_specification == ['arg1', 'arg2', ('named1', 'string1'), ('named2', 123)]
3938

4039

41-
@pytest.mark.skipif(not RF31, reason='Only for RF3.1')
42-
def test_positional_and_named_rf31(lib):
43-
spec = KeywordBuilder.build(lib.positional_and_default)
44-
assert spec.argument_specification == ['arg1', 'arg2', 'named1=string1', 'named2=123']
45-
46-
47-
@pytest.mark.skipif(RF31, reason='Only for RF3.2+')
48-
def test_named_only_rf32(lib):
40+
def test_named_only(lib):
4941
spec = KeywordBuilder.build(lib.default_only)
5042
assert spec.argument_specification == [('named1', 'string1'), ('named2', 123)]
5143

5244

53-
@pytest.mark.skipif(not RF31, reason='Only for RF3.1')
54-
def test_named_only_rf31(lib):
55-
spec = KeywordBuilder.build(lib.default_only)
56-
assert spec.argument_specification == ['named1=string1', 'named2=123']
57-
58-
5945
def test_varargs_and_kwargs(lib):
6046
spec = KeywordBuilder.build(lib.varargs_kwargs)
6147
assert spec.argument_specification == ['*vargs', '**kwargs']
6248

6349

64-
def test_named_only(lib):
50+
def test_named_only_part2(lib):
6551
spec = KeywordBuilder.build(lib.named_only)
6652
assert spec.argument_specification == ['*varargs', 'key1', 'key2']
6753

6854

69-
@pytest.mark.skipif(RF31, reason='Only for RF3.2+')
70-
def test_named_only_rf32(lib):
55+
def test_named_only(lib):
7156
spec = KeywordBuilder.build(lib.named_only_with_defaults)
7257
assert spec.argument_specification == ['*varargs', 'key1', 'key2', ('key3', 'default1'), ('key4', True)]
7358

7459

75-
@pytest.mark.skipif(not RF31, reason='Only for RF3.1')
76-
def test_named_only_rf31(lib):
77-
spec = KeywordBuilder.build(lib.named_only_with_defaults)
78-
assert spec.argument_specification == ['*varargs', 'key1', 'key2', 'key3=default1', 'key4=True']
79-
80-
8160
def test_types_in_keyword_deco(lib):
8261
spec = KeywordBuilder.build(lib.positional_args)
8362
assert spec.argument_types == {'arg1': str, 'arg2': int}
@@ -103,17 +82,8 @@ def test_optional_none(lib):
10382
assert spec.argument_types == {'arg1': str, 'arg2': str}
10483

10584

106-
@pytest.mark.skipif(RF31, reason='For RF 3.2')
107-
def test_complex_deco_rf32(dyn_types):
85+
def test_complex_deco(dyn_types):
10886
spec = KeywordBuilder.build(dyn_types.keyword_with_deco_and_signature)
10987
assert spec.argument_types == {'arg1': bool, 'arg2': bool}
11088
assert spec.argument_specification == [('arg1', False), ('arg2', False)]
11189
assert spec.documentation == "Test me doc here"
112-
113-
114-
@pytest.mark.skipif(not RF31, reason='For RF 3.2')
115-
def test_complex_deco_rf31(dyn_types):
116-
spec = KeywordBuilder.build(dyn_types.keyword_with_deco_and_signature)
117-
assert spec.argument_types == {'arg1': bool, 'arg2': bool}
118-
assert spec.argument_specification == ['arg1=False', 'arg2=False']
119-
assert spec.documentation == "Test me doc here"

utest/test_robotlibcore.py

+2-30
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import pytest
2-
from robot import __version__ as robot_version
32

43
from robotlibcore import HybridCore
54
from HybridLibrary import HybridLibrary
@@ -96,21 +95,7 @@ def test_getattr():
9695
"'%s' object has no attribute 'non_existing'" % type(lib).__name__
9796

9897

99-
@pytest.mark.skipif(robot_version >= '3.2', reason='For RF 3.1')
100-
def test_get_keyword_arguments_rf31():
101-
args = DynamicLibrary().get_keyword_arguments
102-
assert args('mandatory') == ['arg1', 'arg2']
103-
assert args('defaults') == ['arg1', 'arg2=default', 'arg3=3']
104-
assert args('varargs_and_kwargs') == ['*args', '**kws']
105-
assert args('kwargs_only') == ['**kws']
106-
assert args('all_arguments') == ['mandatory', 'default=value', '*varargs', '**kwargs']
107-
assert args('__init__') == ['arg=None']
108-
with pytest.raises(AttributeError):
109-
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():
98+
def test_get_keyword_arguments():
11499
args = DynamicLibrary().get_keyword_arguments
115100
assert args('mandatory') == ['arg1', 'arg2']
116101
assert args('defaults') == ['arg1', ('arg2', 'default'), ('arg3', 3)]
@@ -122,8 +107,7 @@ def test_get_keyword_arguments_rf32():
122107
args('__foobar__')
123108

124109

125-
@pytest.mark.skipif(robot_version < '3.2', reason='For RF 3.2 or greater')
126-
def test_keyword_only_arguments_for_get_keyword_arguments_rf32():
110+
def test_keyword_only_arguments_for_get_keyword_arguments():
127111
args = DynamicTypesAnnotationsLibrary(1).get_keyword_arguments
128112
assert args('keyword_only_arguments') == ['*varargs', ('some', 111)]
129113
assert args('keyword_only_arguments_many') == ['*varargs', ('some', 'value'), ('other', None)]
@@ -134,18 +118,6 @@ def test_keyword_only_arguments_for_get_keyword_arguments_rf32():
134118
assert args('keyword_with_deco_and_signature') == [('arg1', False), ('arg2', False)]
135119

136120

137-
@pytest.mark.skipif(robot_version >= '3.2', reason='For RF 3.1')
138-
def test_keyword_only_arguments_for_get_keyword_arguments_rf31():
139-
args = DynamicTypesAnnotationsLibrary(1).get_keyword_arguments
140-
assert args('keyword_only_arguments') == ['*varargs', 'some=111']
141-
assert args('keyword_only_arguments_many') == ['*varargs', 'some=value', 'other=None']
142-
assert args('keyword_only_arguments_no_default') == ['*varargs', 'other']
143-
assert args('keyword_only_arguments_default_and_no_default') == ['*varargs', 'other', 'value=False']
144-
all_args = ['mandatory', 'positional=1', '*varargs', 'other', 'value=False', '**kwargs']
145-
assert args('keyword_all_args') == all_args
146-
assert args('keyword_with_deco_and_signature') == ['arg1=False', 'arg2=False']
147-
148-
149121
def test_get_keyword_documentation():
150122
doc = DynamicLibrary().get_keyword_documentation
151123
assert doc('function') == ''

0 commit comments

Comments
 (0)