3 new revisions:
Revision: 4f48ea625352
Author: Mikko Korpela <[email protected]>
Date: Sat Nov 12 04:33:10 2011
Log: Add combiningvisitor and removingvisitor
http://code.google.com/p/robotframework/source/detail?r=4f48ea625352
Revision: ce1f2ba89e0c
Author: Mikko Korpela <[email protected]>
Date: Sat Nov 12 04:55:26 2011
Log: Add visit_statistics
http://code.google.com/p/robotframework/source/detail?r=ce1f2ba89e0c
Revision: fc35b00f63b6
Author: Mikko Korpela <[email protected]>
Date: Sat Nov 12 04:59:53 2011
Log: Preparation for RemovingVisitor integration
http://code.google.com/p/robotframework/source/detail?r=fc35b00f63b6
==============================================================================
Revision: 4f48ea625352
Author: Mikko Korpela <[email protected]>
Date: Sat Nov 12 04:33:10 2011
Log: Add combiningvisitor and removingvisitor
http://code.google.com/p/robotframework/source/detail?r=4f48ea625352
Added:
/src/robot/result/combiningvisitor.py
/utest/result/test_combiningvisitor.py
=======================================
--- /dev/null
+++ /src/robot/result/combiningvisitor.py Sat Nov 12 04:33:10 2011
@@ -0,0 +1,46 @@
+# Copyright 2008-2011 Nokia Siemens Networks Oyj
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+from robot.result.visitor import ResultVisitor
+
+
+class CombiningVisitor(ResultVisitor):
+
+ def __init__(self, *visitors):
+ self._visitors = visitors
+
+def _create_method(method_name):
+ def delegate_call(self, item):
+ for visitor in self._visitors:
+ getattr(visitor, method_name)(item)
+ setattr(CombiningVisitor, method_name, delegate_call)
+
+for method_name in (pre+'_'+post
+ for pre in ('start', 'end') \
+ for post in ('suite', 'test', 'keyword', 'message')):
+ _create_method(method_name)
+
+
+class RemovingVisitor(ResultVisitor):
+
+ def end_keyword(self, keyword):
+ keyword.keywords = []
+ keyword.messaged = []
+
+ def end_test(self, test):
+ test.keywords = []
+
+ def end_suite(self, suite):
+ suite.suites = []
+ suite.keywords = []
+ suite.tests = []
=======================================
--- /dev/null
+++ /utest/result/test_combiningvisitor.py Sat Nov 12 04:33:10 2011
@@ -0,0 +1,66 @@
+import unittest
+from robot.result.combiningvisitor import CombiningVisitor
+from robot.result.testsuite import TestSuite
+from robot.result.visitor import ResultVisitor
+from robot.utils.asserts import assert_equals, assert_true
+
+
+class MyTestCase(unittest.TestCase, ResultVisitor):
+
+ def setUp(self):
+ self._start_suite_calls = 0
+ self._start_test_calls = 0
+ self._start_keyword_calls = 0
+ self._end_suite_calls = 0
+ self._end_test_calls = 0
+ self._end_keyword_calls = 0
+ self._start_message_calls = 0
+ self._end_message_calls = 0
+
+ def start_suite(self, suite):
+ self._start_suite_calls += 1
+
+ def end_suite(self, suite):
+ assert_true(self._end_test_calls > 0)
+ self._end_suite_calls += 1
+
+ def start_test(self, test):
+ assert_true(self._start_suite_calls > 0)
+ self._start_test_calls += 1
+
+ def end_test(self, test):
+ assert_true(self._end_keyword_calls > 0)
+ self._end_test_calls += 1
+
+ def start_keyword(self, keyword):
+ assert_true(self._start_test_calls > 0)
+ self._start_keyword_calls += 1
+
+ def end_keyword(self, keyword):
+ assert_true(self._end_message_calls > 0)
+ self._end_keyword_calls += 1
+
+ def start_message(self, msg):
+ assert_true(self._start_keyword_calls > 0)
+ self._start_message_calls += 1
+
+ def end_message(self, msg):
+ assert_true(self._start_message_calls > 0)
+ self._end_message_calls += 1
+
+ def test_combining_visitor(self):
+ suite = TestSuite(name='hello')
+
suite.tests.create(name='test').keywords.create(name='foo').messages.create(message='hello')
+ suite.visit(CombiningVisitor(self, self))
+ assert_equals(self._start_suite_calls, 2)
+ assert_equals(self._start_test_calls, 2)
+ assert_equals(self._start_keyword_calls, 2)
+ assert_equals(self._start_message_calls, 2)
+ assert_equals(self._end_suite_calls, 2)
+ assert_equals(self._end_test_calls, 2)
+ assert_equals(self._end_keyword_calls, 2)
+ assert_equals(self._end_message_calls, 2)
+
+
+if __name__ == '__main__':
+ unittest.main()
==============================================================================
Revision: ce1f2ba89e0c
Author: Mikko Korpela <[email protected]>
Date: Sat Nov 12 04:55:26 2011
Log: Add visit_statistics
http://code.google.com/p/robotframework/source/detail?r=ce1f2ba89e0c
Modified:
/src/robot/result/combiningvisitor.py
=======================================
--- /src/robot/result/combiningvisitor.py Sat Nov 12 04:33:10 2011
+++ /src/robot/result/combiningvisitor.py Sat Nov 12 04:55:26 2011
@@ -27,8 +27,9 @@
for method_name in (pre+'_'+post
for pre in ('start', 'end') \
- for post in ('suite', 'test', 'keyword', 'message')):
+ for post in
('suite', 'test', 'keyword', 'message', 'errors')):
_create_method(method_name)
+_create_method('visit_statistics')
class RemovingVisitor(ResultVisitor):
==============================================================================
Revision: fc35b00f63b6
Author: Mikko Korpela <[email protected]>
Date: Sat Nov 12 04:59:53 2011
Log: Preparation for RemovingVisitor integration
http://code.google.com/p/robotframework/source/detail?r=fc35b00f63b6
Modified:
/src/robot/reporting/resultwriter.py
/src/robot/result/datamodel.py
/utest/result/test_jsoning.py
/utest/result/test_resultserializer.py
=======================================
--- /src/robot/reporting/resultwriter.py Wed Nov 9 06:57:03 2011
+++ /src/robot/reporting/resultwriter.py Sat Nov 12 04:59:53 2011
@@ -12,7 +12,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from robot.common import Statistics
from robot.errors import DataError
from robot.output import LOGGER
from robot.reporting.jsondatamodel import DataModelWriter
@@ -82,6 +81,7 @@
visitor = DatamodelVisitor(self._execution_result,
log_path=self.settings['Log'],
split_log=self.settings['SplitLog'])
+ self._execution_result.visit(visitor)
self._data_model = DataModelWriter(visitor.datamodel)
self.write_robot_results(None)
return self._execution_result
=======================================
--- /src/robot/result/datamodel.py Wed Nov 9 04:49:34 2011
+++ /src/robot/result/datamodel.py Sat Nov 12 04:59:53 2011
@@ -23,7 +23,6 @@
self._elements = []
self._context = Context(log_path=log_path, split_log=split_log)
self._elements.append(ExecutionResultHandler(self._context,
result))
- result.visit(self)
def _start(self, func):
next = func(self._elements[-1])
@@ -51,7 +50,7 @@
end_suite = end_keyword = end_test = end_errors = _end
- def visit_message(self, msg):
+ def end_message(self, msg):
self._elements[-1].message(msg)
@property
=======================================
--- /utest/result/test_jsoning.py Fri Nov 11 04:30:04 2011
+++ /utest/result/test_jsoning.py Sat Nov 12 04:59:53 2011
@@ -1,5 +1,6 @@
import unittest
from robot import utils
+from robot.result.combiningvisitor import RemovingVisitor, CombiningVisitor
from robot.result.executionresult import ExecutionResult
from robot.result.keyword import Keyword
from robot.model.message import Message
=======================================
--- /utest/result/test_resultserializer.py Tue Nov 8 03:38:18 2011
+++ /utest/result/test_resultserializer.py Sat Nov 12 04:59:53 2011
@@ -42,7 +42,9 @@
output_parser = OutputParser()
output_parser._parse_fileobj(StringIO(GOLDEN_XML))
self._expected = output_parser._get_data_model()._robot_data
- visitor = DatamodelVisitor(ResultFromXML(StringIO(GOLDEN_XML)))
+ result = ResultFromXML(StringIO(GOLDEN_XML))
+ visitor = DatamodelVisitor(result)
+ result.visit(visitor)
self._datamodel = visitor.datamodel
def test_datamodel_suite(self):