Home | History | Annotate | Download | only in bindings
      1 // Copyright 2013 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     "console",
      7     "mojo/apps/js/test/hexdump",
      8     "gin/test/expect",
      9     "mojo/public/interfaces/bindings/tests/sample_service.mojom",
     10     "mojo/public/interfaces/bindings/tests/sample_import.mojom",
     11     "mojo/public/interfaces/bindings/tests/sample_import2.mojom",
     12   ], function(console, hexdump, expect, sample, imported, imported2) {
     13 
     14   var global = this;
     15 
     16   // Set this variable to true to print the binary message in hex.
     17   var dumpMessageAsHex = false;
     18 
     19   function makeFoo() {
     20     var bar = new sample.Bar();
     21     bar.alpha = 20;
     22     bar.beta = 40;
     23     bar.gamma = 60;
     24     bar.type = sample.Bar.Type.TYPE_VERTICAL;
     25 
     26     var extra_bars = new Array(3);
     27     for (var i = 0; i < extra_bars.length; ++i) {
     28       var base = i * 100;
     29       var type = i % 2 ?
     30           sample.Bar.Type.TYPE_VERTICAL : sample.Bar.Type.TYPE_HORIZONTAL;
     31       extra_bars[i] = new sample.Bar();
     32       extra_bars[i].alpha = base;
     33       extra_bars[i].beta = base + 20;
     34       extra_bars[i].gamma = base + 40;
     35       extra_bars[i].type = type;
     36     }
     37 
     38     var data = new Array(10);
     39     for (var i = 0; i < data.length; ++i) {
     40       data[i] = data.length - i;
     41     }
     42 
     43     var source = 0xFFFF;  // Invent a dummy handle.
     44 
     45     var foo = new sample.Foo();
     46     foo.name = "foopy";
     47     foo.x = 1;
     48     foo.y = 2;
     49     foo.a = false;
     50     foo.b = true;
     51     foo.c = false;
     52     foo.bar = bar;
     53     foo.extra_bars = extra_bars;
     54     foo.data = data;
     55     foo.source = source;
     56     return foo;
     57   }
     58 
     59   // Check that the given |Foo| is identical to the one made by |MakeFoo()|.
     60   function checkFoo(foo) {
     61     expect(foo.name).toBe("foopy");
     62     expect(foo.x).toBe(1);
     63     expect(foo.y).toBe(2);
     64     expect(foo.a).toBeFalsy();
     65     expect(foo.b).toBeTruthy();
     66     expect(foo.c).toBeFalsy();
     67     expect(foo.bar.alpha).toBe(20);
     68     expect(foo.bar.beta).toBe(40);
     69     expect(foo.bar.gamma).toBe(60);
     70     expect(foo.bar.type).toBe(sample.Bar.Type.TYPE_VERTICAL);
     71 
     72     expect(foo.extra_bars.length).toBe(3);
     73     for (var i = 0; i < foo.extra_bars.length; ++i) {
     74       var base = i * 100;
     75       var type = i % 2 ?
     76           sample.Bar.Type.TYPE_VERTICAL : sample.Bar.Type.TYPE_HORIZONTAL;
     77       expect(foo.extra_bars[i].alpha).toBe(base);
     78       expect(foo.extra_bars[i].beta).toBe(base + 20);
     79       expect(foo.extra_bars[i].gamma).toBe(base + 40);
     80       expect(foo.extra_bars[i].type).toBe(type);
     81     }
     82 
     83     expect(foo.data.length).toBe(10);
     84     for (var i = 0; i < foo.data.length; ++i)
     85       expect(foo.data[i]).toBe(foo.data.length - i);
     86 
     87     expect(foo.source).toBe(0xFFFF);
     88   }
     89 
     90   // Check that values are set to the defaults if we don't override them.
     91   function checkDefaultValues() {
     92     var bar = new sample.Bar();
     93     expect(bar.alpha).toBe(255);
     94     expect(bar.type).toBe(sample.Bar.Type.TYPE_VERTICAL);
     95 
     96     var foo = new sample.Foo();
     97     expect(foo.name).toBe("Fooby");
     98     expect(foo.a).toBeTruthy();
     99     // TODO(vtl): crbug.com/375845
    100     // expect(foo.data).toBeNull();
    101 
    102     var defaults = new sample.DefaultsTest();
    103     expect(defaults.a0).toBe(-12);
    104     expect(defaults.a1).toBe(sample.kTwelve);
    105     expect(defaults.a2).toBe(1234);
    106     expect(defaults.a3).toBe(34567);
    107     expect(defaults.a4).toBe(123456);
    108     // TODO(vtl): crbug.com/375522
    109     // expect(defaults.a5).toBe(3456789012);
    110     expect(defaults.a6).toBe(111111111111);
    111     // TODO(vtl): crbug.com/375522 (Also, can we get exact values for large
    112     // int64/uint64's in JS?)
    113     // expect(defaults.a7).toBe(9999999999999999999);
    114     expect(defaults.a8).toBe(0x12345);
    115     expect(defaults.a9).toBe(-0x12345);
    116     expect(defaults.a10).toBe(1234);
    117     expect(defaults.a11).toBe(true);
    118     expect(defaults.a12).toBe(false);
    119     expect(defaults.a13).toBe(123.25);
    120     expect(defaults.a14).toBe(1234567890.123);
    121     expect(defaults.a15).toBe(1E10);
    122     expect(defaults.a16).toBe(-1.2E+20);
    123     expect(defaults.a17).toBe(1.23E-20);
    124     expect(defaults.a20).toBe(sample.Bar.Type.TYPE_BOTH);
    125     expect(defaults.a21).toBeNull();
    126     expect(defaults.a22).toBeTruthy();
    127     expect(defaults.a22.shape).toBe(imported.Shape.SHAPE_RECTANGLE);
    128     expect(defaults.a22.color).toBe(imported2.Color.COLOR_BLACK);
    129     // TODO(vtl): crbug.com/375845
    130     // expect(defaults.a21).toBeNull();
    131     // expect(defaults.a22).toBeNull();
    132   }
    133 
    134   function ServiceImpl() {
    135   }
    136 
    137   ServiceImpl.prototype = Object.create(sample.ServiceStub.prototype);
    138 
    139   ServiceImpl.prototype.frobinate = function(foo, baz, port) {
    140     checkFoo(foo);
    141     expect(baz).toBe(sample.ServiceStub.BazOptions.BAZ_EXTRA);
    142     expect(port).toBe(10);
    143     global.result = "PASS";
    144   };
    145 
    146   function SimpleMessageReceiver() {
    147   }
    148 
    149   SimpleMessageReceiver.prototype.accept = function(message) {
    150     if (dumpMessageAsHex) {
    151       var uint8Array = new Uint8Array(message.buffer.arrayBuffer);
    152       console.log(hexdump.dumpArray(uint8Array));
    153     }
    154     // Imagine some IPC happened here.
    155     var serviceImpl = new ServiceImpl();
    156     serviceImpl.accept(message);
    157   };
    158 
    159   var receiver = new SimpleMessageReceiver();
    160   var serviceProxy = new sample.ServiceProxy(receiver);
    161 
    162   checkDefaultValues();
    163 
    164   var foo = makeFoo();
    165   checkFoo(foo);
    166 
    167   var port = 10;
    168   serviceProxy.frobinate(foo, sample.ServiceProxy.BazOptions.BAZ_EXTRA, port);
    169 });
    170