Skip to content

Commit 8808007

Browse files
committed
Type conversion: Allow specifying type as string
This isn't likely to be too useful when specifying types using annotations (robotframework#2890) or @Keyword (robotframework#2947), but will be useful with dynamic libraries (robotframework#2068) when the library is a proxy getting information elsewhere.
1 parent 37b2351 commit 8808007

File tree

10 files changed

+899
-85
lines changed

10 files changed

+899
-85
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
*** Settings ***
2+
Suite Setup Run Tests ${EMPTY} keywords/type_conversion/annotations_with_aliases.robot
3+
Force Tags require-py3
4+
Resource atest_resource.robot
5+
6+
*** Test Cases ***
7+
Integer
8+
Check Test Case ${TESTNAME}
9+
10+
Invalid integer
11+
Check Test Case ${TESTNAME}
12+
13+
Float
14+
Check Test Case ${TESTNAME}
15+
16+
Invalid float
17+
Check Test Case ${TESTNAME}
18+
19+
Decimal
20+
Check Test Case ${TESTNAME}
21+
22+
Invalid decimal
23+
Check Test Case ${TESTNAME}
24+
25+
Boolean
26+
Check Test Case ${TESTNAME}
27+
28+
Invalid boolean is accepted as-is
29+
Check Test Case ${TESTNAME}
30+
31+
String
32+
Check Test Case ${TESTNAME}
33+
34+
Bytes
35+
Check Test Case ${TESTNAME}
36+
37+
Invalid bytes
38+
Check Test Case ${TESTNAME}
39+
40+
Bytearray
41+
Check Test Case ${TESTNAME}
42+
43+
Invalid bytearray
44+
Check Test Case ${TESTNAME}
45+
46+
Datetime
47+
Check Test Case ${TESTNAME}
48+
49+
Invalid datetime
50+
Check Test Case ${TESTNAME}
51+
52+
Date
53+
Check Test Case ${TESTNAME}
54+
55+
Invalid date
56+
Check Test Case ${TESTNAME}
57+
58+
Timedelta
59+
Check Test Case ${TESTNAME}
60+
61+
Invalid timedelta
62+
Check Test Case ${TESTNAME}
63+
64+
List
65+
Check Test Case ${TESTNAME}
66+
67+
Invalid list
68+
Check Test Case ${TESTNAME}
69+
70+
Tuple
71+
Check Test Case ${TESTNAME}
72+
73+
Invalid tuple
74+
Check Test Case ${TESTNAME}
75+
76+
Dictionary
77+
Check Test Case ${TESTNAME}
78+
79+
Invalid dictionary
80+
Check Test Case ${TESTNAME}
81+
82+
Set
83+
Check Test Case ${TESTNAME}
84+
85+
Invalid set
86+
Check Test Case ${TESTNAME}
87+
88+
Frozenset
89+
Check Test Case ${TESTNAME}
90+
91+
Invalid frozenset
92+
Check Test Case ${TESTNAME}
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
*** Settings ***
2+
Suite Setup Run Tests ${EMPTY} keywords/type_conversion/keyword_decorator_with_aliases.robot
3+
Resource atest_resource.robot
4+
5+
*** Test Cases ***
6+
Integer
7+
Check Test Case ${TESTNAME}
8+
9+
Invalid integer
10+
Check Test Case ${TESTNAME}
11+
12+
Float
13+
Check Test Case ${TESTNAME}
14+
15+
Invalid float
16+
Check Test Case ${TESTNAME}
17+
18+
Decimal
19+
Check Test Case ${TESTNAME}
20+
21+
Invalid decimal
22+
Check Test Case ${TESTNAME}
23+
24+
Boolean
25+
Check Test Case ${TESTNAME}
26+
27+
Invalid boolean is accepted as-is
28+
Check Test Case ${TESTNAME}
29+
30+
String
31+
Check Test Case ${TESTNAME}
32+
33+
Bytes
34+
Check Test Case ${TESTNAME}
35+
36+
Invalid bytes
37+
Check Test Case ${TESTNAME}
38+
39+
Bytearray
40+
Check Test Case ${TESTNAME}
41+
42+
Invalid bytearray
43+
Check Test Case ${TESTNAME}
44+
45+
Datetime
46+
Check Test Case ${TESTNAME}
47+
48+
Invalid datetime
49+
Check Test Case ${TESTNAME}
50+
51+
Date
52+
Check Test Case ${TESTNAME}
53+
54+
Invalid date
55+
Check Test Case ${TESTNAME}
56+
57+
Timedelta
58+
Check Test Case ${TESTNAME}
59+
60+
Invalid timedelta
61+
Check Test Case ${TESTNAME}
62+
63+
List
64+
Check Test Case ${TESTNAME}
65+
66+
Invalid list
67+
Check Test Case ${TESTNAME}
68+
69+
Tuple
70+
Check Test Case ${TESTNAME}
71+
72+
Invalid tuple
73+
Check Test Case ${TESTNAME}
74+
75+
Dictionary
76+
Check Test Case ${TESTNAME}
77+
78+
Invalid dictionary
79+
Check Test Case ${TESTNAME}
80+
81+
Set
82+
[Tags] require-py3
83+
Check Test Case ${TESTNAME}
84+
85+
Invalid set
86+
[Tags] require-py3
87+
Check Test Case ${TESTNAME}
88+
89+
Frozenset
90+
[Tags] require-py3
91+
Check Test Case ${TESTNAME}
92+
93+
Invalid frozenset
94+
[Tags] require-py3
95+
Check Test Case ${TESTNAME}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# Imports needed for evaluating expected result.
2+
from datetime import datetime, date, timedelta
3+
from decimal import Decimal
4+
5+
6+
def integer(argument: 'Integer', expected=None):
7+
_validate_type(argument, expected)
8+
9+
10+
def int_(argument: 'INT', expected=None):
11+
_validate_type(argument, expected)
12+
13+
14+
def float_(argument: 'Float', expected=None):
15+
_validate_type(argument, expected)
16+
17+
18+
def double(argument: 'Double', expected=None):
19+
_validate_type(argument, expected)
20+
21+
22+
def decimal(argument: 'DECIMAL', expected=None):
23+
_validate_type(argument, expected)
24+
25+
26+
def boolean(argument: 'Boolean', expected=None):
27+
_validate_type(argument, expected)
28+
29+
30+
def bool_(argument: 'Bool', expected=None):
31+
_validate_type(argument, expected)
32+
33+
34+
def string(argument: 'String', expected=None):
35+
_validate_type(argument, expected)
36+
37+
38+
def bytes_(argument: 'BYTES', expected=None):
39+
_validate_type(argument, expected)
40+
41+
42+
def bytearray_(argument: 'ByteArray', expected=None):
43+
_validate_type(argument, expected)
44+
45+
46+
def datetime_(argument: 'DateTime', expected=None):
47+
_validate_type(argument, expected)
48+
49+
50+
def date_(argument: 'Date', expected=None):
51+
_validate_type(argument, expected)
52+
53+
54+
def timedelta_(argument: 'TimeDelta', expected=None):
55+
_validate_type(argument, expected)
56+
57+
58+
def list_(argument: 'List', expected=None):
59+
_validate_type(argument, expected)
60+
61+
62+
def tuple_(argument: 'TUPLE', expected=None):
63+
_validate_type(argument, expected)
64+
65+
66+
def dictionary(argument: 'Dictionary', expected=None):
67+
_validate_type(argument, expected)
68+
69+
70+
def dict_(argument: 'Dict', expected=None):
71+
_validate_type(argument, expected)
72+
73+
74+
def map_(argument: 'Map', expected=None):
75+
_validate_type(argument, expected)
76+
77+
78+
def set_(argument: 'Set', expected=None):
79+
_validate_type(argument, expected)
80+
81+
82+
def frozenset_(argument: 'FrozenSet', expected=None):
83+
_validate_type(argument, expected)
84+
85+
86+
def _validate_type(argument, expected):
87+
if isinstance(expected, str):
88+
expected = eval(expected)
89+
if argument != expected or type(argument) != type(expected):
90+
raise AssertionError('%r (%s) != %r (%s)'
91+
% (argument, type(argument).__name__,
92+
expected, type(expected).__name__))
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
# Imports needed for evaluating expected result.
2+
from datetime import datetime, date, timedelta
3+
from decimal import Decimal
4+
5+
from robot.api.deco import keyword
6+
from robot.utils import unicode
7+
8+
9+
@keyword(types=['Integer']) # type is given as str
10+
def integer(argument, expected=None):
11+
_validate_type(argument, expected)
12+
13+
14+
@keyword(types=[u'INT']) # type is unicode on Python 2
15+
def int_(argument, expected=None):
16+
_validate_type(argument, expected)
17+
18+
19+
@keyword(types=['Float'])
20+
def float_(argument, expected=None):
21+
_validate_type(argument, expected)
22+
23+
24+
@keyword(types=['Double'])
25+
def double(argument, expected=None):
26+
_validate_type(argument, expected)
27+
28+
29+
@keyword(types=['DECIMAL'])
30+
def decimal(argument, expected=None):
31+
_validate_type(argument, expected)
32+
33+
34+
@keyword(types=['Boolean'])
35+
def boolean(argument, expected=None):
36+
_validate_type(argument, expected)
37+
38+
39+
@keyword(types=['Bool'])
40+
def bool_(argument, expected=None):
41+
_validate_type(argument, expected)
42+
43+
44+
@keyword(types=['String'])
45+
def string(argument, expected=None):
46+
_validate_type(argument, expected)
47+
48+
49+
@keyword(types=['BYTES'])
50+
def bytes_(argument, expected=None):
51+
_validate_type(argument, expected)
52+
53+
54+
@keyword(types=['ByteArray'])
55+
def bytearray_(argument, expected=None):
56+
_validate_type(argument, expected)
57+
58+
59+
@keyword(types=['DateTime'])
60+
def datetime_(argument, expected=None):
61+
_validate_type(argument, expected)
62+
63+
64+
@keyword(types=['Date'])
65+
def date_(argument, expected=None):
66+
_validate_type(argument, expected)
67+
68+
69+
@keyword(types=['TimeDelta'])
70+
def timedelta_(argument, expected=None):
71+
_validate_type(argument, expected)
72+
73+
74+
@keyword(types=['List'])
75+
def list_(argument, expected=None):
76+
_validate_type(argument, expected)
77+
78+
79+
@keyword(types=['TUPLE'])
80+
def tuple_(argument, expected=None):
81+
_validate_type(argument, expected)
82+
83+
84+
@keyword(types=['Dictionary'])
85+
def dictionary(argument, expected=None):
86+
_validate_type(argument, expected)
87+
88+
89+
@keyword(types=['Dict'])
90+
def dict_(argument, expected=None):
91+
_validate_type(argument, expected)
92+
93+
94+
@keyword(types=['Map'])
95+
def map_(argument, expected=None):
96+
_validate_type(argument, expected)
97+
98+
99+
@keyword(types=['Set'])
100+
def set_(argument, expected=None):
101+
_validate_type(argument, expected)
102+
103+
104+
@keyword(types=['FrozenSet'])
105+
def frozenset_(argument, expected=None):
106+
_validate_type(argument, expected)
107+
108+
109+
def _validate_type(argument, expected):
110+
if isinstance(expected, (str, unicode)):
111+
expected = eval(expected)
112+
if argument != expected or type(argument) != type(expected):
113+
raise AssertionError('%r (%s) != %r (%s)'
114+
% (argument, type(argument).__name__,
115+
expected, type(expected).__name__))

0 commit comments

Comments
 (0)