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())


Reply via email to