Revision: 52ae7d62eecc
Author:   Janne Härkönen <[email protected]>
Date:     Wed Jun 15 11:27:11 2011
Log:      resultwriter: extracted classes for output and xunit building
http://code.google.com/p/robotframework/source/detail?r=52ae7d62eecc

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

=======================================
--- /src/robot/result/resultwriter.py   Wed Jun 15 10:33:59 2011
+++ /src/robot/result/resultwriter.py   Wed Jun 15 11:27:11 2011
@@ -29,8 +29,7 @@
 class ResultWriter(object):

     def __init__(self, settings):
-        self._robot_test_output_cached = None
-        self._temp_file = None
+        self._xml_result = None
         self._suite = None
         self._settings = settings

@@ -40,36 +39,23 @@
         LogBuilder(data_model, self._settings).create()
         data_model.remove_keywords()
         ReportBuilder(data_model, self._settings).create()
-        self._make_xunit(data_source)
-
-    def _make_xunit(self, data_source):
-        xunit_path = self._settings['XUnitFile']
-        if xunit_path != 'NONE':
- self._robot_test_output([data_source]).serialize_xunit(xunit_path)
-
-    def _robot_test_output(self, data_sources):
-        if self._robot_test_output_cached is None:
- self._suite, exec_errors = process_outputs(data_sources, self._settings)
+        XUnitBuilder(self._result_from_xml([data_source]),
+                     self._settings).create()
+
+    def _result_from_xml(self, data_sources):
+        if not self._xml_result:
+ self._suite, errs = process_outputs(data_sources, self._settings)
             self._suite.set_options(self._settings)
- self._robot_test_output_cached = RobotTestOutput(self._suite, exec_errors, self._settings)
-        return self._robot_test_output_cached
+ self._xml_result = ResultFromXML(self._suite, errs, self._settings)
+        return self._xml_result

     def write_rebot_results(self, *data_sources):
-        combined = self._combine_outputs(data_sources)
-        self.write_robot_results(combined)
-        if self._temp_file:
-            os.remove(self._temp_file)
+        builder = OutputBuilder(self._result_from_xml(data_sources),
+                                self._settings)
+        self.write_robot_results(builder.create())
+        builder.finalize()
         return self._suite

-    def _combine_outputs(self, data_sources):
-        output_file = self._settings['Output']
-        if output_file == 'NONE':
- handle, output_file = tempfile.mkstemp(suffix='.xml', prefix='rebot-')
-            os.close(handle)
-            self._temp_file = output_file
- self._robot_test_output(data_sources).serialize_output(output_file, log=not self._temp_file)
-        return output_file
-

 class _Builder(object):

@@ -135,7 +121,37 @@
return {'pass': colors[0], 'nonCriticalFail': colors[1], 'fail': colors[2]}


-class RobotTestOutput:
+class OutputBuilder(_Builder):
+    _type = 'Output'
+    _temp_file = None
+
+    def create(self):
+        output_file = self._output_file()
+ self._data_model.serialize_output(output_file, log=not self._temp_file)
+        return output_file
+
+    def _output_file(self):
+        if self._path:
+            return self._path
+ handle, output_file = tempfile.mkstemp(suffix='.xml', prefix='rebot-')
+        os.close(handle)
+        self._temp_file = output_file
+        return output_file
+
+    def finalize(self):
+        if self._temp_file:
+            os.remove(self._temp_file)
+
+
+class XUnitBuilder(_Builder):
+    _type = 'XUnitFile'
+
+    def create(self):
+        if self._path:
+            self._data_model.serialize_xunit(self._path)
+
+
+class ResultFromXML(object):

     def __init__(self, suite, exec_errors, settings=None):
         self.suite = suite

Reply via email to