9 new revisions:
Revision: af732246a97a
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 03:03:39 2011
Log: utils.setter with attribute name
http://code.google.com/p/robotframework/source/detail?r=af732246a97a
Revision: 88dd69093419
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 03:50:22 2011
Log: TestCase status message
http://code.google.com/p/robotframework/source/detail?r=88dd69093419
Revision: bd6401754143
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 03:55:53 2011
Log: Suite status message
http://code.google.com/p/robotframework/source/detail?r=bd6401754143
Revision: 1bf42dfe3ed2
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 04:20:44 2011
Log: Fix suite stat
http://code.google.com/p/robotframework/source/detail?r=1bf42dfe3ed2
Revision: e841faa8c75f
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 04:21:43 2011
Log: Integrate new json to rebot
http://code.google.com/p/robotframework/source/detail?r=e841faa8c75f
Revision: d5692cec328e
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 04:47:10 2011
Log: DatamodelVisitor: Enable split_log option setting
http://code.google.com/p/robotframework/source/detail?r=d5692cec328e
Revision: 4120f8d555d7
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 04:49:34 2011
Log: Support split log and log rename
http://code.google.com/p/robotframework/source/detail?r=4120f8d555d7
Revision: 8696df6e5837
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 04:59:48 2011
Log: Use new rebot model
http://code.google.com/p/robotframework/source/detail?r=8696df6e5837
Revision: b5e739db16ad
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 05:02:34 2011
Log: merge
http://code.google.com/p/robotframework/source/detail?r=b5e739db16ad
==============================================================================
Revision: af732246a97a
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 03:03:39 2011
Log: utils.setter with attribute name
http://code.google.com/p/robotframework/source/detail?r=af732246a97a
Modified:
/src/robot/output/loggerhelper.py
/src/robot/result/model.py
/src/robot/utils/setter.py
=======================================
--- /src/robot/output/loggerhelper.py Wed Nov 9 01:16:33 2011
+++ /src/robot/output/loggerhelper.py Wed Nov 9 03:03:39 2011
@@ -63,7 +63,7 @@
class Message(object):
__slots__ = ['level', 'html', 'timestamp', 'linkable',
- '_setter_message_value']
+ '_message']
def __init__(self, message, level='INFO', html=False, timestamp=None,
linkable=False):
@@ -72,7 +72,7 @@
self.timestamp = self._get_timestamp(timestamp)
self.linkable = linkable
- @utils.setter
+ @utils.setter('_message')
def message(self, msg):
if not isinstance(msg, basestring):
msg = utils.unic(msg)
=======================================
--- /src/robot/result/model.py Wed Nov 9 01:30:24 2011
+++ /src/robot/result/model.py Wed Nov 9 03:03:39 2011
@@ -83,10 +83,10 @@
class TestSuite(object):
__slots__ = ['parent', 'source', '_name', 'doc',
'message', 'starttime', 'endtime', '_critical',
- '_setter_metadata_value',
- '_setter_keywords_value',
- '_setter_suites_value',
- '_setter_tests_value']
+ '_metadata',
+ '_keywords',
+ '_suites',
+ '_tests']
def __init__(self, source='', name='', doc='', metadata=None):
self.parent = None
@@ -126,19 +126,19 @@
self._critical = Critical()
return self._critical
- @utils.setter
+ @utils.setter('_metadata')
def metadata(self, metadata):
return Metadata(metadata)
- @utils.setter
+ @utils.setter('_suites')
def suites(self, suites):
return ItemList(TestSuite, suites, parent=self)
- @utils.setter
+ @utils.setter('_tests')
def tests(self, tests):
return ItemList(TestCase, tests, parent=self)
- @utils.setter
+ @utils.setter('_keywords')
def keywords(self, keywords):
return Keywords(keywords, parent=self)
@@ -226,8 +226,8 @@
class TestCase(object):
__slots__ = ['parent', 'name', 'doc', 'status', 'message', 'timeout',
'starttime', 'endtime', '_critical',
- '_setter_tags_value',
- '_setter_keywords_value']
+ '_tags',
+ '_keywords']
def __init__(self, name='', doc='', tags=None, status='UNDEFINED',
timeout='', starttime='N/A', endtime='N/A'):
@@ -243,11 +243,11 @@
self.endtime = endtime
self._critical = 'yes'
- @utils.setter
+ @utils.setter('_tags')
def tags(self, tags):
return Tags(tags)
- @utils.setter
+ @utils.setter('_keywords')
def keywords(self, keywords):
return Keywords(keywords, parent=self)
@@ -289,8 +289,8 @@
class Keyword(object):
__slots__ = ['parent', 'name', 'doc', 'args', 'type', 'status',
'starttime', 'endtime', 'timeout',
- '_setter_messages_value',
- '_setter_keywords_value']
+ '_messages',
+ '_keywords']
def __init__(self, name='', doc='', type='kw', status='UNDEFINED',
timeout=''):
@@ -306,11 +306,11 @@
self.endtime = ''
self.timeout = timeout
- @utils.setter
+ @utils.setter('_keywords')
def keywords(self, keywords):
return Keywords(keywords, parent=self)
- @utils.setter
+ @utils.setter('_messages')
def messages(self, messages):
return ItemList(Message, messages)
=======================================
--- /src/robot/utils/setter.py Wed Nov 9 01:15:04 2011
+++ /src/robot/utils/setter.py Wed Nov 9 03:03:39 2011
@@ -15,19 +15,28 @@
class setter(object):
- def __init__(self, method):
+ def __init__(self, method_or_attr):
+ if isinstance(method_or_attr, basestring):
+ self.attr_name = method_or_attr
+ self.method = None
+ else:
+ self.attr_name = '___' + method_or_attr.__name__
+ self.method = method_or_attr
+
+ def __call__(self, method):
self.method = method
- self._method_value_name = '_setter_%s_value' % self.method.__name__
+ return self
def __get__(self, instance, owner):
if instance is None:
return self
try:
- return getattr(instance, self._method_value_name)
- except KeyError:
+ return getattr(instance, self.attr_name)
+ except AttributeError:
raise AttributeError(self.method.__name__)
def __set__(self, instance, value):
if instance is None:
return
- setattr(instance, self._method_value_name, self.method(instance,
value))
+ setattr(instance, self.attr_name, self.method(instance, value))
+
==============================================================================
Revision: 88dd69093419
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 03:50:22 2011
Log: TestCase status message
http://code.google.com/p/robotframework/source/detail?r=88dd69093419
Modified:
/src/robot/result/jsondatamodelhandlers.py
=======================================
--- /src/robot/result/jsondatamodelhandlers.py Tue Nov 8 05:42:29 2011
+++ /src/robot/result/jsondatamodelhandlers.py Wed Nov 9 03:50:22 2011
@@ -161,6 +161,8 @@
self._doc = self._get_id(utils.html_format(test.doc))
self._data_from_children.append(self._doc)
self._status = _StatusHandler(self._context, test).end_element('')
+ if test.message != '':
+ self._status.append(self._get_id(test.message))
def add_child_data(self, data):
self._current_children.append(data)
==============================================================================
Revision: bd6401754143
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 03:55:53 2011
Log: Suite status message
http://code.google.com/p/robotframework/source/detail?r=bd6401754143
Modified:
/src/robot/result/jsondatamodelhandlers.py
=======================================
--- /src/robot/result/jsondatamodelhandlers.py Wed Nov 9 03:50:22 2011
+++ /src/robot/result/jsondatamodelhandlers.py Wed Nov 9 03:55:53 2011
@@ -142,7 +142,10 @@
def end_element(self, suite):
stats = self._context.end_suite()
- self._data_from_children.append(_StatusHandler(self._context,
suite).end_element(''))
+ status = _StatusHandler(self._context, suite).end_element('')
+ if suite.message != '':
+ status.append(self._get_id(suite.message))
+ self._data_from_children.append(status)
return self._get_name_and_sources() + self._data_from_children + \
[self._suites, self._tests, self._keywords,
int(self._teardown_failed), stats]
==============================================================================
Revision: 1bf42dfe3ed2
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 04:20:44 2011
Log: Fix suite stat
http://code.google.com/p/robotframework/source/detail?r=1bf42dfe3ed2
Modified:
/src/robot/result/jsondatamodelhandlers.py
=======================================
--- /src/robot/result/jsondatamodelhandlers.py Wed Nov 9 03:55:53 2011
+++ /src/robot/result/jsondatamodelhandlers.py Wed Nov 9 04:20:44 2011
@@ -97,10 +97,19 @@
return [self._create_stat(tag) for tag in tags.stats.values()]
def _parse_suite(self, suite):
- all_stat = self._create_stat(suite.all)
- all_stat['id'] = suite.all.id
- all_stat['name'] = suite.all.longname
- return [all_stat]
+ class SuiteStatVisitor(object):
+ def __init__(self, collection):
+ self.collection = collection
+ start_suite_stats = end_suite_stats = lambda *args:0
+ def suite_stat(s, stats):
+ stat = self._create_stat(stats)
+ stat['id'] = stats.id
+ stat['name'] = stats.name
+ stat['label'] = stats.longname
+ s.collection += [stat]
+ stats = []
+ suite.serialize(SuiteStatVisitor(stats))
+ return stats
def _create_stat(self, stat_elem):
return {'pass':stat_elem.passed,
==============================================================================
Revision: e841faa8c75f
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 04:21:43 2011
Log: Integrate new json to rebot
http://code.google.com/p/robotframework/source/detail?r=e841faa8c75f
Modified:
/src/robot/reporting/resultwriter.py
=======================================
--- /src/robot/reporting/resultwriter.py Sat Nov 5 04:54:17 2011
+++ /src/robot/reporting/resultwriter.py Wed Nov 9 04:21:43 2011
@@ -15,7 +15,9 @@
from robot.common import Statistics
from robot.errors import DataError
from robot.output import LOGGER
+from robot.reporting.jsondatamodel import DataModelWriter
from robot.result.builders import ResultFromXML as RFX
+from robot.result.datamodel import DatamodelVisitor
from robot.result.serializer import RebotXMLWriter
from robot import utils
@@ -74,9 +76,10 @@
def write_rebot_results(self, *data_sources):
self._data_sources = data_sources
- builder = OutputBuilder(self)
- self.write_robot_results(builder.build())
- builder.finalize()
+ self.result_from_xml
+ visitor = DatamodelVisitor(self._execution_result)
+ self._data_model = DataModelWriter(visitor.datamodel)
+ self.write_robot_results(None)
return self._execution_result
==============================================================================
Revision: d5692cec328e
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 04:47:10 2011
Log: DatamodelVisitor: Enable split_log option setting
http://code.google.com/p/robotframework/source/detail?r=d5692cec328e
Modified:
/src/robot/result/datamodel.py
=======================================
--- /src/robot/result/datamodel.py Tue Nov 8 03:38:18 2011
+++ /src/robot/result/datamodel.py Wed Nov 9 04:47:10 2011
@@ -19,9 +19,9 @@
class DatamodelVisitor(ResultVisitor):
- def __init__(self, result):
+ def __init__(self, result, split_log=False):
self._elements = []
- self._context = Context()
+ self._context = Context(split_log=split_log)
self._elements.append(ExecutionResultHandler(self._context,
result))
result.visit(self)
==============================================================================
Revision: 4120f8d555d7
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 04:49:34 2011
Log: Support split log and log rename
http://code.google.com/p/robotframework/source/detail?r=4120f8d555d7
Modified:
/src/robot/reporting/resultwriter.py
/src/robot/result/datamodel.py
=======================================
--- /src/robot/reporting/resultwriter.py Wed Nov 9 04:21:43 2011
+++ /src/robot/reporting/resultwriter.py Wed Nov 9 04:49:34 2011
@@ -77,7 +77,9 @@
def write_rebot_results(self, *data_sources):
self._data_sources = data_sources
self.result_from_xml
- visitor = DatamodelVisitor(self._execution_result)
+ visitor = DatamodelVisitor(self._execution_result,
+ log_path=self.settings['Log'],
+ split_log=self.settings['SplitLog'])
self._data_model = DataModelWriter(visitor.datamodel)
self.write_robot_results(None)
return self._execution_result
=======================================
--- /src/robot/result/datamodel.py Wed Nov 9 04:47:10 2011
+++ /src/robot/result/datamodel.py Wed Nov 9 04:49:34 2011
@@ -19,9 +19,9 @@
class DatamodelVisitor(ResultVisitor):
- def __init__(self, result, split_log=False):
+ def __init__(self, result, log_path='NONE', split_log=False):
self._elements = []
- self._context = Context(split_log=split_log)
+ self._context = Context(log_path=log_path, split_log=split_log)
self._elements.append(ExecutionResultHandler(self._context,
result))
result.visit(self)
==============================================================================
Revision: 8696df6e5837
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 04:59:48 2011
Log: Use new rebot model
http://code.google.com/p/robotframework/source/detail?r=8696df6e5837
Modified:
/utest/webcontent/spec/data/create_jsdata_for_specs.py
=======================================
--- /utest/webcontent/spec/data/create_jsdata_for_specs.py Mon Oct 24
03:12:31 2011
+++ /utest/webcontent/spec/data/create_jsdata_for_specs.py Wed Nov 9
04:59:48 2011
@@ -4,6 +4,8 @@
from os.path import join, dirname, abspath
import sys
import os
+from robot.result.datamodel import DatamodelVisitor
+
BASEDIR = dirname(abspath(__file__))
OUTPUT = join(BASEDIR, 'output.xml')
@@ -12,7 +14,7 @@
import robot
from robot.reporting.outputparser import OutputParser
-from robot.reporting.jsondatamodel import SeparatingWriter
+from robot.reporting.jsondatamodel import SeparatingWriter, DataModelWriter
def run_robot(testdata, loglevel='INFO'):
@@ -26,7 +28,9 @@
def create_jsdata(outxml, target, split_log):
- model = OutputParser(split_log=split_log).parse(outxml)
+ result = robot.result.builders.ResultFromXML(outxml)
+ visitor = DatamodelVisitor(result, split_log=split_log)
+ model = DataModelWriter(visitor.datamodel,
visitor._context.split_results)
model.set_settings({'logURL': 'log.html',
'reportURL': 'report.html',
'background': {'fail': 'DeepPink'}})
==============================================================================
Revision: b5e739db16ad
Author: Mikko Korpela <[email protected]>
Date: Wed Nov 9 05:02:34 2011
Log: merge
http://code.google.com/p/robotframework/source/detail?r=b5e739db16ad