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)
-

Reply via email to