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