| 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 |