Index: mojo/edk/js/tests/sample_service_tests.js |
diff --git a/mojo/edk/js/tests/sample_service_tests.js b/mojo/edk/js/tests/sample_service_tests.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ca4f8e6bccc14dfbf04fce126e8f9cb46c4465d3 |
--- /dev/null |
+++ b/mojo/edk/js/tests/sample_service_tests.js |
@@ -0,0 +1,168 @@ |
+// 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/edk/js/test/hexdump", |
+ "gin/test/expect", |
+ "mojo/public/interfaces/bindings/tests/sample_service.mojom", |
+ "mojo/public/interfaces/bindings/tests/sample_import.mojom", |
+ "mojo/public/interfaces/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.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.VERTICAL : sample.Bar.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.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.VERTICAL : sample.Bar.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); |
+ expect(bar.type).toBe(sample.Bar.Type.VERTICAL); |
+ |
+ var foo = new sample.Foo(); |
+ expect(foo.name).toBe("Fooby"); |
+ expect(foo.a).toBeTruthy(); |
+ expect(foo.data).toBeNull(); |
+ |
+ var defaults = new sample.DefaultsTest(); |
+ expect(defaults.a0).toBe(-12); |
+ expect(defaults.a1).toBe(sample.kTwelve); |
+ expect(defaults.a2).toBe(1234); |
+ expect(defaults.a3).toBe(34567); |
+ expect(defaults.a4).toBe(123456); |
+ expect(defaults.a5).toBe(3456789012); |
+ expect(defaults.a6).toBe(-111111111111); |
+ // JS doesn't have a 64 bit integer type so this is just checking that the |
+ // expected and actual values have the same closest double value. |
+ expect(defaults.a7).toBe(9999999999999999999); |
+ expect(defaults.a8).toBe(0x12345); |
+ expect(defaults.a9).toBe(-0x12345); |
+ expect(defaults.a10).toBe(1234); |
+ expect(defaults.a11).toBe(true); |
+ expect(defaults.a12).toBe(false); |
+ expect(defaults.a13).toBe(123.25); |
+ expect(defaults.a14).toBe(1234567890.123); |
+ expect(defaults.a15).toBe(1E10); |
+ expect(defaults.a16).toBe(-1.2E+20); |
+ expect(defaults.a17).toBe(1.23E-20); |
+ expect(defaults.a20).toBe(sample.Bar.Type.BOTH); |
+ expect(defaults.a21).toBeNull(); |
+ expect(defaults.a22).toBeTruthy(); |
+ expect(defaults.a22.shape).toBe(imported.Shape.RECTANGLE); |
+ expect(defaults.a22.color).toBe(imported2.Color.BLACK); |
+ expect(defaults.a21).toBeNull(); |
+ expect(defaults.a23).toBe(0xFFFFFFFFFFFFFFFF); |
+ expect(defaults.a24).toBe(0x123456789); |
+ expect(defaults.a25).toBe(-0x123456789); |
+ } |
+ |
+ function ServiceImpl() { |
+ } |
+ |
+ ServiceImpl.prototype = Object.create(sample.Service.stubClass.prototype); |
+ |
+ ServiceImpl.prototype.frobinate = function(foo, baz, port) { |
+ checkFoo(foo); |
+ expect(baz).toBe(sample.Service.BazOptions.EXTRA); |
+ expect(port).toBe(10); |
+ global.result = "PASS"; |
+ }; |
+ |
+ function SimpleMessageReceiver() { |
+ } |
+ |
+ SimpleMessageReceiver.prototype.accept = function(message) { |
+ if (dumpMessageAsHex) { |
+ var uint8Array = new Uint8Array(message.buffer.arrayBuffer); |
+ console.log(hexdump.dumpArray(uint8Array)); |
+ } |
+ // Imagine some IPC happened here. |
+ var serviceImpl = new ServiceImpl(); |
+ serviceImpl.accept(message); |
+ }; |
+ |
+ var receiver = new SimpleMessageReceiver(); |
+ var serviceProxy = new sample.Service.proxyClass(receiver); |
+ |
+ checkDefaultValues(); |
+ |
+ var foo = makeFoo(); |
+ checkFoo(foo); |
+ |
+ var port = 10; |
+ serviceProxy.frobinate(foo, sample.Service.BazOptions.EXTRA, port); |
+}); |