Revision: 3617
Author: KariHusa
Date: Fri May 28 01:22:46 2010
Log: Continued implementing the template, issue 500
http://code.google.com/p/robotframework/source/detail?r=3617

Modified:
 /trunk/src/robot/running/context.py
 /trunk/src/robot/running/defaultvalues.py
 /trunk/src/robot/running/keywords.py
 /trunk/src/robot/running/model.py
 /trunk/utest/running/test_default_values.py

=======================================
--- /trunk/src/robot/running/context.py Sun May 23 22:35:56 2010
+++ /trunk/src/robot/running/context.py Fri May 28 01:22:46 2010
@@ -21,6 +21,7 @@
         self.namespace = namespace
         self.output = output
         self.dry_run = dry_run
+        self.continue_on_failure = False

     def get_current_vars(self):
         return self.namespace.variables
@@ -28,6 +29,7 @@
     def end_test(self, test):
         self.output.end_test(test)
         self.namespace.end_test()
+        self.continue_on_failure = False

     def end_suite(self, suite):
         self.output.end_suite(suite)
@@ -64,7 +66,8 @@
         self.get_current_vars()['${SUITE_STATUS}'] = status
         self.get_current_vars()['${SUITE_MESSAGE}'] = message

-    def start_test(self, test):
+    def start_test(self, test, continue_on_failure=False):
+        self.continue_on_failure = continue_on_failure
         self.namespace.start_test(test)
         self.output.start_test(test)

=======================================
--- /trunk/src/robot/running/defaultvalues.py   Wed May 26 05:34:38 2010
+++ /trunk/src/robot/running/defaultvalues.py   Fri May 28 01:22:46 2010
@@ -26,6 +26,7 @@
         self._timeout = settings.test_timeout
         self._force_tags = settings.force_tags
         self._default_tags = settings.default_tags
+        self._test_template = settings.test_template

     def get_setup(self, tc_setup):
setup = tc_setup if tc_setup.is_set() else self._get_default_setup()
@@ -57,3 +58,7 @@
         if not self._parent:
             return self._force_tags
         return self._force_tags + self._parent._get_force_tags()
+
+    def get_template(self, template):
+        tmplt = template if template.is_set() else self._test_template
+        return tmplt.value
=======================================
--- /trunk/src/robot/running/keywords.py        Thu May 27 11:12:49 2010
+++ /trunk/src/robot/running/keywords.py        Fri May 28 01:22:46 2010
@@ -21,18 +21,18 @@

 class Keywords(object):

-    def __init__(self, steps):
+    def __init__(self, steps, template=False):
         self._keywords = []
         for step in steps:
-            self._add_keyword(step)
-
-    def _add_keyword(self, step):
+            self._add_keyword(step, template)
+
+    def _add_keyword(self, step, template):
         if step.is_comment():
             return
         if step.is_for_loop():
             keyword = ForLoop(step)
         else:
-            keyword = Keyword(step.keyword, step.args, step.assign)
+ keyword = Keyword(step.keyword, step.args, step.assign, continue_on_failure=template)
         self._keywords.append(keyword)

     def run(self, context):
@@ -56,16 +56,19 @@

 class Keyword(BaseKeyword):

-    def __init__(self, name, args, assign=None, type='kw'):
+ def __init__(self, name, args, assign=None, type='kw', continue_on_failure=False):
         BaseKeyword.__init__(self, name, args, type=type)
         self.assign = assign or []
         self.handler_name = name
+        self.continue_on_failure = continue_on_failure

     def run(self, context):
         handler = self._start(context)
         try:
             return_value = self._run(handler, context)
         except ExecutionFailed, err:
+            if self.continue_on_failure:
+                err.cont = True
             self.status = 'FAIL'
             self._end(context, error=err)
             raise
=======================================
--- /trunk/src/robot/running/model.py   Wed May 26 05:34:38 2010
+++ /trunk/src/robot/running/model.py   Fri May 28 01:22:46 2010
@@ -17,6 +17,7 @@
 from robot import utils
 from robot.common import BaseTestSuite, BaseTestCase
 from robot.parsing import TestCaseFile, TestDataDirectory
+from robot.parsing.model import Step
 from robot.errors import ExecutionFailed, DataError
 from robot.variables import GLOBAL_VARIABLES
 from robot.output import LOGGER
@@ -197,6 +198,24 @@
         self._run_mode_dry_run = False


+class Template(object):
+
+    def __init__(self, template):
+        self.template = template
+
+    def apply_to_steps(self, orig_steps):
+        if not self.template:
+            return orig_steps
+        steps = []
+        for s in orig_steps:
+ templated_step = Step([self.template] + s.assign + [s.keyword] + s.args)
+            steps.append(templated_step)
+        return steps
+
+    def __nonzero__(self):
+        return bool(self.template)
+
+
 class RunnableTestCase(BaseTestCase):

     def __init__(self, tc_data, parent, defaults):
@@ -206,7 +225,9 @@
         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)
+        self.template = Template(defaults.get_template(tc_data.template))
+        steps = self.template.apply_to_steps(tc_data.steps)
+        self.keywords = Keywords(steps, self.template)

     def run(self, context, suite_errors):
         self._suite_errors = suite_errors
=======================================
--- /trunk/utest/running/test_default_values.py Wed May 26 05:34:57 2010
+++ /trunk/utest/running/test_default_values.py Fri May 28 01:22:46 2010
@@ -3,7 +3,7 @@
 from robot.utils.asserts import *
 from robot.running.defaultvalues import DefaultValues
from robot.parsing.model import TestCaseFileSettingTable, InitFileSettingTable
-from robot.parsing.settings import Tags, Fixture
+from robot.parsing.settings import Tags, Fixture, Template


 class TestDefaultValues(unittest.TestCase):
@@ -16,6 +16,7 @@
         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'])
+        tcf_table.test_template.set(['Foo'])
         self.tcf_defaults = DefaultValues(tcf_table, directory)

     def test_default_tags(self):
@@ -44,5 +45,12 @@
         teardown.set(['name','arg','arg2'])
         assert_equal(self.tcf_defaults.get_teardown(teardown).name,'name')

+    def test_template(self):
+        template = Template()
+        assert_equal(self.tcf_defaults.get_template(template),'Foo')
+        template.set(['Bar'])
+        assert_equal(self.tcf_defaults.get_template(template),'Bar')
+
+
 if __name__ == "__main__":
     unittest.main()

Reply via email to