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