OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <script src="../resources/testharness.js"></script> | 2 <script src="../resources/testharness.js"></script> |
3 <script src="../resources/testharnessreport.js"></script> | 3 <script src="../resources/testharnessreport.js"></script> |
4 <script src="../resources/testharness-helpers.js"></script> | 4 <script src="../resources/testharness-helpers.js"></script> |
5 <script src="../resources/mojo-helpers.js"></script> | 5 <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></scr
ipt> |
| 6 <script src="file:///gen/mojo/public/interfaces/bindings/tests/test_unions.mojom
.js"></script> |
6 <script> | 7 <script> |
7 'use strict'; | 8 'use strict'; |
8 | 9 |
9 setup({ explicit_done: true }); | 10 test(() => { |
| 11 var u = new mojo.test.PodUnion(); |
| 12 assert_equals(u.$data, null); |
| 13 assert_equals(u.$tag, undefined); |
10 | 14 |
11 define([ | 15 u.fUint32 = 32; |
12 'mojo/public/interfaces/bindings/tests/test_unions.mojom', | |
13 'mojo/public/js/codec', | |
14 'mojo/public/js/validator', | |
15 ], function(unions, codec, validator) { | |
16 | 16 |
17 test(() => { | 17 assert_equals(u.fUint32, 32); |
18 var u = new unions.PodUnion(); | 18 assert_equals(u.$tag, mojo.test.PodUnion.Tags.fUint32); |
19 assert_equals(u.$data, null); | |
20 assert_equals(u.$tag, undefined); | |
21 | 19 |
22 u.f_uint32 = 32; | 20 var u = new mojo.test.PodUnion({fUint64: 64}); |
| 21 assert_equals(u.fUint64, 64); |
| 22 assert_equals(u.$tag, mojo.test.PodUnion.Tags.fUint64); |
| 23 assert_throws(null, function() {var v = u.fUint32;}); |
23 | 24 |
24 assert_equals(u.f_uint32, 32); | 25 assert_throws(null, function() { |
25 assert_equals(u.$tag, unions.PodUnion.Tags.f_uint32); | 26 var u = new mojo.test.PodUnion({ |
| 27 fUint64: 64, |
| 28 fUint32: 32, |
| 29 }); |
| 30 }); |
26 | 31 |
27 var u = new unions.PodUnion({f_uint64: 64}); | 32 assert_throws(null, function() { |
28 assert_equals(u.f_uint64, 64); | 33 var u = new mojo.test.PodUnion({ foo: 64 }); |
29 assert_equals(u.$tag, unions.PodUnion.Tags.f_uint64); | 34 }); |
30 assert_throws(null, function() {var v = u.f_uint32;}); | |
31 | 35 |
32 assert_throws(null, function() { | 36 assert_throws(null, function() { |
33 var u = new unions.PodUnion({ | 37 var u = new mojo.test.PodUnion([1,2,3,4]); |
34 f_uint64: 64, | 38 }); |
35 f_uint32: 32, | 39 }, 'constructors'); |
36 }); | |
37 }); | |
38 | 40 |
39 assert_throws(null, function() { | 41 function structEncodeDecode(struct) { |
40 var u = new unions.PodUnion({ foo: 64 }); | 42 var structClass = struct.constructor; |
41 }); | 43 var builder = new mojo.internal.MessageV0Builder(1234, |
| 44 structClass.encodedSize); |
| 45 builder.encodeStruct(structClass, struct); |
42 | 46 |
43 assert_throws(null, function() { | 47 var message = builder.finish(); |
44 var u = new unions.PodUnion([1,2,3,4]); | |
45 }); | |
46 }, 'constructors'); | |
47 | 48 |
48 function structEncodeDecode(struct) { | 49 var messageValidator = new mojo.internal.Validator(message); |
49 var structClass = struct.constructor; | 50 var err = structClass.validate(messageValidator, |
50 var builder = new codec.MessageV0Builder(1234, structClass.encodedSize); | 51 mojo.internal.kMessageV0HeaderSize); |
51 builder.encodeStruct(structClass, struct); | 52 assert_equals(err, mojo.internal.validationError.NONE); |
52 | 53 |
53 var message = builder.finish(); | 54 var reader = new mojo.internal.MessageReader(message); |
| 55 var view = reader.decoder.buffer.dataView; |
54 | 56 |
55 var messageValidator = new validator.Validator(message); | 57 return reader.decodeStruct(structClass); |
56 var err = structClass.validate(messageValidator, codec.kMessageV0HeaderSize)
; | 58 } |
57 assert_equals(err, validator.validationError.NONE); | |
58 | 59 |
59 var reader = new codec.MessageReader(message); | 60 test(() => { |
60 var view = reader.decoder.buffer.dataView; | 61 var s = new mojo.test.WrapperStruct({ |
| 62 podUnion: new mojo.test.PodUnion({fUint64: 64}) |
| 63 }); |
61 | 64 |
62 return reader.decodeStruct(structClass); | 65 var decoded = structEncodeDecode(s); |
63 } | 66 assert_weak_equals(decoded, s); |
64 | 67 |
65 test(() => { | 68 var s = new mojo.test.WrapperStruct({ |
66 var s = new unions.WrapperStruct({ | 69 podUnion: new mojo.test.PodUnion({fBool : true}) |
67 pod_union: new unions.PodUnion({ | 70 }); |
68 f_uint64: 64})}); | |
69 | 71 |
70 var decoded = structEncodeDecode(s); | 72 var decoded = structEncodeDecode(s); |
71 assert_weak_equals(decoded, s); | 73 assert_equals(decoded.podUnion.$tag, mojo.test.PodUnion.Tags.fBool); |
| 74 assert_true(decoded.podUnion.fBool); |
72 | 75 |
73 var s = new unions.WrapperStruct({ | 76 var s = new mojo.test.WrapperStruct({ |
74 pod_union: new unions.PodUnion({ | 77 objectUnion: new mojo.test.ObjectUnion({ |
75 f_bool : true})}); | 78 fDummy: new mojo.test.DummyStruct({fInt8: 8}) |
| 79 }) |
| 80 }); |
76 | 81 |
77 var decoded = structEncodeDecode(s); | 82 var decoded = structEncodeDecode(s); |
78 assert_equals(decoded.pod_union.$tag, unions.PodUnion.Tags.f_bool); | 83 assert_weak_equals(decoded, s); |
79 assert_true(decoded.pod_union.f_bool); | |
80 | 84 |
81 var s = new unions.WrapperStruct({ | 85 var s = new mojo.test.WrapperStruct({ |
82 object_union: new unions.ObjectUnion({ | 86 objectUnion: new mojo.test.ObjectUnion({fArrayInt8: [1, 2, 3]}) |
83 f_dummy: new unions.DummyStruct({ | 87 }); |
84 f_int8: 8})})}); | |
85 | 88 |
86 var decoded = structEncodeDecode(s); | 89 var decoded = structEncodeDecode(s); |
87 assert_weak_equals(decoded, s); | 90 assert_weak_equals(decoded, s); |
88 | 91 |
89 var s = new unions.WrapperStruct({ | 92 var s = new mojo.test.WrapperStruct({ |
90 object_union: new unions.ObjectUnion({ | 93 objectUnion: new mojo.test.ObjectUnion({ |
91 f_array_int8: [1, 2, 3]})}); | 94 fMapInt8: new Map([ |
| 95 ["first", 1], |
| 96 ["second", 2], |
| 97 ]) |
| 98 }) |
| 99 }); |
92 | 100 |
93 var decoded = structEncodeDecode(s); | 101 var decoded = structEncodeDecode(s); |
94 assert_weak_equals(decoded, s); | 102 assert_weak_equals(decoded, s); |
95 | 103 |
96 var s = new unions.WrapperStruct({ | 104 // Encoding a union with no member set is an error. |
97 object_union: new unions.ObjectUnion({ | 105 var s = new mojo.test.WrapperStruct({ |
98 f_map_int8: new Map([ | 106 objectUnion: new mojo.test.ObjectUnion()}); |
99 ["first", 1], | 107 assert_throws(null, function() { |
100 ["second", 2], | 108 structEncodeDecode(s); |
101 ])})}); | 109 }); |
| 110 }, 'basic encoding'); |
102 | 111 |
103 var decoded = structEncodeDecode(s); | 112 test(() => { |
104 assert_weak_equals(decoded, s); | 113 var s = new mojo.test.SmallStruct({ |
| 114 podUnionArray: [ |
| 115 new mojo.test.PodUnion({fUint32: 32}), |
| 116 new mojo.test.PodUnion({fUint64: 64}), |
| 117 ] |
| 118 }); |
105 | 119 |
106 // Encoding a union with no member set is an error. | 120 var decoded = structEncodeDecode(s); |
107 var s = new unions.WrapperStruct({ | 121 assert_weak_equals(decoded, s); |
108 object_union: new unions.ObjectUnion()}); | 122 }, 'unions in array encoding'); |
109 assert_throws(null, function() { | |
110 structEncodeDecode(s); | |
111 }); | |
112 }, 'basic encoding'); | |
113 | 123 |
114 test(() => { | 124 test(() => { |
115 var s = new unions.SmallStruct({ | 125 var s = new mojo.test.SmallStruct({ |
116 pod_union_array: [ | 126 podUnionMap: new Map([ |
117 new unions.PodUnion({f_uint32: 32}), | 127 ["thirty-two", new mojo.test.PodUnion({fUint32: 32})], |
118 new unions.PodUnion({f_uint64: 64}), | 128 ["sixty-four", new mojo.test.PodUnion({fUint64: 64})], |
119 ] | 129 ]) |
120 }); | 130 }); |
121 | 131 |
122 var decoded = structEncodeDecode(s); | 132 var decoded = structEncodeDecode(s); |
123 assert_weak_equals(decoded, s); | 133 assert_weak_equals(decoded, s); |
124 }, 'unions in array encoding'); | 134 }, 'unions in map encoding'); |
125 | 135 |
126 test(() => { | 136 test(() => { |
127 var s = new unions.SmallStruct({ | 137 var s = new mojo.test.WrapperStruct({ |
128 pod_union_map: new Map([ | 138 objectUnion: new mojo.test.ObjectUnion({ |
129 ["thirty-two", new unions.PodUnion({f_uint32: 32})], | 139 fPodUnion: new mojo.test.PodUnion({fUint32: 32}) |
130 ["sixty-four", new unions.PodUnion({f_uint64: 64})], | 140 }) |
131 ]) | 141 }); |
132 }); | 142 var decoded = structEncodeDecode(s); |
| 143 assert_weak_equals(decoded, s); |
| 144 }, 'nested unions encoding'); |
133 | 145 |
134 var decoded = structEncodeDecode(s); | 146 function structValidate(struct) { |
135 assert_weak_equals(decoded, s); | 147 var structClass = struct.constructor; |
136 }, 'unions in map encoding'); | 148 var builder = new mojo.internal.MessageV0Builder(1234, |
| 149 structClass.encodedSize); |
| 150 builder.encodeStruct(structClass, struct); |
137 | 151 |
138 test(() => { | 152 var message = builder.finish(); |
139 var s = new unions.WrapperStruct({ | |
140 object_union: new unions.ObjectUnion({ | |
141 f_pod_union: new unions.PodUnion({f_uint32: 32}) | |
142 })}); | |
143 var decoded = structEncodeDecode(s); | |
144 assert_weak_equals(decoded, s); | |
145 }, 'nested unions encoding'); | |
146 | 153 |
147 function structValidate(struct) { | 154 var messageValidator = new mojo.internal.Validator(message); |
148 var structClass = struct.constructor; | 155 return structClass.validate(messageValidator, |
149 var builder = new codec.MessageV0Builder(1234, structClass.encodedSize); | 156 mojo.internal.kMessageV0HeaderSize); |
150 builder.encodeStruct(structClass, struct); | 157 } |
151 | 158 |
152 var message = builder.finish(); | 159 test(() => { |
| 160 var s = new mojo.test.WrapperStruct({ |
| 161 objectUnion: new mojo.test.ObjectUnion({fDummy: null}) |
| 162 }); |
153 | 163 |
154 var messageValidator = new validator.Validator(message); | 164 var err = structValidate(s); |
155 return structClass.validate(messageValidator, codec.kMessageV0HeaderSize); | 165 assert_equals(err, mojo.internal.validationError.UNEXPECTED_NULL_POINTER); |
156 } | |
157 | 166 |
158 test(() => { | 167 var s = new mojo.test.WrapperStruct({ |
159 var s = new unions.WrapperStruct({ | 168 objectUnion: new mojo.test.ObjectUnion({fNullable: null}) |
160 object_union: new unions.ObjectUnion({ | 169 }); |
161 f_dummy: null})}); | |
162 | 170 |
163 var err = structValidate(s); | 171 var err = structValidate(s); |
164 assert_equals(err, validator.validationError.UNEXPECTED_NULL_POINTER); | 172 assert_equals(err, mojo.internal.validationError.NONE); |
| 173 }, 'null union member validation'); |
165 | 174 |
166 var s = new unions.WrapperStruct({ | 175 test(() => { |
167 object_union: new unions.ObjectUnion({ | 176 var s = new mojo.test.SmallStructNonNullableUnion({podUnion: null}); |
168 f_nullable: null})}); | |
169 | 177 |
170 var err = structValidate(s); | 178 var err = structValidate(s); |
171 assert_equals(err, validator.validationError.NONE); | 179 assert_equals(err, mojo.internal.validationError.UNEXPECTED_NULL_UNION); |
172 }, 'null union member validation'); | |
173 | 180 |
174 test(() => { | 181 var s = new mojo.test.WrapperStruct({ |
175 var s = new unions.SmallStructNonNullableUnion({ | 182 objectUnion: new mojo.test.ObjectUnion({fPodUnion: null}) |
176 pod_union: null}); | 183 }); |
177 | 184 |
178 var err = structValidate(s); | 185 var err = structValidate(s); |
179 assert_equals(err, validator.validationError.UNEXPECTED_NULL_UNION); | 186 assert_equals(err, mojo.internal.validationError.UNEXPECTED_NULL_UNION); |
| 187 }, 'null union validation'); |
180 | 188 |
181 var s = new unions.WrapperStruct({ | |
182 object_union: new unions.ObjectUnion({ | |
183 f_pod_union: null}) | |
184 }); | |
185 | |
186 var err = structValidate(s); | |
187 assert_equals(err, validator.validationError.UNEXPECTED_NULL_UNION); | |
188 }, 'null union validation'); | |
189 | |
190 done(); | |
191 | |
192 }); | |
193 </script> | 189 </script> |
OLD | NEW |