| # Copyright 2015 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import struct |
| import unittest |
| |
| # Generated files |
| # pylint: disable=F0401 |
| import test_unions_mojom |
| import mojo_bindings.serialization as serialization |
| |
| class UnionBindingsTest(unittest.TestCase): |
| |
| def testBasics(self): |
| u = test_unions_mojom.PodUnion() |
| self.assertTrue(u.IsUnknown()) |
| |
| u.f_uint32 = 32 |
| self.assertEquals(u.f_uint32, 32) |
| self.assertEquals(u.data, 32) |
| self.assertEquals(test_unions_mojom.PodUnion.Tags.f_uint32, u.tag) |
| self.assertFalse(u.IsUnknown()) |
| |
| u = test_unions_mojom.PodUnion(f_uint8=8) |
| self.assertEquals(u.f_uint8, 8) |
| self.assertEquals(u.data, 8) |
| self.assertEquals(test_unions_mojom.PodUnion.Tags.f_uint8, u.tag) |
| |
| with self.assertRaises(TypeError): |
| test_unions_mojom.PodUnion(f_uint8=8, f_int16=10) |
| |
| with self.assertRaises(AttributeError): |
| test_unions_mojom.PodUnion(bad_field=10) |
| |
| with self.assertRaises(AttributeError): |
| u = test_unions_mojom.PodUnion() |
| u.bad_field = 32 |
| |
| with self.assertRaises(AttributeError): |
| _ = u.f_uint16 |
| |
| def testPodUnionSerialization(self): |
| u = test_unions_mojom.PodUnion(f_uint32=32) |
| (data, handles) = u.Serialize() |
| context = serialization.RootDeserializationContext(data, handles) |
| decoded = test_unions_mojom.PodUnion.Deserialize(context) |
| |
| self.assertFalse(decoded.IsUnknown()) |
| self.assertEquals(u, decoded) |
| |
| def testUnionUnknownTag(self): |
| u = test_unions_mojom.NewUnion(f_int16=10) |
| (data, handles) = u.Serialize() |
| context = serialization.RootDeserializationContext(data, handles) |
| decoded = test_unions_mojom.OldUnion.Deserialize(context) |
| |
| self.assertTrue(decoded.IsUnknown()) |
| |
| def testObjectInUnionSerialization(self): |
| u = test_unions_mojom.ObjectUnion( |
| f_dummy=test_unions_mojom.DummyStruct()) |
| u.f_dummy.f_int8 = 8 |
| (data, handles) = u.Serialize() |
| context = serialization.RootDeserializationContext(data, handles) |
| decoded = test_unions_mojom.ObjectUnion.Deserialize(context) |
| |
| self.assertEquals(u, decoded) |
| |
| def testObjectInUnionInObjectSerialization(self): |
| s = test_unions_mojom.SmallObjStruct() |
| s.obj_union = test_unions_mojom.ObjectUnion( |
| f_dummy=test_unions_mojom.DummyStruct()) |
| s.obj_union.f_dummy.f_int8 = 25 |
| (data, handles) = s.Serialize() |
| context = serialization.RootDeserializationContext(data, handles) |
| decoded = test_unions_mojom.SmallObjStruct.Deserialize(context) |
| |
| self.assertEquals(s, decoded) |
| |
| def testNestedUnionSerialization(self): |
| u = test_unions_mojom.ObjectUnion( |
| f_pod_union=test_unions_mojom.PodUnion(f_int32=32)) |
| |
| (data, handles) = u.Serialize() |
| context = serialization.RootDeserializationContext(data, handles) |
| decoded = test_unions_mojom.ObjectUnion.Deserialize(context) |
| |
| self.assertEquals(u, decoded) |
| |
| def testNullableNullObjectInUnionSerialization(self): |
| u = test_unions_mojom.ObjectUnion(f_nullable=None) |
| (data, handles) = u.Serialize() |
| context = serialization.RootDeserializationContext(data, handles) |
| decoded = test_unions_mojom.ObjectUnion.Deserialize(context) |
| |
| self.assertEquals(u, decoded) |
| |
| def testNonNullableNullObjectInUnionSerialization(self): |
| u = test_unions_mojom.ObjectUnion(f_dummy=None) |
| with self.assertRaises(serialization.SerializationException): |
| u.Serialize() |
| |
| def doBoolInUnionSerializationTest(self, bool_value): |
| u = test_unions_mojom.PodUnion(f_bool=bool_value) |
| data, handles = u.Serialize() |
| |
| context = serialization.RootDeserializationContext(data, handles) |
| decoded = test_unions_mojom.PodUnion.Deserialize(context) |
| |
| self.assertEquals(u, decoded) |
| |
| def testBoolInUnionSerialization(self): |
| self.doBoolInUnionSerializationTest(True) |
| self.doBoolInUnionSerializationTest(False) |
| |
| def testArrayInUnionSerialization(self): |
| u = test_unions_mojom.ObjectUnion( |
| f_array_int8=[1, 2, 3, 4, 5]) |
| (data, handles) = u.Serialize() |
| context = serialization.RootDeserializationContext(data, handles) |
| decoded = test_unions_mojom.ObjectUnion.Deserialize(context) |
| |
| self.assertEquals(u, decoded) |
| |
| def testMapInUnionSerialization(self): |
| u = test_unions_mojom.ObjectUnion( |
| f_map_int8={'one': 1, 'two': 2, 'three': 3}) |
| (data, handles) = u.Serialize() |
| context = serialization.RootDeserializationContext(data, handles) |
| decoded = test_unions_mojom.ObjectUnion.Deserialize(context) |
| |
| self.assertEquals(u, decoded) |
| |
| def testUnionInObject(self): |
| s = test_unions_mojom.SmallStruct() |
| s.pod_union = test_unions_mojom.PodUnion(f_uint32=32) |
| (data, handles) = s.Serialize() |
| |
| # This is where the data should be serialized to. |
| size, tag, value = struct.unpack_from('<IIQ', buffer(data), 16) |
| self.assertEquals(16, size) |
| self.assertEquals(6, tag) |
| self.assertEquals(32, value) |
| |
| context = serialization.RootDeserializationContext(data, handles) |
| decoded = test_unions_mojom.SmallStruct.Deserialize(context) |
| |
| self.assertEquals(s, decoded) |
| |
| def testUnionInArray(self): |
| s = test_unions_mojom.SmallStruct() |
| s.pod_union_array = [ |
| test_unions_mojom.PodUnion(f_uint32=32), |
| test_unions_mojom.PodUnion(f_uint16=16), |
| test_unions_mojom.PodUnion(f_uint64=64), |
| ] |
| (data, handles) = s.Serialize() |
| |
| context = serialization.RootDeserializationContext(data, handles) |
| decoded = test_unions_mojom.SmallStruct.Deserialize(context) |
| |
| self.assertEquals(s, decoded) |
| |
| def testNonNullableNullUnionInArray(self): |
| s = test_unions_mojom.SmallStruct() |
| s.pod_union_array = [ |
| test_unions_mojom.PodUnion(f_uint32=32), |
| None, |
| test_unions_mojom.PodUnion(f_uint64=64), |
| ] |
| with self.assertRaises(serialization.SerializationException): |
| s.Serialize() |
| |
| def testNullableNullUnionInArray(self): |
| s = test_unions_mojom.SmallStruct() |
| s.nullable_pod_union_array = [ |
| test_unions_mojom.PodUnion(f_uint32=32), |
| None, |
| test_unions_mojom.PodUnion(f_uint64=64), |
| ] |
| (data, handles) = s.Serialize() |
| |
| context = serialization.RootDeserializationContext(data, handles) |
| decoded = test_unions_mojom.SmallStruct.Deserialize(context) |
| |
| self.assertEquals(s, decoded) |
| |
| def testUnionInMap(self): |
| s = test_unions_mojom.SmallStruct() |
| s.pod_union_map = { |
| 'f_uint32': test_unions_mojom.PodUnion(f_uint32=32), |
| 'f_uint16': test_unions_mojom.PodUnion(f_uint16=16), |
| 'f_uint64': test_unions_mojom.PodUnion(f_uint64=64), |
| } |
| (data, handles) = s.Serialize() |
| |
| context = serialization.RootDeserializationContext(data, handles) |
| decoded = test_unions_mojom.SmallStruct.Deserialize(context) |
| |
| self.assertEquals(s, decoded) |