Revision: 3548
Author: jussi.ao.malinen
Date: Wed May 26 04:57:46 2010
Log: default value handling moved to own module
http://code.google.com/p/robotframework/source/detail?r=3548
Added:
/trunk/src/robot/running/defaultvalues.py
/trunk/utest/running/test_default_values.py
Modified:
/trunk/src/robot/running/model.py
=======================================
--- /dev/null
+++ /trunk/src/robot/running/defaultvalues.py Wed May 26 04:57:46 2010
@@ -0,0 +1,67 @@
+
+# Copyright 2008-2009 Nokia Siemens Networks Oyj
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from fixture import Setup, Teardown
+from timeouts import TestTimeout
+
+
+class DefaultValues(object):
+
+ def __init__(self, settings, parent_default_values=None):
+ self._parent = parent_default_values
+ self._setup = settings.test_setup \
+ if settings.test_setup.is_set() else None
+ self._teardown = settings.test_teardown \
+ if settings.test_teardown.is_set() else None
+ self._timeout = settings.test_timeout \
+ if settings.test_timeout.is_set() else None
+ self._force_tags = settings.force_tags.value
+ self._default_tags = settings.default_tags.value
+
+ def get_setup(self, tc_setup):
+ setup = self._get_applicapble(tc_setup, self._get_setup())
+ return Setup(setup.name, setup.args)
+
+ def _get_applicapble(self, tc_value, own_value):
+ if tc_value.is_set():
+ return tc_value
+ return own_value if own_value else tc_value
+
+ def _get_setup(self):
+ if self._setup:
+ return self._setup
+ return self._parent._get_setup() if self._parent else None
+
+ def get_teardown(self, tc_teardown):
+ teardown = self._get_applicapble(tc_teardown, self._get_teardown())
+ return Teardown(teardown.name, teardown.args)
+
+ def _get_teardown(self):
+ if self._teardown:
+ return self._teardown
+ return self._parent._get_teardown() if self._parent else None
+
+ def get_timeout(self, tc_timeout):
+ timeout = self._get_applicapble(tc_timeout, self._timeout)
+ return TestTimeout(timeout.value, timeout.message)
+
+ def get_tags(self, tc_tags):
+ tags = tc_tags.value if tc_tags.is_set() else self._default_tags
+ return tags + self._get_force_tags()
+
+ def _get_force_tags(self):
+ if not self._parent:
+ return self._force_tags
+ return self._force_tags + self._parent._get_force_tags()
=======================================
--- /dev/null
+++ /trunk/utest/running/test_default_values.py Wed May 26 04:57:46 2010
@@ -0,0 +1,48 @@
+import unittest
+
+from robot.utils.asserts import *
+from robot.running.model import DefaultValues
+from robot.parsing.model import TestCaseFileSettingTable,
InitFileSettingTable
+from robot.parsing.settings import Tags, Fixture
+
+
+class TestDefaultValues(unittest.TestCase):
+
+ def setUp(self):
+ dir_table = InitFileSettingTable(None)
+ dir_table.force_tags.set(['dir_force_tag1','dir_force_tag2'])
+ dir_table.test_setup.set(['dir_setup','arg'], 'comment')
+ directory = DefaultValues(dir_table)
+ tcf_table = TestCaseFileSettingTable(None)
+ tcf_table.force_tags.set(['tcf_force_tag1','tcf_force_tag2'])
+ tcf_table.default_tags.set(['tcf_default_tag1','tcf_default_tag2'])
+ self.tcf_defaults = DefaultValues(tcf_table, directory)
+
+ def test_default_tags(self):
+ tc_tags = Tags()
+ assert_equal(self.tcf_defaults.get_tags(tc_tags),
+
['tcf_default_tag1','tcf_default_tag2','tcf_force_tag1',
+ 'tcf_force_tag2','dir_force_tag1','dir_force_tag2'])
+
+ def test_overriding_default_tags(self):
+ tc_tags = Tags()
+ tc_tags.set(['test_tag1','test_tag2'])
+ assert_equal(self.tcf_defaults.get_tags(tc_tags),
+ ['test_tag1','test_tag2','tcf_force_tag1',
+ 'tcf_force_tag2','dir_force_tag1','dir_force_tag2'])
+
+ def test_setup_from_directory(self):
+ setup = self.tcf_defaults.get_setup(Fixture())
+ assert_equal(setup.name,'dir_setup')
+ assert_equal(setup.args,['arg'])
+
+ def test_teardown_empty(self):
+ assert_equal(self.tcf_defaults.get_teardown(Fixture()).name,'')
+
+ def test_teardown_from_test(self):
+ teardown = Fixture()
+ teardown.set(['name','arg','arg2'])
+ assert_equal(self.tcf_defaults.get_teardown(teardown).name,'name')
+
+if __name__ == "__main__":
+ unittest.main()
=======================================
--- /trunk/src/robot/running/model.py Wed May 26 03:23:30 2010
+++ /trunk/src/robot/running/model.py Wed May 26 04:57:46 2010
@@ -30,6 +30,7 @@
from runerrors import SuiteRunErrors, TestRunErrors
from userkeyword import UserLibrary
from context import ExecutionContext
+from defaultvalues import DefaultValues
def TestSuite(datasources, settings):
@@ -75,7 +76,7 @@
class RunnableTestSuite(BaseTestSuite):
- def __init__(self, data, parent=None):
+ def __init__(self, data, parent=None, defaults=None):
BaseTestSuite.__init__(self, data.name, data.source, parent)
self.variables = GLOBAL_VARIABLES.copy()
self.variables.set_from_variable_table(data.variable_table)
@@ -88,10 +89,11 @@
data.setting_table.suite_setup.args)
self.teardown = Teardown(data.setting_table.suite_teardown.name,
data.setting_table.suite_teardown.args)
+ defaults = DefaultValues(data.setting_table, defaults)
for suite in data.children:
- RunnableTestSuite(suite, parent=self)
+ RunnableTestSuite(suite, parent=self, defaults=defaults)
for test in data.testcase_table:
- RunnableTestCase(test, parent=self)
+ RunnableTestCase(test, parent=self, defaults=defaults)
self._run_mode_exit_on_failure = False
self._run_mode_dry_run = False
@@ -199,15 +201,13 @@
class RunnableTestCase(BaseTestCase):
- def __init__(self, tc_data, parent):
+ def __init__(self, tc_data, parent, defaults):
BaseTestCase.__init__(self, tc_data.name, parent)
self.doc = tc_data.doc.value
- setup = tc_data.setup.is_set() and tc_data.setup or
self._get_parent_test_setup(tc_data.parent.parent)
- self.setup = Setup(setup.name, setup.args)
- teardown = tc_data.teardown.is_set() and tc_data.teardown or
self._get_parent_test_teardown(tc_data.parent.parent)
- self.teardown = Teardown(teardown.name, teardown.args)
- self.tags = self._get_tags(tc_data)
- self.timeout = self._get_timeout(tc_data)
+ self.setup = defaults.get_setup(tc_data.setup)
+ self.teardown = defaults.get_teardown(tc_data.teardown)
+ self.tags = defaults.get_tags(tc_data.tags)
+ self.timeout = defaults.get_timeout(tc_data.timeout)
self.keywords = Keywords(tc_data.steps)
def run(self, context, suite_errors):
@@ -294,33 +294,3 @@
self.endtime = utils.get_timestamp()
self.elapsedtime = utils.get_elapsed_time(self.starttime,
self.endtime)
context.end_test(self)
-
- # FIXME: Clean up getting test settings (e.g. Serious Law of Demeter
breaking)
- def _get_tags(self, tc_data):
- force_tags = self._get_parent_force_tags(tc_data.parent.parent)
- tc_tags = tc_data.tags.value if tc_data.tags.is_set() \
- else tc_data.parent.parent.setting_table.default_tags.value
- return tc_tags + force_tags
-
- def _get_parent_force_tags(self, data):
- parent_tags = data.parent and
self._get_parent_force_tags(data.parent) or []
- return data.setting_table.force_tags.value + parent_tags
-
- def _get_parent_test_setup(self, data):
- if data.setting_table.test_setup.is_set():
- return data.setting_table.test_setup
- return data.parent and self._get_parent_test_setup(data.parent) or
Fixture()
-
- def _get_parent_test_teardown(self, data):
- if data.setting_table.test_teardown.is_set():
- return data.setting_table.test_teardown
- return data.parent and self._get_parent_test_teardown(data.parent)
or Fixture()
-
- def _get_timeout(self, tc_data):
- if tc_data.timeout.is_set():
- return self._build_timeout(tc_data.timeout)
- return
self._build_timeout(tc_data.parent.parent.setting_table.test_timeout)
-
- def _build_timeout(self, timeout):
- return TestTimeout(timeout.value, timeout.message)
-