5 new revisions:

Revision: 1c7523c7ada4
Author:   Pekka Klärck
Date:     Tue Nov 29 14:03:34 2011
Log: log.html and report.html: reordered content coming from external files...
http://code.google.com/p/robotframework/source/detail?r=1c7523c7ada4

Revision: c0b642035247
Author:   Pekka Klärck
Date:     Tue Nov 29 14:07:11 2011
Log:      todo
http://code.google.com/p/robotframework/source/detail?r=c0b642035247

Revision: c88bf95c9986
Author:   Pekka Klärck
Date:     Tue Nov 29 14:39:51 2011
Log:      todos
http://code.google.com/p/robotframework/source/detail?r=c88bf95c9986

Revision: 683bcfc42287
Author:   Pekka Klärck
Date:     Wed Nov 30 03:11:56 2011
Log: fixed writing stats to log/report. tests are missing but in progress.
http://code.google.com/p/robotframework/source/detail?r=683bcfc42287

Revision: 5cabdc1a5be3
Author:   Pekka Klärck
Date:     Wed Nov 30 03:12:50 2011
Log:      Automated merge with https://code.google.com/p/robotframework/
http://code.google.com/p/robotframework/source/detail?r=5cabdc1a5be3

==============================================================================
Revision: 1c7523c7ada4
Author:   Pekka Klärck
Date:     Tue Nov 29 14:03:34 2011
Log: log.html and report.html: reordered content coming from external files to ease reading generared files
http://code.google.com/p/robotframework/source/detail?r=1c7523c7ada4

Modified:
 /src/robot/webcontent/log.html
 /src/robot/webcontent/report.html

=======================================
--- /src/robot/webcontent/log.html      Sun Nov 20 14:03:25 2011
+++ /src/robot/webcontent/log.html      Tue Nov 29 14:03:34 2011
@@ -6,20 +6,20 @@
 <meta http-equiv="Expires" content="-1">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="Generator" content="[Robot Framework template]">
+<link rel="icon" type="image/x-icon" href="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAEAAAAAAAAAAAAAAAJEBoACtnfgA5cYYAERsiAEx2lAAbKkQAcazBACZCVwAcM1cAK0ucAAMDBQAnQncASG+FABkoVQAyWmgA6f8SgvH/Ij99+GLyIinyJfn/Yi//KSLzUy9iZogpIld3/4JVVTkid7vyUjNVNVJEAGOZ6Z7pXwAABpmZkRiLAAAGiJZpmGAAAEEt3SXdxAAATC7o/u3EAAC8MRZpjasAAAY1VVVTYAAABKqqqqpAAAAADKqq4AAAAAAAv4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMADAADgAwAA4AcAAOAHAADgBwAAwAcAAOAHAADgDwAA8A8AAPg/AAD+fwAA">
 <link rel="stylesheet" type="text/css" href="log.css" media="all">
 <link rel="stylesheet" type="text/css" href="common.css" media="all">
 <link rel="stylesheet" type="text/css" href="print.css" media="print">
-<link rel="icon" type="image/x-icon" href="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAEAAAAAAAAAAAAAAAJEBoACtnfgA5cYYAERsiAEx2lAAbKkQAcazBACZCVwAcM1cAK0ucAAMDBQAnQncASG+FABkoVQAyWmgA6f8SgvH/Ij99+GLyIinyJfn/Yi//KSLzUy9iZogpIld3/4JVVTkid7vyUjNVNVJEAGOZ6Z7pXwAABpmZkRiLAAAGiJZpmGAAAEEt3SXdxAAATC7o/u3EAAC8MRZpjasAAAY1VVVTYAAABKqqqqpAAAAADKqq4AAAAAAAv4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMADAADgAwAA4AcAAOAHAADgBwAAwAcAAOAHAADgDwAA8A8AAPg/AAD+fwAA">
 <script type="text/javascript" src="log.js"></script>
 <script type="text/javascript" src="lib/jquery.min.js"></script>
 <script type="text/javascript" src="lib/jquery.tmpl.min.js"></script>
-<!-- OUTPUT JS --><script type="text/javascript" src="testdata/data.js"></script>
 <script type="text/javascript" src="lib/jsxcompressor.js"></script>
 <script type="text/javascript" src="fileloading.js"></script>
 <script type="text/javascript" src="model.js"></script>
 <script type="text/javascript" src="util.js"></script>
 <script type="text/javascript" src="testdata.js"></script>
 <script type="text/javascript" src="view.js"></script>
+<!-- OUTPUT JS --><script type="text/javascript" src="testdata/data.js"></script>
 <title></title>
 </head>
 <body>
=======================================
--- /src/robot/webcontent/report.html   Sun Nov 20 14:03:25 2011
+++ /src/robot/webcontent/report.html   Tue Nov 29 14:03:34 2011
@@ -6,20 +6,20 @@
 <meta http-equiv="Expires" content="-1">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="Generator" content="[Robot Framework template]">
+<link rel="icon" type="image/x-icon" href="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAEAAAAAAAAAAAAAAAJEBoACtnfgA5cYYAERsiAEx2lAAbKkQAcazBACZCVwAcM1cAK0ucAAMDBQAnQncASG+FABkoVQAyWmgA6f8SgvH/Ij99+GLyIinyJfn/Yi//KSLzUy9iZogpIld3/4JVVTkid7vyUjNVNVJEAGOZ6Z7pXwAABpmZkRiLAAAGiJZpmGAAAEEt3SXdxAAATC7o/u3EAAC8MRZpjasAAAY1VVVTYAAABKqqqqpAAAAADKqq4AAAAAAAv4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMADAADgAwAA4AcAAOAHAADgBwAAwAcAAOAHAADgDwAA8A8AAPg/AAD+fwAA">
 <link rel="stylesheet" type="text/css" href="common.css" media="all">
 <link rel="stylesheet" type="text/css" href="report.css" media="all">
 <link rel="stylesheet" type="text/css" href="print.css" media="print">
-<link rel="icon" type="image/x-icon" href="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAEAAAAAAAAAAAAAAAJEBoACtnfgA5cYYAERsiAEx2lAAbKkQAcazBACZCVwAcM1cAK0ucAAMDBQAnQncASG+FABkoVQAyWmgA6f8SgvH/Ij99+GLyIinyJfn/Yi//KSLzUy9iZogpIld3/4JVVTkid7vyUjNVNVJEAGOZ6Z7pXwAABpmZkRiLAAAGiJZpmGAAAEEt3SXdxAAATC7o/u3EAAC8MRZpjasAAAY1VVVTYAAABKqqqqpAAAAADKqq4AAAAAAAv4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMADAADgAwAA4AcAAOAHAADgBwAAwAcAAOAHAADgDwAA8A8AAPg/AAD+fwAA">
 <script type="text/javascript" src="lib/jquery.min.js"></script>
 <script type="text/javascript" src="lib/jquery.tmpl.min.js"></script>
<script type="text/javascript" src="lib/jquery.tablesorter.min.js"></script> -<!-- OUTPUT JS --><script type="text/javascript" src="testdata/data.js"></script>
 <script type="text/javascript" src="lib/jsxcompressor.js"></script>
 <script type="text/javascript" src="fileloading.js"></script>
 <script type="text/javascript" src="model.js"></script>
 <script type="text/javascript" src="util.js"></script>
 <script type="text/javascript" src="testdata.js"></script>
 <script type="text/javascript" src="view.js"></script>
+<!-- OUTPUT JS --><script type="text/javascript" src="testdata/data.js"></script>
 <title></title>
 </head>
 <body>

==============================================================================
Revision: c0b642035247
Author:   Pekka Klärck
Date:     Tue Nov 29 14:07:11 2011
Log:      todo
http://code.google.com/p/robotframework/source/detail?r=c0b642035247

Modified:
 /src/robot/writer/htmltemplate.py

=======================================
--- /src/robot/writer/htmltemplate.py   Fri Oct 21 03:56:57 2011
+++ /src/robot/writer/htmltemplate.py   Tue Nov 29 14:07:11 2011
@@ -12,6 +12,7 @@
 #  See the License for the specific language governing permissions and
 #  limitations under the License.

+# TODO: Generator below isn't correct when this is used outside RIDE.

 TEMPLATE = """
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

==============================================================================
Revision: c88bf95c9986
Author:   Pekka Klärck
Date:     Tue Nov 29 14:39:51 2011
Log:      todos
http://code.google.com/p/robotframework/source/detail?r=c88bf95c9986

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

=======================================
--- /src/robot/result/combiningvisitor.py       Wed Nov 16 01:00:34 2011
+++ /src/robot/result/combiningvisitor.py       Tue Nov 29 14:39:51 2011
@@ -11,8 +11,15 @@
 #  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

+# TODO:
+# 1) Why is visit_statistics handled specially?
+# 2) Why aren't visit_xxx generally handled?
+# 3) CombiningVisitor should probably be moved to robot.result.visitor
+# 4) KeywordRemovingVisitor should be moved somewhere else
+
 class CombiningVisitor(ResultVisitor):

     def __init__(self, *visitors):

==============================================================================
Revision: 683bcfc42287
Author:   Pekka Klärck
Date:     Wed Nov 30 03:11:56 2011
Log: fixed writing stats to log/report. tests are missing but in progress.
http://code.google.com/p/robotframework/source/detail?r=683bcfc42287

Modified:
 /src/robot/conf/settings.py
 /src/robot/model/stats.py
 /src/robot/reporting/resultwriter.py
 /src/robot/result/jsondatamodelhandlers.py

=======================================
--- /src/robot/conf/settings.py Mon Nov 28 04:16:17 2011
+++ /src/robot/conf/settings.py Wed Nov 30 03:11:56 2011
@@ -301,3 +301,9 @@
                  ('endtime', 'EndTime')])
         opts['metadata'] = dict(opts['metadata'])
         return opts
+
+    def statistics_configuration(self):
+        return (self['SuiteStatLevel'], self['TagStatInclude'],
+                self['TagStatExclude'], self['TagStatCombine'],
+                self['TagDoc'], self['TagStatLink'])
+
=======================================
--- /src/robot/model/stats.py   Fri Nov 18 13:37:31 2011
+++ /src/robot/model/stats.py   Wed Nov 30 03:11:56 2011
@@ -22,12 +22,20 @@
         self.passed = 0
         self.failed = 0

+    # TODO: Combine attrs and js_attrs propertys into get_attrs method
+
     @property
     def attrs(self):
         attrs = {'pass': str(self.passed), 'fail': str(self.failed)}
         attrs.update(self._get_custom_attrs())
         return attrs

+    @property
+    def js_attrs(self):
+ attrs = {'label': self.name, 'pass': self.passed, 'fail': self.failed}
+        attrs.update(self._get_custom_attrs())
+        return attrs
+
     def _get_custom_attrs(self):
         return {}

=======================================
--- /src/robot/reporting/resultwriter.py        Tue Nov 29 01:04:30 2011
+++ /src/robot/reporting/resultwriter.py        Wed Nov 30 03:11:56 2011
@@ -48,9 +48,11 @@
         if self._xml_result is None:
             #TODO: RFX and ResultFromXML name conflict
             execution_result = RFX(*self._data_sources)
+ # TODO: configure and configure_statistics really should be combined somehow + execution_result.configure_statistics(*self.settings.statistics_configuration()) execution_result.configure(status_rc=not self.settings['NoStatusRC'], **self.settings.result_configuration()) - self._xml_result = ResultFromXML(execution_result, self.settings)
+            self._xml_result = ResultFromXML(execution_result)
         return self._xml_result

     @property
@@ -80,22 +82,14 @@

 class ResultFromXML(object):

-    def __init__(self, execution_result, settings=None):
+    def __init__(self, execution_result):
         self.result = execution_result
-        self._settings = settings
         self._generator = 'Robot'

     def serialize_output(self, path, log=True):
+        # TODO: Can `log` be False??
         if path == 'NONE':
             return
-        if self._settings:
-            settings = self._settings
- params = (settings['SuiteStatLevel'], settings['TagStatInclude'], - settings['TagStatExclude'], settings['TagStatCombine'],
-                      settings['TagDoc'], settings['TagStatLink'])
-        else:
-            params = ()
-        self.result.configure_statistics(*params)
         serializer = RebotXMLWriter(path)
         self.result.visit(serializer)
         if log:
=======================================
--- /src/robot/result/jsondatamodelhandlers.py  Tue Nov 29 01:53:28 2011
+++ /src/robot/result/jsondatamodelhandlers.py  Wed Nov 30 03:11:56 2011
@@ -14,7 +14,6 @@

 from robot import utils
 from robot.output import LEVELS
-from robot.result.visitor import ResultVisitor


 class _Handler(object):
@@ -98,49 +97,16 @@
         return self._messages


-class SuiteStatVisitor(ResultVisitor):
-
-    def __init__(self, collection):
-        self.collection = collection
-
-    def visit_stat(self, stats):
-        stat = self._create_stat(stats)
-        stat['id'] = stats.attrs['idx']
-        stat['name'] = stats.attrs['name']
-        self.collection += [stat]
-
-    def _create_stat(self, stat_elem):
-        return {'pass':stat_elem.passed,
-                'fail':stat_elem.failed,
-                'label':stat_elem.name}
-
-
+    # TODO: This should also be Handler
 class StatisticsHandler(object):

-    def __init__(self, stats_list, stats):
-        self._result = stats_list
-        self._result.append(self._parse_totals(stats.total))
-        self._result.append(self._parse_tag(stats.tags))
-        self._result.append(self._parse_suite(stats.suite))
-
-    def _parse_totals(self, total):
- return [self._create_stat(total.critical), self._create_stat(total.all)]
-
-    def _parse_tag(self, tags):
-        return [self._create_stat(tag) for tag in tags]
-
-    def _parse_suite(self, suite):
-        stats = []
-        suite.visit(SuiteStatVisitor(stats))
-        return stats
-
-    def _create_stat(self, stat_elem):
-        return {'pass':stat_elem.passed,
-                'fail':stat_elem.failed,
-                'label':stat_elem.name}
-
-    def end_element(self, _):
-        return self._result
+    def __init__(self, result, stats):
+        result.append(self._get_stats(stats.total))
+        result.append(self._get_stats(stats.tags))
+        result.append(self._get_stats(stats.suite))
+
+    def _get_stats(self, stats):
+        return [stat.js_attrs for stat in stats]


 class SuiteHandler(_Handler):

==============================================================================
Revision: 5cabdc1a5be3
Author:   Pekka Klärck
Date:     Wed Nov 30 03:12:50 2011
Log:      Automated merge with https://code.google.com/p/robotframework/
http://code.google.com/p/robotframework/source/detail?r=5cabdc1a5be3

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

=======================================
--- /src/robot/reporting/resultwriter.py        Wed Nov 30 01:40:01 2011
+++ /src/robot/reporting/resultwriter.py        Wed Nov 30 03:12:50 2011
@@ -47,9 +47,11 @@
         if self._xml_result is None:
             #TODO: RFX and ResultFromXML name conflict
             execution_result = RFX(*self._data_sources)
+ # TODO: configure and configure_statistics really should be combined somehow + execution_result.configure_statistics(*self.settings.statistics_configuration()) execution_result.configure(status_rc=not self.settings['NoStatusRC'], **self.settings.result_configuration()) - self._xml_result = ResultFromXML(execution_result, self.settings)
+            self._xml_result = ResultFromXML(execution_result)
         return self._xml_result

     @property
@@ -79,22 +81,14 @@

 class ResultFromXML(object):

-    def __init__(self, execution_result, settings=None):
+    def __init__(self, execution_result):
         self.result = execution_result
-        self._settings = settings
         self._generator = 'Robot'

     def serialize_output(self, path, log=True):
+        # TODO: Can `log` be False??
         if path == 'NONE':
             return
-        if self._settings:
-            settings = self._settings
- params = (settings['SuiteStatLevel'], settings['TagStatInclude'], - settings['TagStatExclude'], settings['TagStatCombine'],
-                      settings['TagDoc'], settings['TagStatLink'])
-        else:
-            params = ()
-        self.result.configure_statistics(*params)
         serializer = RebotXMLWriter(path)
         self.result.visit(serializer)
         if log:
=======================================
--- /src/robot/result/jsondatamodelhandlers.py  Wed Nov 30 01:40:01 2011
+++ /src/robot/result/jsondatamodelhandlers.py  Wed Nov 30 03:12:50 2011
@@ -14,7 +14,6 @@

 from robot import utils
 from robot.output import LEVELS
-from robot.result.visitor import ResultVisitor


 class _Handler(object):
@@ -93,49 +92,16 @@
         return self._messages


-class SuiteStatVisitor(ResultVisitor):
-
-    def __init__(self, collection):
-        self.collection = collection
-
-    def visit_stat(self, stats):
-        stat = self._create_stat(stats)
-        stat['id'] = stats.attrs['idx']
-        stat['name'] = stats.attrs['name']
-        self.collection += [stat]
-
-    def _create_stat(self, stat_elem):
-        return {'pass':stat_elem.passed,
-                'fail':stat_elem.failed,
-                'label':stat_elem.name}
-
-
+    # TODO: This should also be Handler
 class StatisticsHandler(object):

-    def __init__(self, stats_list, stats):
-        self._result = stats_list
-        self._result.append(self._parse_totals(stats.total))
-        self._result.append(self._parse_tag(stats.tags))
-        self._result.append(self._parse_suite(stats.suite))
-
-    def _parse_totals(self, total):
- return [self._create_stat(total.critical), self._create_stat(total.all)]
-
-    def _parse_tag(self, tags):
-        return [self._create_stat(tag) for tag in tags]
-
-    def _parse_suite(self, suite):
-        stats = []
-        suite.visit(SuiteStatVisitor(stats))
-        return stats
-
-    def _create_stat(self, stat_elem):
-        return {'pass':stat_elem.passed,
-                'fail':stat_elem.failed,
-                'label':stat_elem.name}
-
-    def end_element(self, _):
-        return self._result
+    def __init__(self, result, stats):
+        result.append(self._get_stats(stats.total))
+        result.append(self._get_stats(stats.tags))
+        result.append(self._get_stats(stats.suite))
+
+    def _get_stats(self, stats):
+        return [stat.js_attrs for stat in stats]


 class SuiteHandler(_Handler):

Reply via email to