• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2015 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.
4 
5 package org.chromium.mojo.bindings;
6 
7 import android.test.suitebuilder.annotation.SmallTest;
8 
9 import org.chromium.mojo.MojoTestCase;
10 import org.chromium.mojo.bindings.test.mojom.test_structs.MultiVersionStruct;
11 import org.chromium.mojo.bindings.test.mojom.test_structs.MultiVersionStructV0;
12 import org.chromium.mojo.bindings.test.mojom.test_structs.MultiVersionStructV1;
13 import org.chromium.mojo.bindings.test.mojom.test_structs.MultiVersionStructV3;
14 import org.chromium.mojo.bindings.test.mojom.test_structs.MultiVersionStructV5;
15 import org.chromium.mojo.bindings.test.mojom.test_structs.MultiVersionStructV7;
16 import org.chromium.mojo.bindings.test.mojom.test_structs.Rect;
17 import org.chromium.mojo.system.impl.CoreImpl;
18 
19 /**
20  * Testing generated classes with the [MinVersion] annotation. Struct in this test are from:
21  * mojo/public/interfaces/bindings/tests/rect.mojom and
22  * mojo/public/interfaces/bindings/tests/test_structs.mojom
23  */
24 public class BindingsVersioningTest extends MojoTestCase {
newRect(int factor)25     private static Rect newRect(int factor) {
26         Rect rect = new Rect();
27         rect.x = factor;
28         rect.y = 2 * factor;
29         rect.width = 10 * factor;
30         rect.height = 20 * factor;
31         return rect;
32     }
33 
newStruct()34     private static MultiVersionStruct newStruct() {
35         MultiVersionStruct struct = new MultiVersionStruct();
36         struct.fInt32 = 123;
37         struct.fRect = newRect(5);
38         struct.fString = "hello";
39         struct.fArray = new byte[] {10, 9, 8};
40         struct.fBool = true;
41         struct.fInt16 = 256;
42         return struct;
43     }
44 
45     /**
46      * Testing serializing old struct version to newer one.
47      */
48     @SmallTest
testOldToNew()49     public void testOldToNew() {
50         {
51             MultiVersionStructV0 v0 = new MultiVersionStructV0();
52             v0.fInt32 = 123;
53             MultiVersionStruct expected = new MultiVersionStruct();
54             expected.fInt32 = 123;
55 
56             MultiVersionStruct output = MultiVersionStruct.deserialize(v0.serialize(null));
57             assertEquals(expected, output);
58             assertEquals(0, v0.getVersion());
59             assertEquals(0, output.getVersion());
60         }
61 
62         {
63             MultiVersionStructV1 v1 = new MultiVersionStructV1();
64             v1.fInt32 = 123;
65             v1.fRect = newRect(5);
66             MultiVersionStruct expected = new MultiVersionStruct();
67             expected.fInt32 = 123;
68             expected.fRect = newRect(5);
69 
70             MultiVersionStruct output = MultiVersionStruct.deserialize(v1.serialize(null));
71             assertEquals(expected, output);
72             assertEquals(1, v1.getVersion());
73             assertEquals(1, output.getVersion());
74         }
75 
76         {
77             MultiVersionStructV3 v3 = new MultiVersionStructV3();
78             v3.fInt32 = 123;
79             v3.fRect = newRect(5);
80             v3.fString = "hello";
81             MultiVersionStruct expected = new MultiVersionStruct();
82             expected.fInt32 = 123;
83             expected.fRect = newRect(5);
84             expected.fString = "hello";
85 
86             MultiVersionStruct output = MultiVersionStruct.deserialize(v3.serialize(null));
87             assertEquals(expected, output);
88             assertEquals(3, v3.getVersion());
89             assertEquals(3, output.getVersion());
90         }
91 
92         {
93             MultiVersionStructV5 v5 = new MultiVersionStructV5();
94             v5.fInt32 = 123;
95             v5.fRect = newRect(5);
96             v5.fString = "hello";
97             v5.fArray = new byte[] {10, 9, 8};
98             MultiVersionStruct expected = new MultiVersionStruct();
99             expected.fInt32 = 123;
100             expected.fRect = newRect(5);
101             expected.fString = "hello";
102             expected.fArray = new byte[] {10, 9, 8};
103 
104             MultiVersionStruct output = MultiVersionStruct.deserialize(v5.serialize(null));
105             assertEquals(expected, output);
106             assertEquals(5, v5.getVersion());
107             assertEquals(5, output.getVersion());
108         }
109 
110         {
111             int expectedHandle = 42;
112             MultiVersionStructV7 v7 = new MultiVersionStructV7();
113             v7.fInt32 = 123;
114             v7.fRect = newRect(5);
115             v7.fString = "hello";
116             v7.fArray = new byte[] {10, 9, 8};
117             v7.fMessagePipe = CoreImpl.getInstance()
118                                       .acquireNativeHandle(expectedHandle)
119                                       .toMessagePipeHandle();
120             v7.fBool = true;
121             MultiVersionStruct expected = new MultiVersionStruct();
122             expected.fInt32 = 123;
123             expected.fRect = newRect(5);
124             expected.fString = "hello";
125             expected.fArray = new byte[] {10, 9, 8};
126             expected.fBool = true;
127 
128             MultiVersionStruct output = MultiVersionStruct.deserialize(v7.serialize(null));
129 
130             // Handles must be tested separately.
131             assertEquals(expectedHandle, output.fMessagePipe.releaseNativeHandle());
132             output.fMessagePipe = expected.fMessagePipe;
133 
134             assertEquals(expected, output);
135             assertEquals(7, v7.getVersion());
136             assertEquals(7, output.getVersion());
137         }
138     }
139 
140     /**
141      * Testing serializing new struct version to older one.
142      */
143     @SmallTest
testNewToOld()144     public void testNewToOld() {
145         MultiVersionStruct struct = newStruct();
146         {
147             MultiVersionStructV0 expected = new MultiVersionStructV0();
148             expected.fInt32 = 123;
149 
150             MultiVersionStructV0 output = MultiVersionStructV0.deserialize(struct.serialize(null));
151             assertEquals(expected, output);
152             assertEquals(9, output.getVersion());
153         }
154 
155         {
156             MultiVersionStructV1 expected = new MultiVersionStructV1();
157             expected.fInt32 = 123;
158             expected.fRect = newRect(5);
159 
160             MultiVersionStructV1 output = MultiVersionStructV1.deserialize(struct.serialize(null));
161             assertEquals(expected, output);
162             assertEquals(9, output.getVersion());
163         }
164 
165         {
166             MultiVersionStructV3 expected = new MultiVersionStructV3();
167             expected.fInt32 = 123;
168             expected.fRect = newRect(5);
169             expected.fString = "hello";
170 
171             MultiVersionStructV3 output = MultiVersionStructV3.deserialize(struct.serialize(null));
172             assertEquals(expected, output);
173             assertEquals(9, output.getVersion());
174         }
175 
176         {
177             MultiVersionStructV5 expected = new MultiVersionStructV5();
178             expected.fInt32 = 123;
179             expected.fRect = newRect(5);
180             expected.fString = "hello";
181             expected.fArray = new byte[] {10, 9, 8};
182 
183             MultiVersionStructV5 output = MultiVersionStructV5.deserialize(struct.serialize(null));
184             assertEquals(expected, output);
185             assertEquals(9, output.getVersion());
186         }
187 
188         {
189             int expectedHandle = 42;
190             MultiVersionStructV7 expected = new MultiVersionStructV7();
191             expected.fInt32 = 123;
192             expected.fRect = newRect(5);
193             expected.fString = "hello";
194             expected.fArray = new byte[] {10, 9, 8};
195             expected.fBool = true;
196 
197             MultiVersionStruct input = struct;
198             input.fMessagePipe = CoreImpl.getInstance()
199                                          .acquireNativeHandle(expectedHandle)
200                                          .toMessagePipeHandle();
201 
202             MultiVersionStructV7 output = MultiVersionStructV7.deserialize(input.serialize(null));
203 
204             assertEquals(expectedHandle, output.fMessagePipe.releaseNativeHandle());
205             output.fMessagePipe = expected.fMessagePipe;
206 
207             assertEquals(expected, output);
208             assertEquals(9, output.getVersion());
209         }
210     }
211 }
212