3 new revisions:

Revision: fbd03502ede6
Author:   Mikko Korpela <[email protected]>
Date:     Wed Nov 16 02:00:49 2011
Log:      cleanup
http://code.google.com/p/robotframework/source/detail?r=fbd03502ede6

Revision: 4d4137b88540
Author:   Mikko Korpela <[email protected]>
Date:     Wed Nov 16 02:03:43 2011
Log: JSONDataModel: No need to handle suite teardown failures anymore on th...
http://code.google.com/p/robotframework/source/detail?r=4d4137b88540

Revision: 4e70f3cb6a75
Author:   Mikko Korpela <[email protected]>
Date:     Wed Nov 16 02:04:47 2011
Log:      1) Renamed DatamodelVisitor -> JSModelCreator, 2) Little cleanup
http://code.google.com/p/robotframework/source/detail?r=4e70f3cb6a75

==============================================================================
Revision: fbd03502ede6
Author:   Mikko Korpela <[email protected]>
Date:     Wed Nov 16 02:00:49 2011
Log:      cleanup
http://code.google.com/p/robotframework/source/detail?r=fbd03502ede6

Modified:
 /src/robot/reporting/builders.py

=======================================
--- /src/robot/reporting/builders.py    Mon Nov 14 03:57:35 2011
+++ /src/robot/reporting/builders.py    Wed Nov 16 02:00:49 2011
@@ -43,6 +43,10 @@
         self._path = self._parse_file(self._type)

     def build(self):
+        if self._path:
+            self._build()
+
+    def _build(self):
         raise NotImplementedError(self.__class__.__name__)

     def _parse_file(self, name):
@@ -53,29 +57,26 @@
 class OutputBuilder(_Builder):
     _type = 'Output'

-    def build(self):
-        if self._path:
-            self._context.result_from_xml.serialize_output(self._path)
+    def _build(self):
+        self._context.result_from_xml.serialize_output(self._path)


 class XUnitBuilder(_Builder):
     _type = 'XUnitFile'

-    def build(self):
-        if self._path:
-            self._context.result_from_xml.serialize_xunit(self._path)
+    def _build(self):
+        self._context.result_from_xml.serialize_xunit(self._path)


 class _HTMLFileBuilder(_Builder):
     _type = NotImplemented
     _template = NotImplemented

-    def build(self):
-        if self._path:
-            self._context.data_model.set_settings(self._get_settings())
-            self._format_data()
-            if self._write_file():
-                LOGGER.output_file(self._type, self._path)
+    def _build(self):
+        self._context.data_model.set_settings(self._get_settings())
+        self._format_data()
+        if self._write_file():
+            LOGGER.output_file(self._type, self._path)

     def _url_from_path(self, source, destination):
         if not destination:

==============================================================================
Revision: 4d4137b88540
Author:   Mikko Korpela <[email protected]>
Date:     Wed Nov 16 02:03:43 2011
Log: JSONDataModel: No need to handle suite teardown failures anymore on this level. Also few other smaller cleanups.
http://code.google.com/p/robotframework/source/detail?r=4d4137b88540

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

=======================================
--- /src/robot/result/jsondatamodelhandlers.py  Wed Nov 16 00:29:29 2011
+++ /src/robot/result/jsondatamodelhandlers.py  Wed Nov 16 02:03:43 2011
@@ -64,6 +64,7 @@
     def _last_child_status(self):
         return self._data_from_children[-1][0]

+
 class ExecutionResultHandler(_Handler):

     def __init__(self, context, execution_result):
@@ -74,7 +75,7 @@
         self._current_children = self._stats
         return StatisticsHandler(self._stats, stats)

-    def end_element(self, text):
+    def end_element(self, _):
         return {'generator': self._generator,
                 'suite': self._data_from_children[0],
                 'stats': self._stats,
@@ -133,12 +134,11 @@
     def __init__(self, context, suite):
         _Handler.__init__(self, context)
         self._current_children = None
-        self._teardown_failed = False
         self._context.start_suite()
self._data_from_children.append(self._get_id(utils.html_format(suite.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()]:
+        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)

@@ -146,9 +146,6 @@
         return self._get_ids(suite.name, suite.source,
                              self._context.get_rel_log_path(suite.source))

-    def _set_teardown_failed(self):
-        self._teardown_failed = True
-
     def add_child_data(self, data):
         self._current_children.append(data)

@@ -162,16 +159,15 @@
         if suite.message != '':
             status.append(self._get_id(suite.message))
         self._data_from_children.append(status)
+        # TODO: 0 is Teardown failure. It should be removed from JS
return self._get_name_and_sources(suite) + self._data_from_children + \
-                 [self._suites, self._tests, self._keywords,
-                  int(self._teardown_failed), stats]
+                 [self._suites, self._tests, self._keywords, 0, stats]


 class TestHandler(_Handler):

     def __init__(self, context, test):
         _Handler.__init__(self, context)
-        self._keywords = []
         self._current_children = None
         self._context.start_test()
self._data_from_children.append(self._get_id(utils.html_format(test.doc)))
@@ -238,7 +234,6 @@


 class _StatusHandler(_Handler):
-
     _statuses = {'FAIL': 0, 'PASS': 1, 'NOT_RUN': 2}

     def __init__(self, context, item):

==============================================================================
Revision: 4e70f3cb6a75
Author:   Mikko Korpela <[email protected]>
Date:     Wed Nov 16 02:04:47 2011
Log:      1) Renamed DatamodelVisitor -> JSModelCreator, 2) Little cleanup
http://code.google.com/p/robotframework/source/detail?r=4e70f3cb6a75

Modified:
 /src/robot/reporting/resultwriter.py
 /src/robot/result/datamodel.py
 /utest/result/test_jsoning.py
 /utest/result/test_resultserializer.py
 /utest/webcontent/spec/data/create_jsdata_for_specs.py

=======================================
--- /src/robot/reporting/resultwriter.py        Wed Nov 16 00:35:41 2011
+++ /src/robot/reporting/resultwriter.py        Wed Nov 16 02:04:47 2011
@@ -17,7 +17,7 @@
 from robot.reporting.jsondatamodel import DataModelWriter
 from robot.result.builders import ResultFromXML as RFX
from robot.result.combiningvisitor import CombiningVisitor, KeywordRemovingVisitor
-from robot.result.datamodel import DatamodelVisitor
+from robot.result.datamodel import JSModelCreator
 from robot.result.serializer import RebotXMLWriter
 from robot import utils

@@ -37,12 +37,17 @@
     @property
     def result_from_xml(self):
         if self._xml_result is None:
+            #TODO: RFX and ResultFromXML name conflict
             execution_result = RFX(*self._data_sources)
execution_result.configure(status_rc=not self.settings['NoStatusRC'],
                                        **self._create_opts())
self._xml_result = ResultFromXML(execution_result, self.settings)
         return self._xml_result

+    @property
+    def result(self):
+        return self._xml_result.result
+
     def _create_opts(self):
         opts = {}
         for opt_name, settings_name in [
@@ -88,15 +93,11 @@
     @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)
+            creator = JSModelCreator(self.result_from_xml.result,
+                                     log_path=self.settings['Log'],
+                                     split_log=self.settings['SplitLog'])
+ self.result.visit(CombiningVisitor(creator, KeywordRemovingVisitor())) + self._data_model = DataModelWriter(creator.datamodel, creator.split_results)
         return self._data_model


=======================================
--- /src/robot/result/datamodel.py      Tue Nov 15 06:20:39 2011
+++ /src/robot/result/datamodel.py      Wed Nov 16 02:04:47 2011
@@ -13,50 +13,51 @@
 #  limitations under the License.

 from robot.reporting.parsingcontext import Context
-from robot.result.jsondatamodelhandlers import ExecutionResultHandler
-
-from robot.result.visitor import ResultVisitor
-
-class DatamodelVisitor(ResultVisitor):
+from .jsondatamodelhandlers import ExecutionResultHandler
+from .visitor import ResultVisitor
+
+
+class JSModelCreator(ResultVisitor):

     def __init__(self, result, log_path='NONE', split_log=False):
-        self._elements = []
         self._context = Context(log_path=log_path, split_log=split_log)
- self._elements.append(ExecutionResultHandler(self._context, result))
+        self._elements = [ExecutionResultHandler(self._context, result)]
+
+    @property
+    def datamodel(self):
+        #TODO: End element should not require argument in this case
+        return self._top.end_element(None)
+
+    @property
+    def _top(self):
+        return self._elements[-1]

     @property
     def split_results(self):
         return self._context.split_results

-    def _start(self, func):
-        next = func(self._elements[-1])
-        self._elements.append(next)
-
     def start_suite(self, suite):
-        self._start(lambda p: p.start_suite(suite))
+        self._elements.append(self._top.start_suite(suite))

     def start_keyword(self, keyword):
-        self._start(lambda p: p.start_keyword(keyword))
+        self._elements.append(self._top.start_keyword(keyword))

     def start_test(self, test):
-        self._start(lambda p: p.start_test(test))
+        self._elements.append(self._top.start_test(test))

     def start_errors(self, errors):
-        self._start(lambda p: p.start_errors(errors))
+        self._elements.append(self._top.start_errors(errors))

     def visit_statistics(self, stats):
-        self._start(lambda p: p.visit_statistics(stats))
+        self._elements.append(self._top.visit_statistics(stats))
         self._end(stats)

+    #TODO: end_elements should also work in similar as starts
     def _end(self, item):
-        item_datamodel = self._elements.pop().end_element(item)
-        self._elements[-1].add_child_data(item_datamodel)
+        submodel = self._elements.pop().end_element(item)
+        self._top.add_child_data(submodel)

     end_suite = end_keyword = end_test = end_errors = _end

     def end_message(self, msg):
-        self._elements[-1].message(msg)
-
-    @property
-    def datamodel(self):
-        return self._elements[-1].end_element('')
+        self._top.message(msg)
=======================================
--- /utest/result/test_jsoning.py       Tue Nov 15 06:40:46 2011
+++ /utest/result/test_jsoning.py       Wed Nov 16 02:04:47 2011
@@ -5,14 +5,14 @@
 from robot.model.message import Message
 from robot.output.loggerhelper import LEVELS
 from robot.reporting.parsingcontext import Context
-from robot.result.datamodel import DatamodelVisitor
+from robot.result.datamodel import JSModelCreator
from robot.result.jsondatamodelhandlers import _Handler, KeywordHandler, _StatusHandler
 from robot.result.testcase import TestCase
 from robot.result.testsuite import TestSuite
 from robot.utils.asserts import assert_equals


-class _PartialDatamodelVisitor(DatamodelVisitor):
+class _PartialJSModelCreator(JSModelCreator):

     def __init__(self):
         self._elements = []
@@ -23,7 +23,7 @@
 class TestJsoning(unittest.TestCase):

     def setUp(self):
-        self._visitor = _PartialDatamodelVisitor()
+        self._visitor = _PartialJSModelCreator()
         self._context = self._visitor._context

     @property
@@ -205,7 +205,7 @@
         result.generator = 'unit test'
result.suite.suites.create(name='Urho').tests.create(status='FAIL', name='moi', tags=['tagi']).keywords.create(name='FAILING', status='FAIL').messages.create(message='FAIL', level='WARN', timestamp='20110101 01:01:01.111') result.errors.messages.create(message='FAIL', level='WARN', timestamp='20110101 01:01:01.111', linkable=True)
-        self._visitor = DatamodelVisitor(result)
+        self._visitor = JSModelCreator(result)
         self._context = self._visitor._context
         result.visit(self._visitor)
self._verify_message(self.datamodel['errors'][0], result.errors.messages[0])
=======================================
--- /utest/result/test_resultserializer.py      Tue Nov 15 06:41:37 2011
+++ /utest/result/test_resultserializer.py      Wed Nov 16 02:04:47 2011
@@ -7,7 +7,7 @@
 from robot.result.builders import ResultFromXML
from robot.result.combiningvisitor import KeywordRemovingVisitor, CombiningVisitor
 from robot.result.serializer import RebotXMLWriter
-from robot.result.datamodel import DatamodelVisitor
+from robot.result.datamodel import JSModelCreator
 from robot.utils.asserts import assert_equals

 from test_resultbuilder import GOLDEN_XML, GOLDEN_XML_TWICE
@@ -43,7 +43,7 @@
         output_parser._parse_fileobj(StringIO(GOLDEN_XML))
         self._expected = output_parser._get_data_model()._robot_data
         result = ResultFromXML(StringIO(GOLDEN_XML))
-        visitor = DatamodelVisitor(result)
+        visitor = JSModelCreator(result)
         result.visit(CombiningVisitor(visitor,
                                       KeywordRemovingVisitor()))
         self._datamodel = visitor.datamodel
=======================================
--- /utest/webcontent/spec/data/create_jsdata_for_specs.py Wed Nov 9 04:59:48 2011 +++ /utest/webcontent/spec/data/create_jsdata_for_specs.py Wed Nov 16 02:04:47 2011
@@ -4,7 +4,7 @@
 from os.path import join, dirname, abspath
 import sys
 import os
-from robot.result.datamodel import DatamodelVisitor
+from robot.result.datamodel import JSModelCreator


 BASEDIR = dirname(abspath(__file__))
@@ -29,7 +29,7 @@

 def create_jsdata(outxml, target, split_log):
     result = robot.result.builders.ResultFromXML(outxml)
-    visitor = DatamodelVisitor(result, split_log=split_log)
+    visitor = JSModelCreator(result, split_log=split_log)
model = DataModelWriter(visitor.datamodel, visitor._context.split_results)
     model.set_settings({'logURL': 'log.html',
                         'reportURL': 'report.html',

Reply via email to