4 new revisions:
Revision: f6a6d48ea665
Author: Mikko Korpela <[email protected]>
Date: Thu Jun 9 22:50:58 2011
Log: jsparser: Remove dead code
http://code.google.com/p/robotframework/source/detail?r=f6a6d48ea665
Revision: 891ed4a42dcf
Author: Mikko Korpela <[email protected]>
Date: Thu Jun 9 23:12:21 2011
Log: jsserializer: null time if time is N/A
http://code.google.com/p/robotframework/source/detail?r=891ed4a42dcf
Revision: 0041ec740187
Author: Mikko Korpela <[email protected]>
Date: Thu Jun 9 23:47:55 2011
Log: jsparser: handle None times elapsed
http://code.google.com/p/robotframework/source/detail?r=0041ec740187
Revision: dd64c77c149a
Author: Mikko Korpela <[email protected]>
Date: Fri Jun 10 00:38:27 2011
Log: model.js: N/A timestamps
http://code.google.com/p/robotframework/source/detail?r=dd64c77c149a
==============================================================================
Revision: f6a6d48ea665
Author: Mikko Korpela <[email protected]>
Date: Thu Jun 9 22:50:58 2011
Log: jsparser: Remove dead code
http://code.google.com/p/robotframework/source/detail?r=f6a6d48ea665
Modified:
/src/robot/serializing/jsparser.py
=======================================
--- /src/robot/serializing/jsparser.py Wed Jun 8 07:09:29 2011
+++ /src/robot/serializing/jsparser.py Thu Jun 9 22:50:58 2011
@@ -166,133 +166,12 @@
l[v] = k
return l
-
-def _keyword_node_parser(node, context):
- context.start_keyword()
- try:
- result = [node.get('type'),
- context.get_text_id(node.get('name')),
-
context.get_text_id(node.get('timeout'))]+_children(node, context)
- if result[0] == 'teardown' and result[-1][0] == 'F':
- context.teardown_failed()
- return result
- finally:
- context.end_keyword()
-
-def _test_node_parser(node, context):
- name = node.get('name')
- context.start_test(name)
- try:
- critical = 'Y' if node.find('status').get('critical') == 'yes'
else 'N'
- result = ['test',
- context.get_text_id(name),
- context.get_text_id(node.get('timeout')),
- critical]+_children(node, context)
- context.add_test(critical == 'Y', result[-1][0] == 'P')
- return result
- finally:
- context.end_suite()
-
-def _errors_node_parser(node, context):
- return _children(node, context)
-
-def _children(node, context):
- return [_create_from_node(child, context) for child in
node.getchildren()]
-
-def _doc_node_parser(node, context):
- return context.get_text_id(node.text)
-
levels = {'TRACE':'T',
'DEBUG':'D',
'INFO':'I',
'WARN':'W',
'ERROR':'E',
'FAIL':'F'}
-
-def _get_level(node):
- return levels[node.get('level')]
-
-def _get_msg_text_id(node, context):
- if node.get('html'):
- return context.get_text_id(node.text)
- else:
- return context.get_text_id(utils.html_escape(node.text,
replace_whitespace=False))
-
-def _message_node_parser(node, context):
- msg = [context.timestamp(node.get('timestamp')),
- _get_level(node),
- _get_msg_text_id(node, context)]
- if node.get("linkable") == "yes":
- msg += [context.link_to(msg)]
- elif msg[1] == 'W':
- context.create_link_to_current_location(msg)
- return msg
-
-def _metadata_node_parser(node, context):
- items = {}
- for item in node.getchildren():
- items[item.get('name')] = context.get_text_id(item.text)
- return items
-
-def _status_node_parser(node, context):
- status = node.get('status')[0]
- starttime = context.timestamp(node.get('starttime'))
- endtime = context.timestamp(node.get('endtime'))
- return [status,
- starttime,
- endtime-starttime]
-
-def _tags_node_parser(node, context):
- return [context.get_text_id(c.text) for c in node.getchildren()]
-
-def _arguments_node_parser(node, context):
- return context.get_text_id(', '.join(c.text for c in
node.getchildren() if c.text is not None))
-
-def _suite_node_parser(node, context):
- name = node.get('name')
- context.start_suite(name)
- try:
- return ['suite',
- node.get('source'),
- name]+\
- _children(node, context.collect_stats())+\
- [context.dump_stats()]
- finally:
- context.end_suite()
-
-def _robot_node_parser(node, context):
- generator = node.get('generator')
- children = _children(node, context)
- generated = node.get('generated')
- if generated:
- generated = context.timestamp(generated)
- return [generated, generator]+children
-
-def _statistics_parser(node, context):
- return [_stat_from(c) for c in node.getchildren()]
-
-def _stat_from(node):
- return [[stat.text, int(stat.get('pass')), int(stat.get('fail')),
- stat.get('doc', ''), stat.get('info', ''),
stat.get('links', '')]
- for stat in node.getchildren()]
-
-_node_parsers = {
-'robot':_robot_node_parser,
-'suite':_suite_node_parser,
-'doc':_doc_node_parser,
-'metadata':_metadata_node_parser,
-'status':_status_node_parser,
-'errors':_errors_node_parser,
-'test':_test_node_parser,
-'kw':_keyword_node_parser,
-'tags':_tags_node_parser,
-'arguments':_arguments_node_parser,
-'statistics':_statistics_parser,
-'msg':_message_node_parser
-}
-
-def _create_from_node(node, context):
- return _node_parsers[node.tag](node, context)
def create_datamodel_from(input_filename):
robot = _RobotOutputHandler(Context())
==============================================================================
Revision: 891ed4a42dcf
Author: Mikko Korpela <[email protected]>
Date: Thu Jun 9 23:12:21 2011
Log: jsserializer: null time if time is N/A
http://code.google.com/p/robotframework/source/detail?r=891ed4a42dcf
Modified:
/src/robot/serializing/jsparser.py
/utest/serializing/test_js_serializer.py
=======================================
--- /src/robot/serializing/jsparser.py Thu Jun 9 22:50:58 2011
+++ /src/robot/serializing/jsparser.py Thu Jun 9 23:12:21 2011
@@ -40,7 +40,7 @@
def timestamp(self, time):
if time == 'N/A':
- return -1
+ return None
millis = int(utils.timestamp_to_secs(time, millis=True) * 1000)
if self.basemillis is None:
self._basemillis = millis
@@ -492,7 +492,9 @@
return '"'+result.getvalue()+'"'
def json_dump(data, output):
- if isinstance(data, int):
+ if data is None:
+ output.write('null')
+ elif isinstance(data, int):
output.write(str(data))
elif isinstance(data, long):
output.write(str(data))
=======================================
--- /utest/serializing/test_js_serializer.py Wed Jun 8 05:26:16 2011
+++ /utest/serializing/test_js_serializer.py Thu Jun 9 23:12:21 2011
@@ -51,6 +51,25 @@
assert_equals(data_model._robot_data, ['P',0,42,1])
assert_equals(data_model._texts, ['*', '*Message'])
+ def test_times(self):
+ self._context.start_suite('suite')
+ times = """
+ <kw type="kw" name="KwName" timeout="">
+ <msg timestamp="20110531 12:48:09.020"
level="FAIL">AssertionError</msg>
+ <msg timestamp="N/A" level="FAIL">AssertionError</msg>
+ <msg timestamp="20110531 12:48:09.010"
level="FAIL">AssertionError</msg>
+ <status status="FAIL" endtime="20110531 12:48:09.010"
starttime="20110531 12:48:09.020"></status>
+ </kw>
+ """
+ data_model = self._get_data_model(times)
+ assert_equals(data_model._basemillis, 1306835289020)
+ assert_equals(data_model._robot_data, ['kw', 1, 0,
+ [0, 'F', 2],
+ [None, 'F', 2],
+ [-10, 'F', 2],
+ ['F', 0, -10]])
+
+
def test_tags_xml_parsing(self):
tags_xml = """
<tags>
@@ -217,6 +236,11 @@
json_dump({'key':1, 'hello':'world'}, buffer)
assert_equals('{"hello":"world","key":1}', buffer.getvalue())
+ def test_json_dump_None(self):
+ buffer = StringIO.StringIO()
+ json_dump(None, buffer)
+ assert_equals('null', buffer.getvalue())
+
def _get_data_model(self, xml_string):
sax.parseString(xml_string, self._handler)
return self._handler.datamodel
==============================================================================
Revision: 0041ec740187
Author: Mikko Korpela <[email protected]>
Date: Thu Jun 9 23:47:55 2011
Log: jsparser: handle None times elapsed
http://code.google.com/p/robotframework/source/detail?r=0041ec740187
Modified:
/src/robot/serializing/jsparser.py
=======================================
--- /src/robot/serializing/jsparser.py Thu Jun 9 23:12:21 2011
+++ /src/robot/serializing/jsparser.py Thu Jun 9 23:47:55 2011
@@ -42,7 +42,7 @@
if time == 'N/A':
return None
millis = int(utils.timestamp_to_secs(time, millis=True) * 1000)
- if self.basemillis is None:
+ if self._basemillis is None:
self._basemillis = millis
return millis - self.basemillis
@@ -298,12 +298,13 @@
self._context = context
self._status = attrs.getValue('status')[0]
self._starttime =
self._context.timestamp(attrs.getValue('starttime'))
- self._endtime = self._context.timestamp(attrs.getValue('endtime'))
+ endtime = self._context.timestamp(attrs.getValue('endtime'))
+ self._elapsed = endtime-self._starttime if endtime is not None and
self._starttime is not None else None
def end_element(self, text):
result = [self._status,
self._starttime,
- self._endtime-self._starttime]
+ self._elapsed]
if text:
result += [self._context.get_text_id(text)]
return result
==============================================================================
Revision: dd64c77c149a
Author: Mikko Korpela <[email protected]>
Date: Fri Jun 10 00:38:27 2011
Log: model.js: N/A timestamps
http://code.google.com/p/robotframework/source/detail?r=dd64c77c149a
Modified:
/src/robot/webcontent/js/model.js
/src/robot/webcontent/js/testdata.js
=======================================
--- /src/robot/webcontent/js/model.js Wed Jun 8 03:29:15 2011
+++ /src/robot/webcontent/js/model.js Fri Jun 10 00:38:27 2011
@@ -207,11 +207,15 @@
}
function timeFromDate(date) {
+ if(date == null)
+ return "N/A"
return shortTime(date.getHours(), date.getMinutes(),
date.getSeconds(), date.getMilliseconds());
}
function formatDate(date, excludeMillis) {
+ if(date == null)
+ return "N/A"
var milliseconds = date.getMilliseconds();
if (excludeMillis)
milliseconds = undefined
=======================================
--- /src/robot/webcontent/js/testdata.js Wed Jun 8 04:15:04 2011
+++ /src/robot/webcontent/js/testdata.js Fri Jun 10 00:38:27 2011
@@ -29,10 +29,12 @@
}
function times(stats) {
- var start = timestamp(stats[1]);
+ var startMillis = stats[1];
var elapsed = stats[2];
- var stop = timestamp(stats[1] + elapsed);
- return [start, stop, elapsed];
+ if(startMillis == null){
+ return [null, null, elapsed];
+ }
+ return [timestamp(startMillis), timestamp(startMillis + elapsed),
elapsed];
}
function message(element) {