Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1135)

Unified Diff: mojo/python/tests/bindings_serialization_deserialization_unittest.py

Issue 578263003: mojo: Add deserialization to python structs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Follow review Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/public/python/mojo/bindings/serialization.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/python/tests/bindings_serialization_deserialization_unittest.py
diff --git a/mojo/python/tests/bindings_serialization_deserialization_unittest.py b/mojo/python/tests/bindings_serialization_deserialization_unittest.py
index da24645447bb119920370591b466d097e5e6ba2d..8d5244ff9341bbd6f0defb200d89e8c9172ce6ae 100644
--- a/mojo/python/tests/bindings_serialization_deserialization_unittest.py
+++ b/mojo/python/tests/bindings_serialization_deserialization_unittest.py
@@ -2,19 +2,67 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import math
import unittest
# pylint: disable=F0401
+import mojo.bindings.reflection as reflection
import mojo.system
# Generated files
# pylint: disable=F0401
+import sample_import_mojom
+import sample_import2_mojom
import sample_service_mojom
def _NewHandle():
return mojo.system.MessagePipe().handle0
+
+def _TestEquality(x, y):
+ if x == y:
+ return True
+
+ if type(x) != type(y):
+ print '\n%r != %r. Element are not of the same type.' % (x, y)
+ return False
+
+ if isinstance(x, float) and math.isnan(x) and math.isnan(y):
+ return True
+
+ if hasattr(x, '__len__'):
+ if len(x) != len(y):
+ print '\n%r != %r. Iterables are not of the same size.' % (x, y)
+ return False
+ for (x1, y1) in zip(x, y):
+ if not _TestEquality(x1, y1):
+ return False
+ return True
+
+ if (hasattr(x, '__metaclass__') and
+ x.__metaclass__ == reflection.MojoStructType):
+ properties = [p for p in dir(x) if not p.startswith('_')]
+ for p in properties:
+ p1 = getattr(x, p)
+ p2 = getattr(y, p)
+ if not hasattr(p1, '__call__') and not _TestEquality(p1, p2):
+ print '\n%r != %r. Not equal for property %r.' % (x, y, p)
+ return False
+ return True
+
+ return False
+
+
+def _NewBar():
+ bar_instance = sample_service_mojom.Bar()
+ bar_instance.alpha = 22
+ bar_instance.beta = 87
+ bar_instance.gamma = 122
+ bar_instance.type = sample_service_mojom.Bar.Type.BOTH
+ return bar_instance
+
+
def _NewFoo():
foo_instance = sample_service_mojom.Foo()
foo_instance.name = "Foo.name"
@@ -23,10 +71,10 @@ def _NewFoo():
foo_instance.a = False
foo_instance.b = True
foo_instance.c = True
- foo_instance.bar = sample_service_mojom.Bar()
+ foo_instance.bar = _NewBar()
foo_instance.extra_bars = [
- sample_service_mojom.Bar(),
- sample_service_mojom.Bar()
+ _NewBar(),
+ _NewBar(),
]
foo_instance.data = 'Hello world'
foo_instance.source = _NewHandle()
@@ -41,12 +89,43 @@ def _NewFoo():
],
[],
]
- foo_instance.array_of_bools = [ True, 0, 1, 2, 0 ]
+ foo_instance.array_of_bools = [ True, 0, 1, 2, 0, 0, 0, 0, 0, True ]
return foo_instance
+
class SerializationDeserializationTest(unittest.TestCase):
+ def testTestEquality(self):
+ self.assertFalse(_TestEquality(1, 2))
+
def testFooSerialization(self):
(data, _) = _NewFoo().Serialize()
self.assertTrue(len(data))
self.assertEquals(len(data) % 8, 0)
+
+ def testFooDeserialization(self):
+ (data, handles) = _NewFoo().Serialize()
+ self.assertTrue(
+ sample_service_mojom.Foo.Deserialize(memoryview(data), handles))
+
+ def testFooSerializationDeserialization(self):
+ foo1 = _NewFoo()
+ (data, handles) = foo1.Serialize()
+ foo2 = sample_service_mojom.Foo.Deserialize(memoryview(data), handles)
+ self.assertTrue(_TestEquality(foo1, foo2))
+
+ def testDefaultsTestSerializationDeserialization(self):
+ v1 = sample_service_mojom.DefaultsTest()
+ v1.a18 = []
+ v1.a19 = ""
+ v1.a21 = sample_import_mojom.Point()
+ v1.a22.location = sample_import_mojom.Point()
+ v1.a22.size = sample_import2_mojom.Size()
+ (data, handles) = v1.Serialize()
+ v2 = sample_service_mojom.DefaultsTest.Deserialize(memoryview(data),
+ handles)
+ self.assertTrue(_TestEquality(v1, v2))
+
+ def testFooDeserializationError(self):
+ with self.assertRaises(Exception):
+ sample_service_mojom.Foo.Deserialize("", [])
« no previous file with comments | « mojo/public/python/mojo/bindings/serialization.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698