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

Reply via email to