Author: jprantan
Date: Mon Apr 6 05:06:43 2009
New Revision: 1687
Modified:
trunk/src/robot/common/statistics.py
trunk/src/robot/output/xmllogger.py
trunk/src/robot/serializing/reportserializers.py
trunk/src/robot/serializing/statserializers.py
Log:
1) New way to log suite/test names with parent name in smaller font now
handles splitted outputs, 2) Fixed linking to split logs from stat table,
3) Misc cleanup
Modified: trunk/src/robot/common/statistics.py
==============================================================================
--- trunk/src/robot/common/statistics.py (original)
+++ trunk/src/robot/common/statistics.py Mon Apr 6 05:06:43 2009
@@ -41,8 +41,8 @@
def __init__(self, name=None, doc=None, link=None):
self.name = name
- self.doc = doc
- self.link = link
+ self._doc = doc
+ self._link = link
self.passed = 0
self.failed = 0
@@ -59,18 +59,12 @@
def fail_all(self):
self.failed += self.passed
self.passed = 0
-
- def get_name(self, split_level=-1):
- return self.name
def get_doc(self, split_level=-1):
- return self.doc
+ return self._doc
def get_link(self, split_level=-1):
- return self.link
-
- def should_link_to_sub_log(self, split_level=-1):
- return False
+ return self._link
def __cmp__(self, other):
return cmp(self.name, other.name)
@@ -82,20 +76,14 @@
def __init__(self, suite):
Stat.__init__(self, suite.name)
- self._suite = suite
-
- def get_name(self, split_level=-1):
- return self._suite.get_medium_name(split_level=split_level)
+ self.get_long_name = suite.get_long_name
def get_doc(self, split_level=-1):
- return self._suite.get_long_name(split_level=split_level)
+ return self.get_long_name(split_level=split_level)
def get_link(self, split_level=-1):
- return self._suite.get_long_name(split_level=split_level)
+ return self.get_long_name(split_level=split_level)
- def should_link_to_sub_log(self, split_level=-1):
- return len(self._suite.get_long_name(separator=None)) ==
split_level+1
-
def serialize(self, serializer):
serializer.suite_stat(self)
Modified: trunk/src/robot/output/xmllogger.py
==============================================================================
--- trunk/src/robot/output/xmllogger.py (original)
+++ trunk/src/robot/output/xmllogger.py Mon Apr 6 05:06:43 2009
@@ -173,18 +173,20 @@
self._stat(stat)
def suite_stat(self, stat):
- self._stat(stat)
+ self._stat(stat, stat.get_long_name(split_level=self._split_level))
def tag_stat(self, stat):
- self._stat(stat)
+ self._stat(stat, attrs={'info': self._get_tag_stat_info(stat)})
- def _stat(self, stat):
- attrs = { 'pass' : str(stat.passed), 'fail' : str(stat.failed) }
- if stat.type == 'tag':
- attrs['info'] = self._get_tag_stat_info(stat)
- if stat.doc is not None:
- attrs['doc'] = stat.get_doc(self._split_level)
- self._writer.element('stat', stat.get_name(self._split_level),
attrs)
+ def _stat(self, stat, name=None, attrs=None):
+ name = name or stat.name
+ attrs = attrs or {}
+ attrs['pass'] = str(stat.passed)
+ attrs['fail'] = str(stat.failed)
+ doc = stat.get_doc(self._split_level)
+ if doc:
+ attrs['doc'] = doc
+ self._writer.element('stat', name, attrs)
def _get_tag_stat_info(self, stat):
if stat.critical is True:
Modified: trunk/src/robot/serializing/reportserializers.py
==============================================================================
--- trunk/src/robot/serializing/reportserializers.py (original)
+++ trunk/src/robot/serializing/reportserializers.py Mon Apr 6 05:06:43
2009
@@ -205,7 +205,7 @@
newline=False)
self._writer.content(stat.name)
self._writer.end('td')
- doc = stat.doc and utils.html_escape(stat.doc, formatting=True)
or ''
+ doc = utils.html_escape(stat.get_doc() or '', formatting=True)
self._writer.element('td', doc, {'class': 'col_doc'}, escape=False)
self._writer.element('td', 'N/A', {'class': 'col_tags
not_available'})
self._writer.element('td', self._get_crit(stat),
{'class': 'col_crit'})
Modified: trunk/src/robot/serializing/statserializers.py
==============================================================================
--- trunk/src/robot/serializing/statserializers.py (original)
+++ trunk/src/robot/serializing/statserializers.py Mon Apr 6 05:06:43 2009
@@ -20,8 +20,9 @@
class _StatSerializer:
- def __init__(self, output):
+ def __init__(self, output, split_level=-1):
self._writer = utils.HtmlWriter(output)
+ self._split_level = split_level
def start_statistics(self, statistics):
self._writer.element('h2', 'Test Statistics')
@@ -66,21 +67,17 @@
self._writer.start('td', {'class': 'col_stat_name'})
self._writer.start('div', {'class': 'stat_name'}, newline=False)
elem, attrs = self._get_element_name_and_attrs(stat)
- doc = self._get_doc(stat)
+ doc = stat.get_doc(self._split_level)
if doc:
attrs['title'] = doc
self._writer.start(elem, attrs, newline=False)
return elem
def _write_stat_name(self, stat):
- self._writer.content(self._get_name(stat))
+ self._writer.content(stat.name)
def _write_suite_stat_name(self, stat):
- # TODO:
- # 1) Should handle also split levels
- # 2) Can _get_name be removed?
- # 3) Can mediumname be removed altogether??
- tokens = stat._suite.get_long_name(separator=None)
+ tokens = stat.get_long_name(separator=None,
split_level=self._split_level)
if len(tokens) > 1:
self._writer.element('span', ' . '.join(tokens[:-1]+['']),
{'class': 'parent_name'}, newline=False)
@@ -145,12 +142,6 @@
'style': 'width: 100%;'})
self._writer.end_many(['div', 'td', 'tr'])
- def _get_doc(self, stat):
- return stat.get_doc()
-
- def _get_name(self, stat):
- return stat.get_name()
-
def _write_tag_criticality(self, stat):
if stat.critical:
self._writer.content(' (critical)')
@@ -168,11 +159,7 @@
self._writer.end('div')
-class _BaseLogStatSerializer(_StatSerializer):
-
- def __init__(self, output, split_level=-1):
- _StatSerializer.__init__(self, output)
- self._split_level = split_level
+class LogStatSerializer(_StatSerializer):
def _get_element_name_and_attrs(self, stat):
if stat.type == 'suite':
@@ -180,31 +167,31 @@
return 'span', {}
def _get_link_attributes(self, stat):
- target = '%s_%s' % (stat.type, stat.get_link(self._split_level))
+ target = 'suite_%s' % stat.get_link(self._split_level)
return {'href': '#' + target,
'onclick': "set_element_visible('%s')" % target}
-class LogStatSerializer(_BaseLogStatSerializer):
-
- def _get_doc(self, stat):
- return stat.get_doc(self._split_level)
-
- def _get_name(self, stat):
- return stat.get_name(self._split_level)
-
-
-class SplitLogStatSerializer(_BaseLogStatSerializer):
+class SplitLogStatSerializer(LogStatSerializer):
def __init__(self, output, split_level):
- _BaseLogStatSerializer.__init__(self, output, split_level)
+ LogStatSerializer.__init__(self, output, split_level=-1)
+ self._split_border = split_level
+ self._link_target = None
self._namegen =
utils.FileNameGenerator(os.path.basename(output.name))
- def _get_link_attributes(self, stat):
- if stat.should_link_to_sub_log(self._split_level):
- return {'href': '%s#%s_%s' % (self._namegen.get_name(),
stat.type,
-
stat.get_link(self._split_level))}
- return _BaseLogStatSerializer._get_link_attributes(self, stat)
+ def _get_link_attributes(self, stat):
+ border = self._before_after_or_on_split_border(stat)
+ if border < 0:
+ return LogStatSerializer._get_link_attributes(self, stat)
+ if border == 0:
+ self._link_target = self._namegen.get_name()
+ return {'href': '%s#suite_%s' % (self._link_target,
+
stat.get_link(self._split_border))}
+
+ def _before_after_or_on_split_border(self, stat):
+ tokens = stat.get_long_name(separator=None)
+ return cmp(len(tokens), self._split_border+1)
class ReportStatSerializer(_StatSerializer):