• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 package org.chromium.mojo.bindings;
6 
7 import android.test.suitebuilder.annotation.SmallTest;
8 
9 import junit.framework.TestCase;
10 
11 import org.chromium.mojo.HandleMock;
12 import org.chromium.mojo.bindings.test.mojom.mojo.Struct1;
13 import org.chromium.mojo.bindings.test.mojom.mojo.Struct2;
14 import org.chromium.mojo.bindings.test.mojom.mojo.Struct3;
15 import org.chromium.mojo.bindings.test.mojom.mojo.Struct4;
16 import org.chromium.mojo.bindings.test.mojom.mojo.Struct5;
17 import org.chromium.mojo.bindings.test.mojom.mojo.Struct6;
18 import org.chromium.mojo.bindings.test.mojom.mojo.StructOfNullables;
19 
20 /**
21  * Tests for the serialization logic of the generated structs, using structs defined in
22  * mojo/public/interfaces/bindings/tests/serialization_test_structs.mojom .
23  */
24 public class SerializationTest extends TestCase {
25 
assertThrowsSerializationException(Struct struct)26     private static void assertThrowsSerializationException(Struct struct) {
27         try {
28             struct.serialize(null);
29             fail("Serialization of invalid struct should have thrown an exception.");
30         } catch (SerializationException ex) {
31             // Expected.
32         }
33     }
34 
35     /**
36      * Verifies that serializing a struct with an invalid handle of a non-nullable type throws an
37      * exception.
38      */
39     @SmallTest
testHandle()40     public void testHandle() {
41         Struct2 struct = new Struct2();
42         assertFalse(struct.hdl.isValid());
43         assertThrowsSerializationException(struct);
44 
45         // Make the struct valid and verify that it serializes without an exception.
46         struct.hdl = new HandleMock();
47         struct.serialize(null);
48     }
49 
50     /**
51      * Verifies that serializing a struct with a null struct pointer throws an exception.
52      */
53     @SmallTest
testStructPointer()54     public void testStructPointer() {
55         Struct3 struct = new Struct3();
56         assertNull(struct.struct1);
57         assertThrowsSerializationException(struct);
58 
59         // Make the struct valid and verify that it serializes without an exception.
60         struct.struct1 = new Struct1();
61         struct.serialize(null);
62     }
63 
64     /**
65      * Verifies that serializing a struct with an array of structs throws an exception when the
66      * struct is invalid.
67      */
68     @SmallTest
testStructArray()69     public void testStructArray() {
70         Struct4 struct = new Struct4();
71         assertNull(struct.data);
72         assertThrowsSerializationException(struct);
73 
74         // Create the (1-element) array but have the element null.
75         struct.data = new Struct1[1];
76         assertThrowsSerializationException(struct);
77 
78         // Create the array element, struct should serialize now.
79         struct.data[0] = new Struct1();
80         struct.serialize(null);
81     }
82 
83     /**
84      * Verifies that serializing a struct with a fixed-size array of incorrect length throws an
85      * exception.
86      */
87     @SmallTest
testFixedSizeArray()88     public void testFixedSizeArray() {
89         Struct5 struct = new Struct5();
90         assertNull(struct.pair);
91         assertThrowsSerializationException(struct);
92 
93         // Create the (1-element) array, 2-element array is required.
94         struct.pair = new Struct1[1];
95         struct.pair[0] = new Struct1();
96         assertThrowsSerializationException(struct);
97 
98         // Create the array of a correct size, struct should serialize now.
99         struct.pair = new Struct1[2];
100         struct.pair[0] = new Struct1();
101         struct.pair[1] = new Struct1();
102         struct.serialize(null);
103     }
104 
105     /**
106      * Verifies that serializing a struct with a null string throws an exception.
107      */
108     @SmallTest
testString()109     public void testString() {
110         Struct6 struct = new Struct6();
111         assertNull(struct.str);
112         assertThrowsSerializationException(struct);
113 
114         // Make the struct valid and verify that it serializes without an exception.
115         struct.str = "";
116         struct.serialize(null);
117     }
118 
119     /**
120      * Verifies that a struct with an invalid nullable handle, null nullable struct pointer and null
121      * nullable string serializes without an exception.
122      */
123     @SmallTest
testNullableFields()124     public void testNullableFields() {
125         StructOfNullables struct = new StructOfNullables();
126         assertFalse(struct.hdl.isValid());
127         assertNull(struct.struct1);
128         assertNull(struct.str);
129         struct.serialize(null);
130     }
131 }
132