Skip to content

Commit d36e72a

Browse files
pekkaklarckyanne
authored andcommitted
Some more AST handling cleanup
1 parent c6f4796 commit d36e72a

File tree

2 files changed

+35
-33
lines changed

2 files changed

+35
-33
lines changed

src/robot/running/builder/testsettings.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,23 +77,27 @@ class TestSettings(object):
7777

7878
def __init__(self, defaults):
7979
self.defaults = defaults
80-
self._setup = None
81-
self._teardown = None
80+
self._setup = NOTSET
81+
self._teardown = NOTSET
8282
self._timeout = NOTSET
8383
self._template = NOTSET
8484
self._tags = NOTSET
8585

8686
@property
8787
def setup(self):
88-
return self._setup or self.defaults.setup
88+
if self._setup is NOTSET:
89+
return self.defaults.setup
90+
return self._setup
8991

9092
@setup.setter
9193
def setup(self, setup):
9294
self._setup = setup
9395

9496
@property
9597
def teardown(self):
96-
return self._teardown or self.defaults.teardown
98+
if self._teardown is NOTSET:
99+
return self.defaults.teardown
100+
return self._teardown
97101

98102
@teardown.setter
99103
def teardown(self, teardown):

src/robot/running/builder/transformers.py

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,16 @@
1717

1818
from robot.variables import VariableIterator
1919

20-
from ..model import ForLoop
20+
from ..model import ForLoop, Keyword
2121
from .testsettings import TestSettings
2222

2323

24+
def fixture(node, fixture_type):
25+
if node.name is None:
26+
return None
27+
return Keyword(node.name, args=node.args, type=fixture_type)
28+
29+
2430
class SettingsBuilder(ast.NodeVisitor):
2531

2632
def __init__(self, suite, test_defaults):
@@ -34,18 +40,16 @@ def visit_MetadataSetting(self, node):
3440
self.suite.metadata[node.name] = node.value
3541

3642
def visit_SuiteSetupSetting(self, node):
37-
if node.name:
38-
self.suite.keywords.create_setup(name=node.name, args=node.args)
43+
self.suite.keywords.setup = fixture(node, Keyword.SETUP_TYPE)
3944

4045
def visit_SuiteTeardownSetting(self, node):
41-
if node.name:
42-
self.suite.keywords.create_teardown(name=node.name, args=node.args)
46+
self.suite.keywords.teardown = fixture(node, Keyword.TEARDOWN_TYPE)
4347

4448
def visit_TestSetupSetting(self, node):
45-
self.test_defaults.setup = node
49+
self.test_defaults.setup = fixture(node, Keyword.SETUP_TYPE)
4650

4751
def visit_TestTeardownSetting(self, node):
48-
self.test_defaults.teardown = node
52+
self.test_defaults.teardown = fixture(node, Keyword.TEARDOWN_TYPE)
4953

5054
def visit_TestTimeoutSetting(self, node):
5155
self.test_defaults.timeout = node.value
@@ -135,20 +139,16 @@ def __init__(self, suite, defaults):
135139
def visit_TestCase(self, node):
136140
self.test = self.suite.tests.create(name=node.name)
137141
self.generic_visit(node)
138-
self._set_settings(self.settings)
139-
140-
def _set_settings(self, settings):
141-
if settings.setup and settings.setup.name:
142-
self.test.keywords.create_setup(name=settings.setup.name,
143-
args=settings.setup.args)
144-
if settings.teardown and settings.teardown.name:
145-
self.test.keywords.create_teardown(name=settings.teardown.name,
146-
args=settings.teardown.args)
147-
self.test.timeout = settings.timeout
148-
self.test.tags = settings.tags
142+
self._set_settings(self.test, self.settings)
143+
144+
def _set_settings(self, test, settings):
145+
test.keywords.setup = settings.setup
146+
test.keywords.teardown = settings.teardown
147+
test.timeout = settings.timeout
148+
test.tags = settings.tags
149149
if settings.template:
150-
self.test.template = settings.template
151-
self._set_template(self.test, settings.template)
150+
test.template = settings.template
151+
self._set_template(test, settings.template)
152152

153153
def _set_template(self, parent, template):
154154
for kw in parent.keywords:
@@ -182,10 +182,10 @@ def visit_DocumentationSetting(self, node):
182182
self.test.doc = node.value
183183

184184
def visit_SetupSetting(self, node):
185-
self.settings.setup = node
185+
self.settings.setup = fixture(node, Keyword.SETUP_TYPE)
186186

187187
def visit_TeardownSetting(self, node):
188-
self.settings.teardown = node
188+
self.settings.teardown = fixture(node, Keyword.TEARDOWN_TYPE)
189189

190190
def visit_TimeoutSetting(self, node):
191191
self.settings.timeout = node.value
@@ -211,9 +211,7 @@ def __init__(self, resource):
211211
def visit_Keyword(self, node):
212212
self.kw = self.resource.keywords.create(name=node.name)
213213
self.generic_visit(node)
214-
if self.teardown and self.teardown.name:
215-
self.kw.keywords.create_teardown(name=self.teardown.name,
216-
args=self.teardown.args)
214+
self.kw.keywords.teardown = self.teardown
217215

218216
def visit_DocumentationSetting(self, node):
219217
self.kw.doc = node.value
@@ -231,16 +229,16 @@ def visit_TimeoutSetting(self, node):
231229
self.kw.timeout = node.value
232230

233231
def visit_TeardownSetting(self, node):
234-
self.teardown = node
232+
self.teardown = fixture(node, Keyword.TEARDOWN_TYPE)
235233

236234
def visit_KeywordCall(self, node):
237235
self.kw.keywords.create(name=node.keyword, args=node.args,
238236
assign=node.assign)
239237

240238
def visit_ForLoop(self, node):
241-
for_loop = ForLoop(node.variables, node.values, node.flavor)
242-
ForLoopBuilder(for_loop).visit(node)
243-
self.kw.keywords.append(for_loop)
239+
loop = ForLoop(node.variables, node.values, node.flavor)
240+
ForLoopBuilder(loop).visit(node)
241+
self.kw.keywords.append(loop)
244242

245243

246244
class ForLoopBuilder(ast.NodeVisitor):

0 commit comments

Comments
 (0)