3 new revisions:
Revision: ef33ab1937ed
Author: Mikko Korpela <[email protected]>
Date: Tue Jun 21 21:47:15 2011
Log: encapsulate index remap in to remove_keywords. This is
preparation for...
http://code.google.com/p/robotframework/source/detail?r=ef33ab1937ed
Revision: f85d52bbc4a3
Author: Mikko Korpela <[email protected]>
Date: Tue Jun 21 21:57:23 2011
Log: move json tests to there own module
http://code.google.com/p/robotframework/source/detail?r=f85d52bbc4a3
Revision: 1e6e45f9dae4
Author: Mikko Korpela <[email protected]>
Date: Tue Jun 21 22:01:16 2011
Log: json_dump: rename mapping to mappings
http://code.google.com/p/robotframework/source/detail?r=1e6e45f9dae4
==============================================================================
Revision: ef33ab1937ed
Author: Mikko Korpela <[email protected]>
Date: Tue Jun 21 21:47:15 2011
Log: encapsulate index remap in to remove_keywords. This is
preparation for using json_dump mappings to handle variable refs
http://code.google.com/p/robotframework/source/detail?r=ef33ab1937ed
Modified:
/src/robot/result/json.py
/src/robot/result/jsondatamodel.py
/utest/result/test_js_serializer.py
=======================================
--- /src/robot/result/json.py Tue Jun 21 15:04:21 2011
+++ /src/robot/result/json.py Tue Jun 21 21:47:15 2011
@@ -55,7 +55,7 @@
output.write(',')
output.write(']')
elif mapping and data in mapping:
- json_dump(mapping[data], output)
+ output.write(mapping[data])
elif isinstance(data, (int, long)):
output.write(str(data))
elif isinstance(data, basestring):
=======================================
--- /src/robot/result/jsondatamodel.py Tue Jun 21 15:04:21 2011
+++ /src/robot/result/jsondatamodel.py Tue Jun 21 21:47:15 2011
@@ -24,7 +24,6 @@
self._robot_data = robot_data
self._settings = None
self._set_generated(time.localtime())
- self._index_remap = {}
def _set_generated(self, timetuple):
genMillis = long(time.mktime(timetuple) * 1000) -\
@@ -40,13 +39,12 @@
self._settings = settings
def write_to(self, output, mapping=None):
- self._dump_json('window.output = ', self._robot_data, output,
- self._index_remap)
+ self._dump_json('window.output = ', self._robot_data, output)
self._dump_json('window.settings = ', self._settings, output)
- def _dump_json(self, name, data, output, mapping=None):
+ def _dump_json(self, name, data, output):
output.write(name)
- json.json_dump(data, output, mapping)
+ json.json_dump(data, output)
output.write(';\n')
def remove_keywords(self):
@@ -68,23 +66,37 @@
def _prune_unused_indices(self):
used = self._collect_used_indices(self._robot_data['suite'], set())
+ remap = {}
self._robot_data['strings'] = \
- list(self._prune(self._robot_data['strings'], used))
+ list(self._prune(self._robot_data['strings'], used, remap))
self._robot_data['integers'] = \
- list(self._prune(self._robot_data['integers'], used,
+ list(self._prune(self._robot_data['integers'], used, remap,
map_index=lambda index: -1 - index,
offset_increment=-1))
-
- def _prune(self, data, used, map_index=None, offset_increment=1):
+ self._remap_indices(self._robot_data['suite'], remap)
+
+ def _prune(self, data, used, index_remap, map_index=None,
offset_increment=1):
offset = 0
for index, text in enumerate(data):
index = map_index(index) if map_index else index
if index in used:
- self._index_remap[index] = index - offset
+ index_remap[index] = index - offset
yield text
else:
offset += offset_increment
+ def _remap_indices(self, data, remap):
+ for i, item in enumerate(data):
+ if isinstance(item, (int, long)):
+ data[i] = remap[item]
+ elif isinstance(item, list):
+ self._remap_indices(item, remap)
+ elif isinstance(item, dict):
+ new_dict = {}
+ for k,v in item.items():
+ new_dict[remap[k]] = remap[v]
+ data[i] = new_dict
+
def _collect_used_indices(self, data, result):
for item in data:
if isinstance(item, (int, long)):
=======================================
--- /utest/result/test_js_serializer.py Tue Jun 21 15:16:28 2011
+++ /utest/result/test_js_serializer.py Tue Jun 21 21:47:15 2011
@@ -123,8 +123,7 @@
def assert_model_does_not_contain(self, data_model, items):
suite = self._reverse_from_ids(data_model,
- data_model._robot_data['suite'],
- data_model._index_remap)
+ data_model._robot_data['suite'])
self._check_does_not_contain(suite, ['*'+i for i in items])
def _check_does_not_contain(self, suite, items):
@@ -137,19 +136,17 @@
reversed = self._reverse_from_ids(data_model,
data_model._robot_data['suite'])
assert_equals(reversed, plain_suite)
- def _reverse_from_ids(self, data, item, remap={}):
+ def _reverse_from_ids(self, data, item):
if item is None:
return None
if isinstance(item, (int, long)):
- if item in remap:
- item = remap[item]
return self._reverse_id(data, item)
recurse = self._reverse_from_ids
if isinstance(item, list):
- return [recurse(data, i, remap) for i in item]
+ return [recurse(data, i) for i in item]
if isinstance(item, dict):
- return dict((recurse(data, k, remap),
- recurse(data, item[k], remap)) for k in item)
+ return dict((recurse(data, k),
+ recurse(data, item[k])) for k in item)
raise AssertionError('Unexpected item %r' % item)
def _reverse_id(self, data_model, id):
@@ -367,7 +364,7 @@
mapped2 = object()
json_dump([mapped1, [mapped2, {mapped2:mapped1}]], buffer,
mapping={mapped1:'1', mapped2:'a'})
- assert_equals('["1",["a",{"a":"1"}]]', buffer.getvalue())
+ assert_equals('[1,[a,{a:1}]]', buffer.getvalue())
def _get_data_model(self, xml_string):
sax.parseString('<robot
generator="test">%s<statistics/><errors/></robot>' % xml_string,
self._handler)
==============================================================================
Revision: f85d52bbc4a3
Author: Mikko Korpela <[email protected]>
Date: Tue Jun 21 21:57:23 2011
Log: move json tests to there own module
http://code.google.com/p/robotframework/source/detail?r=f85d52bbc4a3
Added:
/utest/result/test_json.py
Modified:
/utest/result/test_js_serializer.py
=======================================
--- /dev/null
+++ /utest/result/test_json.py Tue Jun 21 21:57:23 2011
@@ -0,0 +1,57 @@
+import StringIO
+try:
+ import json
+except ImportError:
+ try:
+ import simplejson as json
+ except ImportError:
+ json = None
+import unittest
+from robot.utils.asserts import assert_equals, assert_true
+from robot.result.json import json_dump
+
+class JsonTestCase(unittest.TestCase):
+
+ if json:
+ def test_json_dump_string(self):
+ string = u'string\u00A9\v\\\'\"\r\b\t\0\n\fjee'
+ for i in range(1024):
+ string += unichr(i)
+ buffer = StringIO.StringIO()
+ json_dump(string, buffer)
+ expected = StringIO.StringIO()
+ json.dump(string, expected)
+ assert_equals(buffer.getvalue(), expected.getvalue())
+
+ def test_json_dump_integer(self):
+ buffer = StringIO.StringIO()
+ json_dump(12, buffer)
+ assert_equals('12', buffer.getvalue())
+
+ def test_json_dump_list(self):
+ buffer = StringIO.StringIO()
+ json_dump([1,2,3, 'hello', 'world'], buffer)
+ assert_equals('[1,2,3,"hello","world"]', buffer.getvalue())
+
+ def test_json_dump_dictionary(self):
+ buffer = StringIO.StringIO()
+ json_dump({'key':1, 'hello':'world'}, buffer)
+ assert_true(buffer.getvalue() in ('{"hello":"world","key":1}',
+ '{"key":1,"hello":"world"}'))
+
+ def test_json_dump_None(self):
+ buffer = StringIO.StringIO()
+ json_dump(None, buffer)
+ assert_equals('null', buffer.getvalue())
+
+ def test_json_dump_mapping(self):
+ buffer = StringIO.StringIO()
+ mapped1 = object()
+ mapped2 = object()
+ json_dump([mapped1, [mapped2, {mapped2:mapped1}]], buffer,
+ mapping={mapped1:'1', mapped2:'a'})
+ assert_equals('[1,[a,{a:1}]]', buffer.getvalue())
+
+
+if __name__ == '__main__':
+ unittest.main()
=======================================
--- /utest/result/test_js_serializer.py Tue Jun 21 21:47:15 2011
+++ /utest/result/test_js_serializer.py Tue Jun 21 21:57:23 2011
@@ -1,26 +1,16 @@
from __future__ import with_statement
import StringIO
import time
-from robot.result.jsondatamodel import DataModel
-
-try:
- import json
-except ImportError:
- try:
- import simplejson as json
- except ImportError:
- json = None
+
import unittest
import xml.sax as sax
from robot.result.jsparser import _RobotOutputHandler
-from robot.result.json import json_dump
from robot.result.elementhandlers import Context
-from robot.utils.asserts import assert_equals, assert_true,
assert_not_equals, assert_false
+from robot.utils.asserts import assert_equals, assert_true
# TODO: Split this monster test suite.
-# At least json_dump tests should be moved to their own module.
class TestJsSerializer(unittest.TestCase):
@@ -325,47 +315,6 @@
data_model = self._get_data_model(errors_xml)
self.assert_model(data_model, basemillis=1306835289078,
plain_suite=[[0, '*E', "*Invalid syntax in
file '/tmp/data/failing_suite.txt' in table 'Settings': Resource
file 'nope' does not exist."]])
-
- if json:
- def test_json_dump_string(self):
- string = u'string\u00A9\v\\\'\"\r\b\t\0\n\fjee'
- for i in range(1024):
- string += unichr(i)
- buffer = StringIO.StringIO()
- json_dump(string, buffer)
- expected = StringIO.StringIO()
- json.dump(string, expected)
- self._assert_long_equals(buffer.getvalue(),
expected.getvalue())
-
- def test_json_dump_integer(self):
- buffer = StringIO.StringIO()
- json_dump(12, buffer)
- assert_equals('12', buffer.getvalue())
-
- def test_json_dump_list(self):
- buffer = StringIO.StringIO()
- json_dump([1,2,3, 'hello', 'world'], buffer)
- assert_equals('[1,2,3,"hello","world"]', buffer.getvalue())
-
- def test_json_dump_dictionary(self):
- buffer = StringIO.StringIO()
- json_dump({'key':1, 'hello':'world'}, buffer)
- assert_true(buffer.getvalue() in ('{"hello":"world","key":1}',
- '{"key":1,"hello":"world"}'))
-
- def test_json_dump_None(self):
- buffer = StringIO.StringIO()
- json_dump(None, buffer)
- assert_equals('null', buffer.getvalue())
-
- def test_json_dump_mapping(self):
- buffer = StringIO.StringIO()
- mapped1 = object()
- mapped2 = object()
- json_dump([mapped1, [mapped2, {mapped2:mapped1}]], buffer,
- mapping={mapped1:'1', mapped2:'a'})
- assert_equals('[1,[a,{a:1}]]', buffer.getvalue())
-
def _get_data_model(self, xml_string):
sax.parseString('<robot
generator="test">%s<statistics/><errors/></robot>' % xml_string,
self._handler)
return self._handler.datamodel
==============================================================================
Revision: 1e6e45f9dae4
Author: Mikko Korpela <[email protected]>
Date: Tue Jun 21 22:01:16 2011
Log: json_dump: rename mapping to mappings
http://code.google.com/p/robotframework/source/detail?r=1e6e45f9dae4
Modified:
/src/robot/result/json.py
/utest/result/test_json.py
=======================================
--- /src/robot/result/json.py Tue Jun 21 21:47:15 2011
+++ /src/robot/result/json.py Tue Jun 21 22:01:16 2011
@@ -35,27 +35,27 @@
string = string.replace('\t', '\\t')
return '"%s"' % ''.join(get_matching_char(c) for c in string)
-def json_dump(data, output, mapping=None):
+def json_dump(data, output, mappings=None):
if data is None:
output.write('null')
elif isinstance(data, dict):
output.write('{')
for index, key in enumerate(data):
- json_dump(key, output, mapping)
+ json_dump(key, output, mappings)
output.write(':')
- json_dump(data[key], output, mapping)
+ json_dump(data[key], output, mappings)
if index < len(data)-1:
output.write(',')
output.write('}')
elif isinstance(data, (list, tuple)):
output.write('[')
for index, item in enumerate(data):
- json_dump(item, output, mapping)
+ json_dump(item, output, mappings)
if index < len(data)-1:
output.write(',')
output.write(']')
- elif mapping and data in mapping:
- output.write(mapping[data])
+ elif mappings and data in mappings:
+ output.write(mappings[data])
elif isinstance(data, (int, long)):
output.write(str(data))
elif isinstance(data, basestring):
=======================================
--- /utest/result/test_json.py Tue Jun 21 21:57:23 2011
+++ /utest/result/test_json.py Tue Jun 21 22:01:16 2011
@@ -49,7 +49,7 @@
mapped1 = object()
mapped2 = object()
json_dump([mapped1, [mapped2, {mapped2:mapped1}]], buffer,
- mapping={mapped1:'1', mapped2:'a'})
+ mappings={mapped1:'1', mapped2:'a'})
assert_equals('[1,[a,{a:1}]]', buffer.getvalue())