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

Side by Side 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: 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 unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 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 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import unittest 5 import unittest
6 6
7 # pylint: disable=F0401 7 # pylint: disable=F0401
8 import mojo.system 8 import mojo.system
9 9
10 # Generated files 10 # Generated files
11 # pylint: disable=F0401 11 # pylint: disable=F0401
12 import sample_service_mojom 12 import sample_service_mojom
13 13
14 14
15 def _NewHandle(): 15 def _NewHandle():
16 return mojo.system.MessagePipe().handle0 16 return mojo.system.MessagePipe().handle0
17 17
18
19 def _NewBar():
20 bar_instance = sample_service_mojom.Bar()
sdefresne 2014/09/18 12:56:22 nit: I think you don't test serialization/deserial
qsr 2014/09/18 14:16:37 Added new test for this.
21 bar_instance.alpha = 22
22 bar_instance.beta = 87
23 bar_instance.gamma = 122
24 bar_instance.type = sample_service_mojom.Bar.Type.BOTH
25 return bar_instance
26
27
18 def _NewFoo(): 28 def _NewFoo():
19 foo_instance = sample_service_mojom.Foo() 29 foo_instance = sample_service_mojom.Foo()
20 foo_instance.name = "Foo.name" 30 foo_instance.name = "Foo.name"
21 foo_instance.x = 23 31 foo_instance.x = 23
22 foo_instance.y = -23 32 foo_instance.y = -23
23 foo_instance.a = False 33 foo_instance.a = False
24 foo_instance.b = True 34 foo_instance.b = True
25 foo_instance.c = True 35 foo_instance.c = True
26 foo_instance.bar = sample_service_mojom.Bar() 36 foo_instance.bar = _NewBar()
27 foo_instance.extra_bars = [ 37 foo_instance.extra_bars = [
28 sample_service_mojom.Bar(), 38 _NewBar(),
29 sample_service_mojom.Bar() 39 _NewBar(),
30 ] 40 ]
31 foo_instance.data = 'Hello world' 41 foo_instance.data = 'Hello world'
32 foo_instance.source = _NewHandle() 42 foo_instance.source = _NewHandle()
33 foo_instance.input_streams = [ _NewHandle() ] 43 foo_instance.input_streams = [ _NewHandle() ]
34 foo_instance.output_streams = [ _NewHandle(), _NewHandle() ] 44 foo_instance.output_streams = [ _NewHandle(), _NewHandle() ]
35 foo_instance.array_of_array_of_bools = [ [ True, False ], [] ] 45 foo_instance.array_of_array_of_bools = [ [ True, False ], [] ]
36 foo_instance.multi_array_of_strings = [ 46 foo_instance.multi_array_of_strings = [
37 [ 47 [
38 [ "1", "2" ], 48 [ "1", "2" ],
39 [], 49 [],
40 [ "3", "4" ], 50 [ "3", "4" ],
41 ], 51 ],
42 [], 52 [],
43 ] 53 ]
44 foo_instance.array_of_bools = [ True, 0, 1, 2, 0 ] 54 foo_instance.array_of_bools = [ True, 0, 1, 2, 0, 0, 0, 0, 0, True ]
45 return foo_instance 55 return foo_instance
46 56
57
58 def _AreBarEquals(bar1, bar2):
59 if not bool(bar1):
sdefresne 2014/09/18 12:56:22 style: if not bar1: When using an object in a boo
qsr 2014/09/18 14:16:37 Method doesn't exist anymore.
60 return bar1 == bar2
61 if not bool(bar2):
62 return False
63
64 properties = [ "alpha",
sdefresne 2014/09/18 12:56:22 nit: you can use a tuple instead of a list here si
qsr 2014/09/18 14:16:37 This doesn't exist anymore.
65 "beta",
66 "gamma",
67 "type",
68 ]
69 for p in properties:
sdefresne 2014/09/18 12:56:22 You can extract this loop in a method. BTW, if yo
qsr 2014/09/18 14:16:37 Changed equality checking by having a generic equa
70 p1 = getattr(bar1, p)
71 p2 = getattr(bar1, p)
sdefresne 2014/09/18 12:56:22 s/bar1/bar2/
qsr 2014/09/18 14:16:37 Not there anymore.
72 if p1 != p2:
73 print '\nElement are not equals for property %r. %r != %r.' % (p, p1, p2)
74 return False
75 return True
76
77
78 def _AreBarArraysEquals(bars1, bars2):
79 if not bool(bars1):
80 return bars1 == bars2
81 if not bool(bars2):
82 return False
83 if len(bars1) != len(bars2):
84 return False
85 for (bar1, bar2) in zip(bars1, bars2):
86 if not _AreBarEquals(bar1, bar2):
87 return False
88 return True
89
90
91 def _AreFooEquals(foo1, foo2):
92 if not bool(foo1):
93 return foo1 == foo2
94 if not bool(foo2):
95 return False
96
97 properties = [ "name",
98 "x",
99 "y",
100 "a",
101 "b",
102 "c",
103 "data",
104 "source",
105 "input_streams",
106 "output_streams",
107 "array_of_array_of_bools",
108 "multi_array_of_strings",
109 "array_of_bools"
sdefresne 2014/09/18 12:56:22 nit: missing trailing comma
qsr 2014/09/18 14:16:37 Not there anymore.
110 ]
111 for p in properties:
112 p1 = getattr(foo1, p)
113 p2 = getattr(foo2, p)
114 if p1 != p2:
115 print 'Element are not equals for property %r. %r != %r.' % (p, p1, p2)
116 return False
117 if not _AreBarEquals(foo1.bar, foo2.bar):
118 return False
119 if not _AreBarArraysEquals(foo1.extra_bars, foo2.extra_bars):
120 return False
121 return True
122
47 class SerializationDeserializationTest(unittest.TestCase): 123 class SerializationDeserializationTest(unittest.TestCase):
48 124
49 def testFooSerialization(self): 125 def testFooSerialization(self):
50 (data, _) = _NewFoo().Serialize() 126 (data, _) = _NewFoo().Serialize()
51 self.assertTrue(len(data)) 127 self.assertTrue(len(data))
52 self.assertEquals(len(data) % 8, 0) 128 self.assertEquals(len(data) % 8, 0)
129
130 def testFooDeserialization(self):
131 (data, handles) = _NewFoo().Serialize()
132 self.assertTrue(
133 sample_service_mojom.Foo.Deserialize(memoryview(data), handles))
134
135 def testFooSerializationDeserialization(self):
136 foo1 = _NewFoo()
137 (data, handles) = foo1.Serialize()
138 foo2 = sample_service_mojom.Foo.Deserialize(memoryview(data), handles)
139 self.assertTrue(_AreFooEquals(foo1, foo2))
sdefresne 2014/09/18 12:56:22 Can you test failure to deserialization by passing
qsr 2014/09/18 14:16:37 Done.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698