Home | History | Annotate | Download | only in js
      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 
      5 define([
      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