OLD | NEW |
| (Empty) |
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 define([ | |
6 "gin/test/expect", | |
7 "mojo/public/interfaces/bindings/tests/test_unions.mojom", | |
8 "mojo/public/js/codec", | |
9 "mojo/public/js/validator", | |
10 ], function(expect, | |
11 unions, | |
12 codec, | |
13 validator) { | |
14 function testConstructors() { | |
15 var u = new unions.PodUnion(); | |
16 expect(u.$data).toEqual(null); | |
17 expect(u.$tag).toBeUndefined(); | |
18 | |
19 u.f_uint32 = 32; | |
20 | |
21 expect(u.f_uint32).toEqual(32); | |
22 expect(u.$tag).toEqual(unions.PodUnion.Tags.f_uint32); | |
23 | |
24 var u = new unions.PodUnion({f_uint64: 64}); | |
25 expect(u.f_uint64).toEqual(64); | |
26 expect(u.$tag).toEqual(unions.PodUnion.Tags.f_uint64); | |
27 expect(function() {var v = u.f_uint32;}).toThrow(); | |
28 | |
29 expect(function() { | |
30 var u = new unions.PodUnion({ | |
31 f_uint64: 64, | |
32 f_uint32: 32, | |
33 }); | |
34 }).toThrow(); | |
35 | |
36 expect(function() { | |
37 var u = new unions.PodUnion({ foo: 64 }); }).toThrow(); | |
38 | |
39 expect(function() { | |
40 var u = new unions.PodUnion([1,2,3,4]); }).toThrow(); | |
41 } | |
42 | |
43 function structEncodeDecode(struct) { | |
44 var structClass = struct.constructor; | |
45 var builder = new codec.MessageBuilder(1234, structClass.encodedSize); | |
46 builder.encodeStruct(structClass, struct); | |
47 | |
48 var message = builder.finish(); | |
49 | |
50 var messageValidator = new validator.Validator(message); | |
51 var err = structClass.validate(messageValidator, codec.kMessageHeaderSize); | |
52 expect(err).toEqual(validator.validationError.NONE); | |
53 | |
54 var reader = new codec.MessageReader(message); | |
55 var view = reader.decoder.buffer.dataView; | |
56 | |
57 return reader.decodeStruct(structClass); | |
58 } | |
59 | |
60 function testBasicEncoding() { | |
61 var s = new unions.WrapperStruct({ | |
62 pod_union: new unions.PodUnion({ | |
63 f_uint64: 64})}); | |
64 | |
65 var decoded = structEncodeDecode(s); | |
66 expect(decoded).toEqual(s); | |
67 | |
68 var s = new unions.WrapperStruct({ | |
69 object_union: new unions.ObjectUnion({ | |
70 f_dummy: new unions.DummyStruct({ | |
71 f_int8: 8})})}); | |
72 | |
73 var decoded = structEncodeDecode(s); | |
74 expect(decoded).toEqual(s); | |
75 | |
76 var s = new unions.WrapperStruct({ | |
77 object_union: new unions.ObjectUnion({ | |
78 f_array_int8: [1, 2, 3]})}); | |
79 | |
80 var decoded = structEncodeDecode(s); | |
81 expect(decoded).toEqual(s); | |
82 | |
83 var s = new unions.WrapperStruct({ | |
84 object_union: new unions.ObjectUnion({ | |
85 f_map_int8: new Map([ | |
86 ["first", 1], | |
87 ["second", 2], | |
88 ])})}); | |
89 | |
90 var decoded = structEncodeDecode(s); | |
91 expect(decoded).toEqual(s); | |
92 | |
93 // Encoding a union with no member set is an error. | |
94 var s = new unions.WrapperStruct({ | |
95 object_union: new unions.ObjectUnion()}); | |
96 expect(function() { | |
97 structEncodeDecode(s); }).toThrow(); | |
98 } | |
99 | |
100 function testUnionsInArrayEncoding() { | |
101 var s = new unions.SmallStruct({ | |
102 pod_union_array: [ | |
103 new unions.PodUnion({f_uint32: 32}), | |
104 new unions.PodUnion({f_uint64: 64}), | |
105 ] | |
106 }); | |
107 | |
108 var decoded = structEncodeDecode(s); | |
109 expect(decoded).toEqual(s); | |
110 } | |
111 | |
112 function testUnionsInMapEncoding() { | |
113 var s = new unions.SmallStruct({ | |
114 pod_union_map: new Map([ | |
115 ["thirty-two", new unions.PodUnion({f_uint32: 32})], | |
116 ["sixty-four", new unions.PodUnion({f_uint64: 64})], | |
117 ]) | |
118 }); | |
119 | |
120 var decoded = structEncodeDecode(s); | |
121 expect(decoded).toEqual(s); | |
122 } | |
123 | |
124 function testNestedUnionsEncoding() { | |
125 var s = new unions.WrapperStruct({ | |
126 object_union: new unions.ObjectUnion({ | |
127 f_pod_union: new unions.PodUnion({f_uint32: 32}) | |
128 })}); | |
129 var decoded = structEncodeDecode(s); | |
130 expect(decoded).toEqual(s); | |
131 } | |
132 | |
133 function structValidate(struct) { | |
134 var structClass = struct.constructor; | |
135 var builder = new codec.MessageBuilder(1234, structClass.encodedSize); | |
136 builder.encodeStruct(structClass, struct); | |
137 | |
138 var message = builder.finish(); | |
139 | |
140 var messageValidator = new validator.Validator(message); | |
141 return structClass.validate(messageValidator, codec.kMessageHeaderSize); | |
142 } | |
143 | |
144 function testNullUnionMemberValidation() { | |
145 var s = new unions.WrapperStruct({ | |
146 object_union: new unions.ObjectUnion({ | |
147 f_dummy: null})}); | |
148 | |
149 var err = structValidate(s); | |
150 expect(err).toEqual(validator.validationError.UNEXPECTED_NULL_POINTER); | |
151 | |
152 var s = new unions.WrapperStruct({ | |
153 object_union: new unions.ObjectUnion({ | |
154 f_nullable: null})}); | |
155 | |
156 var err = structValidate(s); | |
157 expect(err).toEqual(validator.validationError.NONE); | |
158 } | |
159 | |
160 function testNullUnionValidation() { | |
161 var s = new unions.SmallStructNonNullableUnion({ | |
162 pod_union: null}); | |
163 | |
164 var err = structValidate(s); | |
165 expect(err).toEqual(validator.validationError.UNEXPECTED_NULL_UNION); | |
166 | |
167 var s = new unions.WrapperStruct({ | |
168 object_union: new unions.ObjectUnion({ | |
169 f_pod_union: null}) | |
170 }); | |
171 | |
172 var err = structValidate(s); | |
173 expect(err).toEqual(validator.validationError.UNEXPECTED_NULL_POINTER); | |
174 } | |
175 | |
176 testConstructors(); | |
177 testBasicEncoding(); | |
178 testUnionsInArrayEncoding(); | |
179 testUnionsInMapEncoding(); | |
180 testNestedUnionsEncoding(); | |
181 testNullUnionMemberValidation(); | |
182 testNullUnionValidation(); | |
183 this.result = "PASS"; | |
184 }); | |
OLD | NEW |