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