blob: f3a1986fa6d33b184f377aa5e3983c631f826b8a [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
define([
"console",
"mojo/apps/js/test/hexdump",
"gin/test/expect",
"mojo/public/bindings/tests/sample_service.mojom",
"mojo/public/bindings/tests/sample_import.mojom",
"mojo/public/bindings/tests/sample_import2.mojom",
], function(console, hexdump, expect, sample, imported, imported2) {
var global = this;
// Set this variable to true to print the binary message in hex.
var dumpMessageAsHex = false;
function makeFoo() {
var bar = new sample.Bar();
bar.alpha = 20;
bar.beta = 40;
bar.gamma = 60;
bar.type = sample.Bar.Type.TYPE_VERTICAL;
var extra_bars = new Array(3);
for (var i = 0; i < extra_bars.length; ++i) {
var base = i * 100;
var type = i % 2 ?
sample.Bar.Type.TYPE_VERTICAL : sample.Bar.Type.TYPE_HORIZONTAL;
extra_bars[i] = new sample.Bar();
extra_bars[i].alpha = base;
extra_bars[i].beta = base + 20;
extra_bars[i].gamma = base + 40;
extra_bars[i].type = type;
}
var data = new Array(10);
for (var i = 0; i < data.length; ++i) {
data[i] = data.length - i;
}
var source = 0xFFFF; // Invent a dummy handle.
var foo = new sample.Foo();
foo.name = "foopy";
foo.x = 1;
foo.y = 2;
foo.a = false;
foo.b = true;
foo.c = false;
foo.bar = bar;
foo.extra_bars = extra_bars;
foo.data = data;
foo.source = source;
return foo;
}
// Check that the given |Foo| is identical to the one made by |MakeFoo()|.
function checkFoo(foo) {
expect(foo.name).toBe("foopy");
expect(foo.x).toBe(1);
expect(foo.y).toBe(2);
expect(foo.a).toBeFalsy();
expect(foo.b).toBeTruthy();
expect(foo.c).toBeFalsy();
expect(foo.bar.alpha).toBe(20);
expect(foo.bar.beta).toBe(40);
expect(foo.bar.gamma).toBe(60);
expect(foo.bar.type).toBe(sample.Bar.Type.TYPE_VERTICAL);
expect(foo.extra_bars.length).toBe(3);
for (var i = 0; i < foo.extra_bars.length; ++i) {
var base = i * 100;
var type = i % 2 ?
sample.Bar.Type.TYPE_VERTICAL : sample.Bar.Type.TYPE_HORIZONTAL;
expect(foo.extra_bars[i].alpha).toBe(base);
expect(foo.extra_bars[i].beta).toBe(base + 20);
expect(foo.extra_bars[i].gamma).toBe(base + 40);
expect(foo.extra_bars[i].type).toBe(type);
}
expect(foo.data.length).toBe(10);
for (var i = 0; i < foo.data.length; ++i)
expect(foo.data[i]).toBe(foo.data.length - i);
expect(foo.source).toBe(0xFFFF);
}
// Check that values are set to the defaults if we don't override them.
function checkDefaultValues() {
var bar = new sample.Bar();
expect(bar.alpha).toBe(255);
var foo = new sample.Foo();
expect(foo.name).toBe("Fooby");
expect(foo.a).toBeTruthy();
expect(foo.data.length).toBe(3);
expect(foo.data[0]).toBe(1);
expect(foo.data[1]).toBe(2);
expect(foo.data[2]).toBe(3);
var inner = new sample.DefaultsTestInner();
expect(inner.names.length).toBe(1);
expect(inner.names[0]).toBe("Jim");
expect(inner.height).toBe(6*12);
var full = new sample.DefaultsTest();
expect(full.people.length).toBe(1);
expect(full.people[0].age).toBe(32);
expect(full.people[0].names.length).toBe(2);
expect(full.people[0].names[0]).toBe("Bob");
expect(full.people[0].names[1]).toBe("Bobby");
expect(full.people[0].height).toBe(6*12);
expect(full.point.x).toBe(7);
expect(full.point.y).toBe(15);
expect(full.shape_masks.length).toBe(1);
expect(full.shape_masks[0]).toBe(1 << imported.Shape.SHAPE_RECTANGLE);
expect(full.thing.shape).toBe(imported.Shape.SHAPE_CIRCLE);
expect(full.thing.color).toBe(imported2.Color.COLOR_BLACK);
}
function ServiceImpl() {
}
ServiceImpl.prototype = Object.create(sample.ServiceStub.prototype);
ServiceImpl.prototype.frobinate = function(foo, baz, port) {
checkFoo(foo);
expect(baz).toBe(sample.ServiceStub.BazOptions.BAZ_EXTRA);
expect(port).toBe(10);
global.result = "PASS";
};
function SimpleMessageReceiver() {
}
SimpleMessageReceiver.prototype.accept = function(message) {
if (dumpMessageAsHex)
console.log(hexdump.dumpArray(message.memory));
// Imagine some IPC happened here.
var serviceImpl = new ServiceImpl();
serviceImpl.accept(message);
};
var receiver = new SimpleMessageReceiver();
var serviceProxy = new sample.ServiceProxy(receiver);
checkDefaultValues();
var foo = makeFoo();
checkFoo(foo);
var port = 10;
serviceProxy.frobinate(foo, sample.ServiceProxy.BazOptions.BAZ_EXTRA, port);
});