Revision: 3129
Author: jussi.ao.malinen
Date: Mon May 3 09:13:44 2010
Log: Issue 341 (Set Test Message - keyword). Implementation and tests.
http://code.google.com/p/robotframework/source/detail?r=3129
Added:
/trunk/atest/robot/standard_libraries/builtin/set_test_message.txt
/trunk/atest/testdata/standard_libraries/builtin/set_test_message.txt
/trunk/atest/testdata/standard_libraries/builtin/set_test_message_in_suite_level.txt
Modified:
/trunk/atest/resources/TestCheckerLibrary.py
/trunk/src/robot/libraries/BuiltIn.py
/trunk/src/robot/running/model.py
=======================================
--- /dev/null
+++ /trunk/atest/robot/standard_libraries/builtin/set_test_message.txt Mon
May 3 09:13:44 2010
@@ -0,0 +1,33 @@
+*** Settings ***
+Force Tags regression pybot jybot
+Suite Setup Run Tests ${EMPTY}
standard_libraries/builtin/set_test_message.txt
standard_libraries/builtin/set_test_message_in_suite_level.txt
+Resource atest_resource.txt
+
+*** Test Cases ***
+Set Message To Successful Test
+ Check Test Case ${TEST NAME} PASS My Test Message
+
+Set Message To Test That Failed
+ Check Test Case ${TEST NAME}
+
+Set Message To Failed Test On Teardown
+ Check Test Case ${TEST NAME}
+
+Set Message and Fail On Teardown
+ Check Test Case ${TEST NAME}
+
+Set Message On Setup
+ Check Test Case ${TEST NAME} PASS Setup Message
+
+Set Message On Setup And Check Its Value
+ Check Test Case ${TEST NAME} PASS Message To Be Checked
+
+Check Message From Previous Test
+ Check Test Case ${TEST NAME}
+
+Not Allowed In Suite Setup or Teardown
+ ${error}= Catenate SEPARATOR=\n Suite setup failed:
+ ... 'Set Test Message' keyword cannot be used in suite setup or
teardown\n
+ ... Also suite teardown failed:
+ ... 'Set Test Message' keyword cannot be used in suite setup or
teardown
+ Should Be Equal ${SUITE.suites[1].message} ${error}
=======================================
--- /dev/null
+++ /trunk/atest/testdata/standard_libraries/builtin/set_test_message.txt
Mon May 3 09:13:44 2010
@@ -0,0 +1,32 @@
+*** Test cases ***
+Set Message To Successful Test
+ Set Test Message My Test Message
+ No Operation
+
+Set Message To Test That Failed
+ [documentation] FAIL Fail Message
+ Set Test Message Message That Will Be Ignored
+ Fail Fail Message
+
+Set Message To Failed Test On Teardown
+ [documentation] FAIL Teardown Message
+ Fail Message That Will Be Ignored
+ [teardown] Set Test Message Teardown Message
+
+Set Message and Fail On Teardown
+ [documentation] FAIL Message Before Teardown\n\nAlso teardown
failed:\nFailing Teardown Message
+ Set Test Message Message Before Teardown
+ [teardown] Fail Failing Teardown Message
+
+Set Message On Setup
+ [setup] Set Test Message Setup Message
+ No Operation
+
+Set Message On Setup And Check Its Value
+ [setup] Set Test Message Message To Be Checked
+ Variable Should Not Exist ${TEST MESSAGE}
+ [teardown] Should Be Equal ${TEST MESSAGE} Message To Be Checked
+
+Check Message From Previous Test
+ Should Be Equal ${PREV TEST MESSAGE} Message To Be Checked
+
=======================================
--- /dev/null
+++
/trunk/atest/testdata/standard_libraries/builtin/set_test_message_in_suite_level.txt
Mon May 3 09:13:44 2010
@@ -0,0 +1,7 @@
+*** Settings ***
+Suite Setup Set Test Message This Is Illegal
+Suite Teardown Set Test Message This is Also Illegal
+
+*** Test Cases ***
+Test
+ No Operation
=======================================
--- /trunk/atest/resources/TestCheckerLibrary.py Thu Apr 8 08:09:17 2010
+++ /trunk/atest/resources/TestCheckerLibrary.py Mon May 3 09:13:44 2010
@@ -93,7 +93,7 @@
if test.message.startswith(start):
return
- raise AssertionError("Wrong error message\n\n"
+ raise AssertionError("Wrong message\n\n"
"Expected:\n%s\n\nActual:\n%s\n"
% (test.exp_message, test.message))
=======================================
--- /trunk/src/robot/libraries/BuiltIn.py Fri Apr 23 03:13:49 2010
+++ /trunk/src/robot/libraries/BuiltIn.py Mon May 3 09:13:44 2010
@@ -1382,6 +1382,22 @@
return re.escape(patterns[0])
return [ re.escape(pattern) for pattern in patterns ]
+ def set_test_message(self, message):
+ """Sets message for for the current test.
+
+ This is overridden by possible failure message, except when this
keyword
+ is used in test case teardown. In test case teardown this overrides
+ messages even for failed tests.
+
+ This keyword can not be used in suite setup or suite teardown.
+ """
+ test = NAMESPACES.current.test
+ if test is None:
+ raise RuntimeError("'Set Test Message' keyword cannot be used
in "
+ "suite setup or teardown")
+ test.message = message
+ print 'Set test message to:\n%s' % message
+
def set_tags(self, *tags):
"""Adds given `tags` for the current test or all tests in a suite.
=======================================
--- /trunk/src/robot/running/model.py Mon May 3 00:10:16 2010
+++ /trunk/src/robot/running/model.py Mon May 3 09:13:44 2010
@@ -226,9 +226,13 @@
return
def _report_status(self, namespace):
- self.message = self._run_errors.get_message()
+ message = self._run_errors.get_message()
+ if message:
+ self.status = 'FAIL'
+ self.message = message
+ else:
+ self.status = 'PASS'
namespace.variables['${TEST_MESSAGE}'] = self.message
- self.status = self.message == '' and 'PASS' or 'FAIL'
namespace.variables['${TEST_STATUS}'] = self.status
def _run_teardown(self, output, namespace):