4 new revisions:

Revision: 80fbfb9076e4
Author:   Mikko Korpela <[email protected]>
Date:     Tue Nov 15 05:13:03 2011
Log: Separate reporting tests for robot and rebot result generation as we c...
http://code.google.com/p/robotframework/source/detail?r=80fbfb9076e4

Revision: 8010ff0d7eb4
Author:   Mikko Korpela <[email protected]>
Date:     Tue Nov 15 05:13:11 2011
Log:      Automated merge with https://code.google.com/p/robotframework/
http://code.google.com/p/robotframework/source/detail?r=8010ff0d7eb4

Revision: 1da4f5985b2a
Author:   Mikko Korpela <[email protected]>
Date:     Tue Nov 15 05:43:49 2011
Log:      Add missing reporting test about output writing
http://code.google.com/p/robotframework/source/detail?r=1da4f5985b2a

Revision: 8fed6593cf4f
Author:   Mikko Korpela <[email protected]>
Date:     Tue Nov 15 06:18:24 2011
Log:      merge
http://code.google.com/p/robotframework/source/detail?r=8fed6593cf4f

==============================================================================
Revision: 80fbfb9076e4
Author:   Mikko Korpela <[email protected]>
Date:     Tue Nov 15 05:13:03 2011
Log: Separate reporting tests for robot and rebot result generation as we currently have two different implementations
http://code.google.com/p/robotframework/source/detail?r=80fbfb9076e4

Modified:
 /src/robot/__init__.py
 /src/robot/reporting/__init__.py
 /src/robot/reporting/resultwriter.py
 /src/robot/result/datamodel.py
 /src/robot/result/jsondatamodelhandlers.py
 /utest/reporting/test_reporting.py

=======================================
--- /src/robot/__init__.py      Fri Nov 11 02:21:37 2011
+++ /src/robot/__init__.py      Tue Nov 15 05:13:03 2011
@@ -15,6 +15,7 @@
 import sys
 import os

+
 if __name__ == '__main__':
     sys.stderr.write("Use 'runner' or 'rebot' for executing.\n")
     sys.exit(252)  # 252 == DATA_ERROR
@@ -45,7 +46,7 @@
 from output import Output, LOGGER, pyloggingconf
 from conf import RobotSettings, RebotSettings
 from running import TestSuite, STOP_SIGNAL_MONITOR
-from robot.reporting import ResultWriter
+from robot.reporting import ResultWriter, RebotResultWriter
 from errors import (DataError, Information, INFO_PRINTED, DATA_ERROR,
                     STOPPED_BY_USER, FRAMEWORK_ERROR)
 from variables import init_global_variables
@@ -152,7 +153,7 @@
     settings = RebotSettings(options)
     LOGGER.register_console_logger(colors=settings['MonitorColors'])
     LOGGER.disable_message_cache()
-    result = ResultWriter(settings).write_rebot_results(*datasources)
+    result = RebotResultWriter(settings).write_rebot_results(*datasources)
     LOGGER.close()
     return result.suite, result.return_code

=======================================
--- /src/robot/reporting/__init__.py    Mon Oct 24 03:12:31 2011
+++ /src/robot/reporting/__init__.py    Tue Nov 15 05:13:03 2011
@@ -13,4 +13,4 @@
 #  limitations under the License.


-from resultwriter import ResultWriter
+from resultwriter import ResultWriter, RebotResultWriter
=======================================
--- /src/robot/reporting/resultwriter.py        Mon Nov 14 03:52:30 2011
+++ /src/robot/reporting/resultwriter.py        Tue Nov 15 05:13:03 2011
@@ -63,7 +63,6 @@
             ('endtime', 'EndTime')
             ]:
             opts[opt_name] = self.settings[settings_name]
-
         opts['metadata'] = dict(opts['metadata'])
         return opts

@@ -74,25 +73,30 @@
         ReportBuilder(self).build()
         XUnitBuilder(self).build()

+
+class RebotResultWriter(ResultWriter):
+
     def write_rebot_results(self, *data_sources):
         self._data_sources = data_sources
         OutputBuilder(self).build()
         XUnitBuilder(self).build()
-        self._create_reporting_datamodel()
         LogBuilder(self).build()
         ReportBuilder(self).build()
         return self._execution_result

-    def _create_reporting_datamodel(self):
-        visitor = DatamodelVisitor(self.result_from_xml.result,
-                                   log_path=self.settings['Log'],
-                                   split_log=self.settings['SplitLog'])
- # Remove keywords while visiting as JSON datamodel visitor is the last
-        # thing that needs keywords from the model
-        # this saves memory -- possibly a lot.
-        self.result_from_xml.result.visit(CombiningVisitor(visitor,
-                                          KeywordRemovingVisitor()))
-        self._data_model = DataModelWriter(visitor.datamodel)
+    @property
+    def data_model(self):
+        if self._data_model is None:
+            visitor = DatamodelVisitor(self.result_from_xml.result,
+                                       log_path=self.settings['Log'],
+                                       split_log=self.settings['SplitLog'])
+ # Remove keywords while visiting as JSON datamodel visitor is the last
+            # thing that needs keywords from the model
+            # this saves memory -- possibly a lot.
+            self.result_from_xml.result.visit(CombiningVisitor(visitor,
+                                              KeywordRemovingVisitor()))
+ self._data_model = DataModelWriter(visitor.datamodel, visitor.split_results)
+        return self._data_model


 class ResultFromXML(object):
=======================================
--- /src/robot/result/datamodel.py      Sat Nov 12 04:59:53 2011
+++ /src/robot/result/datamodel.py      Tue Nov 15 05:13:03 2011
@@ -24,6 +24,10 @@
         self._context = Context(log_path=log_path, split_log=split_log)
self._elements.append(ExecutionResultHandler(self._context, result))

+    @property
+    def split_results(self):
+        return self._context.split_results
+
     def _start(self, func):
         next = func(self._elements[-1])
         self._elements.append(next)
=======================================
--- /src/robot/result/jsondatamodelhandlers.py  Mon Nov 14 03:46:38 2011
+++ /src/robot/result/jsondatamodelhandlers.py  Tue Nov 15 05:13:03 2011
@@ -144,6 +144,7 @@
         self._doc = self._get_id(utils.html_format(suite.doc))
         self._data_from_children.append(self._doc)
         self._metadata = []
+        self._in_setup_or_teardown = False
for i in [self._get_ids(key, utils.html_format(value)) for key, value in suite.metadata.items()]:
             self._metadata.extend(i)
         self._data_from_children.append(self._metadata)
@@ -158,6 +159,10 @@
     def add_child_data(self, data):
         self._current_children.append(data)

+    def start_keyword(self, keyword):
+        self._current_children = self._keywords
+        return SuiteSetupAndTeardownHandler(self._context, keyword)
+
     def end_element(self, suite):
         stats = self._context.end_suite()
         status = _StatusHandler(self._context, suite).end_element('')
@@ -234,6 +239,16 @@
         return self._keywords


+class SuiteSetupAndTeardownHandler(KeywordHandler):
+
+    def _start(self):
+        self._context.start_suite_setup_or_teardown()
+
+    def _get_keywords(self):
+        self._context.end_suite_setup_or_teardown(self._keywords)
+        return self._keywords
+
+
 class _StatusHandler(_Handler):

     _statuses = {'FAIL': 0, 'PASS': 1, 'NOT_RUN': 2}
=======================================
--- /utest/reporting/test_reporting.py  Mon Nov 14 03:46:38 2011
+++ /utest/reporting/test_reporting.py  Tue Nov 15 05:13:03 2011
@@ -1,10 +1,10 @@
 import unittest

-from robot.reporting import ResultWriter
 from robot.reporting.outputparser import OutputParser
from robot.reporting.builders import LogBuilder, ReportBuilder, XUnitBuilder

 import resources
+from robot.reporting.resultwriter import RebotResultWriter, ResultWriter


 def set_write_log_mock():
@@ -45,7 +45,7 @@
     return generated


-class TestReporting(unittest.TestCase):
+class _TestReporting(object):

     def setUp(self):
         self._settings = {
@@ -80,7 +80,6 @@
             'LogLevel': 'INFO',
             'RemoveKeywords': None
         }
-        self._reporter = ResultWriter(self._settings)
         self._log_results = set_write_log_mock()
         self._report_results = set_write_report_mock()
         self._xunit_results = set_write_xunit_mock()
@@ -93,7 +92,6 @@
         self._reporter.write_robot_results(resources.GOLDEN_OUTPUT)
         self._assert_expected_log('log.html')
         self._assert_expected_report('report.html')
-        self._assert_data_model_generated_once()

     def test_no_generation(self):
         self._reporter.write_robot_results(resources.GOLDEN_OUTPUT)
@@ -120,17 +118,10 @@
         self._assert_no_report()
         self._assert_expected_xunit('xunitfile-only.xml')

-    def test_multiple_outputs(self):
-        self._settings['Log'] = 'log.html'
-        self._settings['Report'] = 'report.html'
- self._reporter.write_rebot_results(*[resources.GOLDEN_OUTPUT, resources.GOLDEN_OUTPUT2])
-        self._assert_expected_log('log.html')
-        self._assert_expected_report('report.html')
-
     def test_split_tests(self):
         self._settings['SplitLog'] = True
         self._settings['Log'] = '/tmp/foo/log.bar.html'
-        self._reporter.write_robot_results(resources.GOLDEN_OUTPUT)
+        self._write_results(resources.GOLDEN_OUTPUT)
         expected = ('/tmp/foo/log.bar-%d.js' % i for i in range(1, 5))
         self._assert_expected_split_tests(*expected)

@@ -159,5 +150,32 @@
         self.assertEquals(len(self._datamodel_generations), 1)


+class TestRebotReporting(_TestReporting, unittest.TestCase):
+
+    def setUp(self):
+        _TestReporting.setUp(self)
+        self._reporter = RebotResultWriter(self._settings)
+
+    def _write_results(self, *sources):
+        self._reporter.write_rebot_results(*sources)
+
+    def test_multiple_outputs(self):
+        self._settings['Log'] = 'log.html'
+        self._settings['Report'] = 'report.html'
+ self._write_results(resources.GOLDEN_OUTPUT, resources.GOLDEN_OUTPUT2)
+        self._assert_expected_log('log.html')
+        self._assert_expected_report('report.html')
+
+
+class TestRobotReporting(_TestReporting, unittest.TestCase):
+
+    def setUp(self):
+        _TestReporting.setUp(self)
+        self._reporter = ResultWriter(self._settings)
+
+    def _write_results(self, source):
+        self._reporter.write_robot_results(source)
+
+
 if __name__ == '__main__':
     unittest.main()

==============================================================================
Revision: 8010ff0d7eb4
Author:   Mikko Korpela <[email protected]>
Date:     Tue Nov 15 05:13:11 2011
Log:      Automated merge with https://code.google.com/p/robotframework/
http://code.google.com/p/robotframework/source/detail?r=8010ff0d7eb4

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

=======================================
--- /src/robot/result/jsondatamodelhandlers.py  Mon Nov 14 15:56:32 2011
+++ /src/robot/result/jsondatamodelhandlers.py  Tue Nov 15 05:13:11 2011
@@ -144,6 +144,7 @@
         self._doc = self._get_id(utils.html_format(suite.doc))
         self._data_from_children.append(self._doc)
         self._metadata = []
+        self._in_setup_or_teardown = False
for i in [self._get_ids(key, utils.html_format(value)) for key, value in suite.metadata.items()]:
             self._metadata.extend(i)
         self._data_from_children.append(self._metadata)
@@ -158,6 +159,10 @@
     def add_child_data(self, data):
         self._current_children.append(data)

+    def start_keyword(self, keyword):
+        self._current_children = self._keywords
+        return SuiteSetupAndTeardownHandler(self._context, keyword)
+
     def end_element(self, suite):
         stats = self._context.end_suite()
         status = _StatusHandler(self._context, suite).end_element('')
@@ -234,6 +239,16 @@
         return self._keywords


+class SuiteSetupAndTeardownHandler(KeywordHandler):
+
+    def _start(self):
+        self._context.start_suite_setup_or_teardown()
+
+    def _get_keywords(self):
+        self._context.end_suite_setup_or_teardown(self._keywords)
+        return self._keywords
+
+
 class _StatusHandler(_Handler):

     _statuses = {'FAIL': 0, 'PASS': 1, 'NOT_RUN': 2}

==============================================================================
Revision: 1da4f5985b2a
Author:   Mikko Korpela <[email protected]>
Date:     Tue Nov 15 05:43:49 2011
Log:      Add missing reporting test about output writing
http://code.google.com/p/robotframework/source/detail?r=1da4f5985b2a

Modified:
 /utest/reporting/test_reporting.py

=======================================
--- /utest/reporting/test_reporting.py  Tue Nov 15 05:13:03 2011
+++ /utest/reporting/test_reporting.py  Tue Nov 15 05:43:49 2011
@@ -1,7 +1,7 @@
 import unittest

 from robot.reporting.outputparser import OutputParser
-from robot.reporting.builders import LogBuilder, ReportBuilder, XUnitBuilder +from robot.reporting.builders import LogBuilder, ReportBuilder, XUnitBuilder, OutputBuilder

 import resources
 from robot.reporting.resultwriter import RebotResultWriter, ResultWriter
@@ -28,6 +28,13 @@
     XUnitBuilder.build = build_xunit
     return results

+def set_write_output_mock():
+    results = {'output_path': None}
+    def build_output(self):
+        results['output_path'] = self._path
+    OutputBuilder.build = build_output
+    return results
+
 def set_write_split_test_mock():
     results = []
     def _write_test(self, index, keywords, strings, name):
@@ -154,6 +161,7 @@

     def setUp(self):
         _TestReporting.setUp(self)
+        self._output_results = set_write_output_mock()
         self._reporter = RebotResultWriter(self._settings)

     def _write_results(self, *sources):
@@ -166,6 +174,14 @@
         self._assert_expected_log('log.html')
         self._assert_expected_report('report.html')

+    def test_output_generation(self):
+        self._settings['Output'] = 'ouz.xml'
+ self._write_results(resources.GOLDEN_OUTPUT, resources.GOLDEN_OUTPUT2)
+        self._assert_expected_output('ouz.xml')
+
+    def _assert_expected_output(self, expected_file_name):
+ self.assertEquals(self._output_results['output_path'], expected_file_name)
+

 class TestRobotReporting(_TestReporting, unittest.TestCase):


==============================================================================
Revision: 8fed6593cf4f
Author:   Mikko Korpela <[email protected]>
Date:     Tue Nov 15 06:18:24 2011
Log:      merge
http://code.google.com/p/robotframework/source/detail?r=8fed6593cf4f


Reply via email to