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("", []) |