2 new revisions:

Revision: 032ff84911f0
Branch:   default
Author:   Pekka Klärck
Date:     Mon Sep 17 03:13:18 2012
Log:      keywordremover: small cleanup
http://code.google.com/p/robotframework/source/detail?r=032ff84911f0

Revision: 49b89114940f
Branch:   default
Author:   Pekka Klärck
Date:     Mon Sep 17 03:46:21 2012
Log: Keep last keyword inside for loop when using --RemoveKeywords FOR....
http://code.google.com/p/robotframework/source/detail?r=49b89114940f

==============================================================================
Revision: 032ff84911f0
Branch:   default
Author:   Pekka Klärck
Date:     Mon Sep 17 03:13:18 2012
Log:      keywordremover: small cleanup
http://code.google.com/p/robotframework/source/detail?r=032ff84911f0

Modified:
 /src/robot/result/keywordremover.py

=======================================
--- /src/robot/result/keywordremover.py Tue Mar  6 00:46:30 2012
+++ /src/robot/result/keywordremover.py Mon Sep 17 03:13:18 2012
@@ -37,6 +37,9 @@
         kw.messages = []
         self._removal_message.set(kw)

+    def _failed_or_contains_warning(self, item):
+        return not item.passed or self._contains_warning(item)
+
     def _contains_warning(self, item):
         contains_warning = ContainsWarning()
         item.visit(contains_warning)
@@ -58,13 +61,10 @@
                     self._clear_content(keyword)

     def visit_test(self, test):
-        if self._should_be_cleared(test):
+        if not self._failed_or_contains_warning(test):
             for keyword in test.keywords:
                 self._clear_content(keyword)

-    def _should_be_cleared(self, item):
-        return item.passed and not self._contains_warning(item)
-
     def visit_keyword(self, keyword):
         pass

@@ -75,24 +75,29 @@
     def start_keyword(self, kw):
         if kw.type == kw.FOR_LOOP_TYPE:
             before = len(kw.keywords)
-            kw.keywords = [item for item in kw.keywords
- if not item.passed or self._contains_warning(item)]
+            kw.keywords = self._remove_keywords(kw.keywords)
             self._removal_message.set_if_removed(kw, before)

+    def _remove_keywords(self, keywords):
+ return [kw for kw in keywords if self._failed_or_contains_warning(kw)]
+

 class WaitUntilKeywordSucceedsRemover(_KeywordRemover):
     _message = '%d failing step%s removed using --RemoveKeywords option.'

     def start_keyword(self, kw):
if kw.name == 'BuiltIn.Wait Until Keyword Succeeds' and kw.keywords:
-            keywords = list(kw.keywords)
-            last_included = 2 if kw.keywords[-1].passed else 1
- kw.keywords = self._kws_with_warnings(keywords[:-last_included]) + \
-                          keywords[-last_included:]
-            self._removal_message.set_if_removed(kw, len(keywords))
+            before = len(kw.keywords)
+            kw.keywords = self._remove_keywords(list(kw.keywords))
+            self._removal_message.set_if_removed(kw, before)
+
+    def _remove_keywords(self, keywords):
+        include_from_end = 2 if keywords[-1].passed else 1
+        return self._kws_with_warnings(keywords[:-include_from_end]) \
+                + keywords[-include_from_end:]

     def _kws_with_warnings(self, keywords):
-        return [k for k in keywords if self._contains_warning(k)]
+        return [kw for kw in keywords if self._contains_warning(kw)]


 class ContainsWarning(SuiteVisitor):
@@ -122,10 +127,7 @@
     def set_if_removed(self, kw, len_before):
         removed = len_before - len(kw.keywords)
         if removed:
- self._set(kw, self._message % (removed, utils.plural_or_not(removed))) + self.set(kw, self._message % (removed, utils.plural_or_not(removed)))

-    def set(self, kw):
-        self._set(kw, self._message)
-
-    def _set(self, kw, message):
-        kw.doc = ('%s\n\n_%s_' % (kw.doc, message)).strip()
+    def set(self, kw, message=None):
+ kw.doc = ('%s\n\n_%s_' % (kw.doc, message or self._message)).strip()

==============================================================================
Revision: 49b89114940f
Branch:   default
Author:   Pekka Klärck
Date:     Mon Sep 17 03:46:21 2012
Log:      Keep last keyword inside for loop when using --RemoveKeywords FOR.

Update issue 1227
Status: Done
Implemented and tested. Commit contains also some test cleanup/enhancements.
http://code.google.com/p/robotframework/source/detail?r=49b89114940f

Modified:
 /atest/robot/cli/rebot/remove_keywords/for_loop_keywords.txt
 /src/robot/result/keywordremover.py

=======================================
--- /atest/robot/cli/rebot/remove_keywords/for_loop_keywords.txt Wed Sep 12 16:05:24 2012 +++ /atest/robot/cli/rebot/remove_keywords/for_loop_keywords.txt Mon Sep 17 03:46:21 2012
@@ -4,37 +4,47 @@
 Force Tags        pybot    jybot    regression
 Resource          remove_keywords_resource.txt

+*** Variables ***
+${0 REMOVED}      ${EMPTY}
+${1 REMOVED}      _1 passing step removed using --RemoveKeywords option._
+${3 REMOVED}      _3 passing steps removed using --RemoveKeywords option._
+${4 REMOVED}      _4 passing steps removed using --RemoveKeywords option._
+
 *** Test Cases ***
-Passed Steps Are Removed
+Passed Steps Are Removed Except The Last One
     ${tc}=    Check Test Case    Simple For
- Keyword Should Be Empty ${tc.kws[1]} \${var} IN [ one | two ] [] - Should Be Equal ${tc.kws[1].doc} _2 passing steps removed using --RemoveKeywords option._
+    Length Should Be    ${tc.kws[1].kws}    1
+    Should Be Equal     ${tc.kws[1].doc}    ${1 REMOVED}
+    Should Be Equal     ${tc.kws[1].kws[0].status}    PASS

 Failed Steps Are Not Removed
     ${tc}=    Check Test Case    For Failing 2
     Length Should Be    ${tc.kws[0].kws}    1
- Should Be Equal ${tc.kws[0].doc} _3 passing steps removed using --RemoveKeywords option._
-    Should Be Equal    ${tc.kws[0].kws[0].name}    \${num} = 4
+    Should Be Equal     ${tc.kws[0].doc}    ${3 REMOVED}
+    Should Be Equal     ${tc.kws[0].kws[0].name}    \${num} = 4
     Length Should Be    ${tc.kws[0].kws[0].kws}    2
-    Should Be Equal    ${tc.kws[0].kws[0].kws[1].status}    FAIL
+    Should Be Equal     ${tc.kws[0].kws[0].status}    FAIL

 Steps With Warning Are Not Removed
     ${tc}=    Check Test Case    Simple For 2
-    Log    ${tc.kws[0].kws[0].kws[-1]}
+    Length Should Be     ${tc.kws[0].kws}    2
+    Should Be Equal      ${tc.kws[0].doc}    ${4 REMOVED}
Check Log Message ${tc.kws[0].kws[0].kws[-1].kws[0].msgs[0]} Presidential Candidate! WARN Check Log Message ${tc.kws[0].kws[1].kws[-1].kws[0].msgs[0]} Presidential Candidate! WARN

 Steps From Nested Loops Are Removed
     ${tc}=    Check Test Case    Nested For In User Keywords
-    Length Should Be    ${tc.kws[0].kws[0].kws[0].kws}    2
- Keyword Should Be Empty ${tc.kws[0].kws[0].kws[0].kws[0].kws[1]} \${x} IN [ 1 | 2 ] [] - Keyword Should Be Empty ${tc.kws[0].kws[0].kws[0].kws[1].kws[0]} \${arg} IN [ \@{args} ] []
+    Length Should Be    ${tc.kws[0].kws[0].kws}    1
+    Should Be Equal     ${tc.kws[0].kws[0].doc}    ${0 REMOVED}
+    Length Should Be    ${tc.kws[0].kws[0].kws[0].kws[0].kws[1].kws}    1
+ Should Be Equal ${tc.kws[0].kws[0].kws[0].kws[0].kws[1].doc} ${1 REMOVED}
+    Length Should Be    ${tc.kws[0].kws[0].kws[0].kws[1].kws[0].kws}    1
+ Should Be Equal ${tc.kws[0].kws[0].kws[0].kws[1].kws[0].doc} ${1 REMOVED}

-Check Removal Message
-    ${tc}=    Check Test Case    For With Failures In User Keywords
- Should Be Equal ${tc.kws[0].doc} _1 passing step removed using --RemoveKeywords option._
-    ${tc}=    Check Test Case    For Failing
-    Should Be Equal   ${tc.kws[0].doc}    ${EMPTY}
+Empty Loops Are Handled Correctly
+    ${tc}=    Check Test Case    Empty For
+    Should Be Empty    ${tc.kws[0].kws}
+    Should Be Equal    ${tc.kws[0].doc}    ${0 REMOVED}

 *** Keywords ***
 Remove For Loop Keywords With Rebot
=======================================
--- /src/robot/result/keywordremover.py Mon Sep 17 03:13:18 2012
+++ /src/robot/result/keywordremover.py Mon Sep 17 03:46:21 2012
@@ -79,7 +79,8 @@
             self._removal_message.set_if_removed(kw, before)

     def _remove_keywords(self, keywords):
- return [kw for kw in keywords if self._failed_or_contains_warning(kw)]
+        return [kw for kw in keywords
+ if self._failed_or_contains_warning(kw) or kw is keywords[-1]]


 class WaitUntilKeywordSucceedsRemover(_KeywordRemover):

Reply via email to