1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
8 # pylint: disable=F0401
9 import mojo.bindings.reflection as reflection
13 # pylint: disable=F0401
14 import sample_import_mojom
15 import sample_import2_mojom
16 import sample_service_mojom
20 return mojo.system.MessagePipe().handle0
23 def _TestEquality(x, y):
27 if type(x) != type(y):
28 print '\n%r != %r. Element are not of the same type.' % (x, y)
31 if isinstance(x, float) and math.isnan(x) and math.isnan(y):
34 if hasattr(x, '__len__'):
36 print '\n%r != %r. Iterables are not of the same size.' % (x, y)
38 for (x1, y1) in zip(x, y):
39 if not _TestEquality(x1, y1):
43 if (hasattr(x, '__metaclass__') and
44 x.__metaclass__ == reflection.MojoStructType):
45 properties = [p for p in dir(x) if not p.startswith('_')]
49 if not hasattr(p1, '__call__') and not _TestEquality(p1, p2):
50 print '\n%r != %r. Not equal for property %r.' % (x, y, p)
58 bar_instance = sample_service_mojom.Bar()
59 bar_instance.alpha = 22
60 bar_instance.beta = 87
61 bar_instance.gamma = 122
62 bar_instance.type = sample_service_mojom.Bar.Type.BOTH
67 foo_instance = sample_service_mojom.Foo()
68 foo_instance.name = "Foo.name"
71 foo_instance.a = False
74 foo_instance.bar = _NewBar()
75 foo_instance.extra_bars = [
79 foo_instance.data = 'Hello world'
80 foo_instance.source = _NewHandle()
81 foo_instance.input_streams = [ _NewHandle() ]
82 foo_instance.output_streams = [ _NewHandle(), _NewHandle() ]
83 foo_instance.array_of_array_of_bools = [ [ True, False ], [] ]
84 foo_instance.multi_array_of_strings = [
92 foo_instance.array_of_bools = [ True, 0, 1, 2, 0, 0, 0, 0, 0, True ]
96 class SerializationDeserializationTest(unittest.TestCase):
98 def testTestEquality(self):
99 self.assertFalse(_TestEquality(1, 2))
101 def testFooSerialization(self):
102 (data, _) = _NewFoo().Serialize()
103 self.assertTrue(len(data))
104 self.assertEquals(len(data) % 8, 0)
106 def testFooDeserialization(self):
107 (data, handles) = _NewFoo().Serialize()
109 sample_service_mojom.Foo.Deserialize(data, handles))
111 def testFooSerializationDeserialization(self):
113 (data, handles) = foo1.Serialize()
114 foo2 = sample_service_mojom.Foo.Deserialize(data, handles)
115 self.assertTrue(_TestEquality(foo1, foo2))
117 def testDefaultsTestSerializationDeserialization(self):
118 v1 = sample_service_mojom.DefaultsTest()
121 v1.a21 = sample_import_mojom.Point()
122 v1.a22.location = sample_import_mojom.Point()
123 v1.a22.size = sample_import2_mojom.Size()
124 (data, handles) = v1.Serialize()
125 v2 = sample_service_mojom.DefaultsTest.Deserialize(data, handles)
126 self.assertTrue(_TestEquality(v1, v2))
128 def testFooDeserializationError(self):
129 with self.assertRaises(Exception):
130 sample_service_mojom.Foo.Deserialize("", [])