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 5define([ 6 "gin/test/expect", 7 "mojo/public/interfaces/bindings/tests/rect.mojom", 8 "mojo/public/interfaces/bindings/tests/test_structs.mojom", 9 "mojo/public/js/codec", 10 "mojo/public/js/validator", 11], function(expect, 12 rect, 13 testStructs, 14 codec, 15 validator) { 16 17 function testConstructors() { 18 var r = new rect.Rect(); 19 expect(r).toEqual(new rect.Rect({x:0, y:0, width:0, height:0})); 20 expect(r).toEqual(new rect.Rect({foo:100, bar:200})); 21 22 r.x = 10; 23 r.y = 20; 24 r.width = 30; 25 r.height = 40; 26 var rp = new testStructs.RectPair({first: r, second: r}); 27 expect(rp.first).toEqual(r); 28 expect(rp.second).toEqual(r); 29 30 expect(new testStructs.RectPair({second: r}).first).toBeNull(); 31 32 var nr = new testStructs.NamedRegion(); 33 expect(nr.name).toBeNull(); 34 expect(nr.rects).toBeNull(); 35 expect(nr).toEqual(new testStructs.NamedRegion({})); 36 37 nr.name = "foo"; 38 nr.rects = [r, r, r]; 39 expect(nr).toEqual(new testStructs.NamedRegion({ 40 name: "foo", 41 rects: [r, r, r], 42 })); 43 44 var e = new testStructs.EmptyStruct(); 45 expect(e).toEqual(new testStructs.EmptyStruct({foo:123})); 46 } 47 48 function testNoDefaultFieldValues() { 49 var s = new testStructs.NoDefaultFieldValues(); 50 expect(s.f0).toEqual(false); 51 52 // f1 - f10, number type fields 53 for (var i = 1; i <= 10; i++) 54 expect(s["f" + i]).toEqual(0); 55 56 // f11,12 strings, f13-22 handles, f23-f26 arrays, f27,28 structs 57 for (var i = 11; i <= 28; i++) 58 expect(s["f" + i]).toBeNull(); 59 } 60 61 function testDefaultFieldValues() { 62 var s = new testStructs.DefaultFieldValues(); 63 expect(s.f0).toEqual(true); 64 65 // f1 - f12, number type fields 66 for (var i = 1; i <= 12; i++) 67 expect(s["f" + i]).toEqual(100); 68 69 // f13,14 "foo" 70 for (var i = 13; i <= 14; i++) 71 expect(s["f" + i]).toEqual("foo"); 72 73 // f15,16 a default instance of Rect 74 var r = new rect.Rect(); 75 expect(s.f15).toEqual(r); 76 expect(s.f16).toEqual(r); 77 } 78 79 function testScopedConstants() { 80 expect(testStructs.ScopedConstants.TEN).toEqual(10); 81 expect(testStructs.ScopedConstants.ALSO_TEN).toEqual(10); 82 83 expect(testStructs.ScopedConstants.EType.E0).toEqual(0); 84 expect(testStructs.ScopedConstants.EType.E1).toEqual(1); 85 expect(testStructs.ScopedConstants.EType.E2).toEqual(10); 86 expect(testStructs.ScopedConstants.EType.E3).toEqual(10); 87 expect(testStructs.ScopedConstants.EType.E4).toEqual(11); 88 89 var s = new testStructs.ScopedConstants(); 90 expect(s.f0).toEqual(0); 91 expect(s.f1).toEqual(1); 92 expect(s.f2).toEqual(10); 93 expect(s.f3).toEqual(10); 94 expect(s.f4).toEqual(11); 95 expect(s.f5).toEqual(10); 96 expect(s.f6).toEqual(10); 97 } 98 99 function structEncodeDecode(struct) { 100 var structClass = struct.constructor; 101 var builder = new codec.MessageBuilder(1234, structClass.encodedSize); 102 builder.encodeStruct(structClass, struct); 103 var message = builder.finish(); 104 105 var messageValidator = new validator.Validator(message); 106 var err = structClass.validate(messageValidator, codec.kMessageHeaderSize); 107 expect(err).toEqual(validator.validationError.NONE); 108 109 var reader = new codec.MessageReader(message); 110 return reader.decodeStruct(structClass); 111 } 112 113 function testMapKeyTypes() { 114 var mapFieldsStruct = new testStructs.MapKeyTypes({ 115 f0: new Map([[true, false], [false, true]]), // map<bool, bool> 116 f1: new Map([[0, 0], [1, 127], [-1, -128]]), // map<int8, int8> 117 f2: new Map([[0, 0], [1, 127], [2, 255]]), // map<uint8, uint8> 118 f3: new Map([[0, 0], [1, 32767], [2, -32768]]), // map<int16, int16> 119 f4: new Map([[0, 0], [1, 32768], [2, 0xFFFF]]), // map<uint16, uint16> 120 f5: new Map([[0, 0], [1, 32767], [2, -32768]]), // map<int32, int32> 121 f6: new Map([[0, 0], [1, 32768], [2, 0xFFFF]]), // map<uint32, uint32> 122 f7: new Map([[0, 0], [1, 32767], [2, -32768]]), // map<int64, int64> 123 f8: new Map([[0, 0], [1, 32768], [2, 0xFFFF]]), // map<uint64, uint64> 124 f9: new Map([[1000.5, -50000], [100.5, 5000]]), // map<float, float> 125 f10: new Map([[-100.5, -50000], [0, 50000000]]), // map<double, double> 126 f11: new Map([["one", "two"], ["free", "four"]]), // map<string, string> 127 }); 128 var decodedStruct = structEncodeDecode(mapFieldsStruct); 129 expect(decodedStruct.f0).toEqual(mapFieldsStruct.f0); 130 expect(decodedStruct.f1).toEqual(mapFieldsStruct.f1); 131 expect(decodedStruct.f2).toEqual(mapFieldsStruct.f2); 132 expect(decodedStruct.f3).toEqual(mapFieldsStruct.f3); 133 expect(decodedStruct.f4).toEqual(mapFieldsStruct.f4); 134 expect(decodedStruct.f5).toEqual(mapFieldsStruct.f5); 135 expect(decodedStruct.f6).toEqual(mapFieldsStruct.f6); 136 expect(decodedStruct.f7).toEqual(mapFieldsStruct.f7); 137 expect(decodedStruct.f8).toEqual(mapFieldsStruct.f8); 138 expect(decodedStruct.f9).toEqual(mapFieldsStruct.f9); 139 expect(decodedStruct.f10).toEqual(mapFieldsStruct.f10); 140 expect(decodedStruct.f11).toEqual(mapFieldsStruct.f11); 141 } 142 143 function testMapValueTypes() { 144 var mapFieldsStruct = new testStructs.MapValueTypes({ 145 // map<string, array<string>> 146 f0: new Map([["a", ["b", "c"]], ["d", ["e"]]]), 147 // map<string, array<string>?> 148 f1: new Map([["a", null], ["b", ["c", "d"]]]), 149 // map<string, array<string?>> 150 f2: new Map([["a", [null]], ["b", [null, "d"]]]), 151 // map<string, array<string,2>> 152 f3: new Map([["a", ["1", "2"]], ["b", ["1", "2"]]]), 153 // map<string, array<array<string, 2>?>> 154 f4: new Map([["a", [["1", "2"]]], ["b", [null]]]), 155 // map<string, array<array<string, 2>, 1>> 156 f5: new Map([["a", [["1", "2"]]]]), 157 // map<string, Rect?> 158 f6: new Map([["a", null]]), 159 // map<string, map<string, string>> 160 f7: new Map([["a", new Map([["b", "c"]])]]), 161 // map<string, array<map<string, string>>> 162 f8: new Map([["a", [new Map([["b", "c"]])]]]), 163 // map<string, handle> 164 f9: new Map([["a", 1234]]), 165 // map<string, array<handle>> 166 f10: new Map([["a", [1234, 5678]]]), 167 // map<string, map<string, handle>> 168 f11: new Map([["a", new Map([["b", 1234]])]]), 169 }); 170 var decodedStruct = structEncodeDecode(mapFieldsStruct); 171 expect(decodedStruct.f0).toEqual(mapFieldsStruct.f0); 172 expect(decodedStruct.f1).toEqual(mapFieldsStruct.f1); 173 expect(decodedStruct.f2).toEqual(mapFieldsStruct.f2); 174 expect(decodedStruct.f3).toEqual(mapFieldsStruct.f3); 175 expect(decodedStruct.f4).toEqual(mapFieldsStruct.f4); 176 expect(decodedStruct.f5).toEqual(mapFieldsStruct.f5); 177 expect(decodedStruct.f6).toEqual(mapFieldsStruct.f6); 178 expect(decodedStruct.f7).toEqual(mapFieldsStruct.f7); 179 expect(decodedStruct.f8).toEqual(mapFieldsStruct.f8); 180 expect(decodedStruct.f9).toEqual(mapFieldsStruct.f9); 181 expect(decodedStruct.f10).toEqual(mapFieldsStruct.f10); 182 expect(decodedStruct.f11).toEqual(mapFieldsStruct.f11); 183 } 184 185 function testFloatNumberValues() { 186 var decodedStruct = structEncodeDecode(new testStructs.FloatNumberValues); 187 expect(decodedStruct.f0).toEqual(testStructs.FloatNumberValues.V0); 188 expect(decodedStruct.f1).toEqual(testStructs.FloatNumberValues.V1); 189 expect(decodedStruct.f2).toEqual(testStructs.FloatNumberValues.V2); 190 expect(decodedStruct.f3).toEqual(testStructs.FloatNumberValues.V3); 191 expect(decodedStruct.f4).toEqual(testStructs.FloatNumberValues.V4); 192 expect(decodedStruct.f5).toEqual(testStructs.FloatNumberValues.V5); 193 expect(decodedStruct.f6).toEqual(testStructs.FloatNumberValues.V6); 194 expect(decodedStruct.f7).toEqual(testStructs.FloatNumberValues.V7); 195 expect(decodedStruct.f8).toEqual(testStructs.FloatNumberValues.V8); 196 expect(decodedStruct.f9).toEqual(testStructs.FloatNumberValues.V9); 197 } 198 199 function testIntegerNumberValues() { 200 var decodedStruct = structEncodeDecode(new testStructs.IntegerNumberValues); 201 expect(decodedStruct.f0).toEqual(testStructs.IntegerNumberValues.V0); 202 expect(decodedStruct.f1).toEqual(testStructs.IntegerNumberValues.V1); 203 expect(decodedStruct.f2).toEqual(testStructs.IntegerNumberValues.V2); 204 expect(decodedStruct.f3).toEqual(testStructs.IntegerNumberValues.V3); 205 expect(decodedStruct.f4).toEqual(testStructs.IntegerNumberValues.V4); 206 expect(decodedStruct.f5).toEqual(testStructs.IntegerNumberValues.V5); 207 expect(decodedStruct.f6).toEqual(testStructs.IntegerNumberValues.V6); 208 expect(decodedStruct.f7).toEqual(testStructs.IntegerNumberValues.V7); 209 expect(decodedStruct.f8).toEqual(testStructs.IntegerNumberValues.V8); 210 expect(decodedStruct.f9).toEqual(testStructs.IntegerNumberValues.V9); 211 expect(decodedStruct.f10).toEqual(testStructs.IntegerNumberValues.V10); 212 expect(decodedStruct.f11).toEqual(testStructs.IntegerNumberValues.V11); 213 expect(decodedStruct.f12).toEqual(testStructs.IntegerNumberValues.V12); 214 expect(decodedStruct.f13).toEqual(testStructs.IntegerNumberValues.V13); 215 expect(decodedStruct.f14).toEqual(testStructs.IntegerNumberValues.V14); 216 expect(decodedStruct.f15).toEqual(testStructs.IntegerNumberValues.V15); 217 expect(decodedStruct.f16).toEqual(testStructs.IntegerNumberValues.V16); 218 expect(decodedStruct.f17).toEqual(testStructs.IntegerNumberValues.V17); 219 expect(decodedStruct.f18).toEqual(testStructs.IntegerNumberValues.V18); 220 expect(decodedStruct.f19).toEqual(testStructs.IntegerNumberValues.V19); 221 } 222 223 function testUnsignedNumberValues() { 224 var decodedStruct = 225 structEncodeDecode(new testStructs.UnsignedNumberValues); 226 expect(decodedStruct.f0).toEqual(testStructs.UnsignedNumberValues.V0); 227 expect(decodedStruct.f1).toEqual(testStructs.UnsignedNumberValues.V1); 228 expect(decodedStruct.f2).toEqual(testStructs.UnsignedNumberValues.V2); 229 expect(decodedStruct.f3).toEqual(testStructs.UnsignedNumberValues.V3); 230 expect(decodedStruct.f4).toEqual(testStructs.UnsignedNumberValues.V4); 231 expect(decodedStruct.f5).toEqual(testStructs.UnsignedNumberValues.V5); 232 expect(decodedStruct.f6).toEqual(testStructs.UnsignedNumberValues.V6); 233 expect(decodedStruct.f7).toEqual(testStructs.UnsignedNumberValues.V7); 234 expect(decodedStruct.f8).toEqual(testStructs.UnsignedNumberValues.V8); 235 expect(decodedStruct.f9).toEqual(testStructs.UnsignedNumberValues.V9); 236 expect(decodedStruct.f10).toEqual(testStructs.UnsignedNumberValues.V10); 237 expect(decodedStruct.f11).toEqual(testStructs.UnsignedNumberValues.V11); 238 } 239 240 241 function testBitArrayValues() { 242 var bitArraysStruct = new testStructs.BitArrayValues({ 243 // array<bool, 1> f0; 244 f0: [true], 245 // array<bool, 7> f1; 246 f1: [true, false, true, false, true, false, true], 247 // array<bool, 9> f2; 248 f2: [true, false, true, false, true, false, true, false, true], 249 // array<bool> f3; 250 f3: [true, false, true, false, true, false, true, false], 251 // array<array<bool>> f4; 252 f4: [[true], [false], [true, false], [true, false, true, false]], 253 // array<array<bool>?> f5; 254 f5: [[true], null, null, [true, false, true, false]], 255 // array<array<bool, 2>?> f6; 256 f6: [[true, false], [true, false], [true, false]], 257 }); 258 var decodedStruct = structEncodeDecode(bitArraysStruct); 259 expect(decodedStruct.f0).toEqual(bitArraysStruct.f0); 260 expect(decodedStruct.f1).toEqual(bitArraysStruct.f1); 261 expect(decodedStruct.f2).toEqual(bitArraysStruct.f2); 262 expect(decodedStruct.f3).toEqual(bitArraysStruct.f3); 263 expect(decodedStruct.f4).toEqual(bitArraysStruct.f4); 264 expect(decodedStruct.f5).toEqual(bitArraysStruct.f5); 265 expect(decodedStruct.f6).toEqual(bitArraysStruct.f6); 266 } 267 268 testConstructors(); 269 testNoDefaultFieldValues(); 270 testDefaultFieldValues(); 271 testScopedConstants(); 272 testMapKeyTypes(); 273 testMapValueTypes(); 274 testFloatNumberValues(); 275 testIntegerNumberValues(); 276 testUnsignedNumberValues(); 277 testBitArrayValues(); 278 this.result = "PASS"; 279}); 280