Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(235)

Unified Diff: mojo/apps/js/bindings/connection_unittests.js

Issue 207503004: Mojo: add javascript bindings for request/response (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: --similarity=15 Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | mojo/apps/js/bindings/connector_unittests.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/apps/js/bindings/connection_unittests.js
diff --git a/mojo/apps/js/bindings/connector_unittests.js b/mojo/apps/js/bindings/connection_unittests.js
similarity index 19%
rename from mojo/apps/js/bindings/connector_unittests.js
rename to mojo/apps/js/bindings/connection_unittests.js
index 8777b6f229946d6b57ff7645f31970a4a9191dd4..14bb92f9502a419b4072a70944763f19ab5d869c 100644
--- a/mojo/apps/js/bindings/connector_unittests.js
+++ b/mojo/apps/js/bindings/connection_unittests.js
@@ -32,8 +32,10 @@ define("mojo/bindings/js/support", function() {
function pumpOnce(result) {
var callbacks = waitingCallbacks;
waitingCallbacks = [];
- for (var i = 0; i < callbacks.length; ++i)
- callbacks[i](result);
+ for (var i = 0; i < callbacks.length; ++i) {
+ if (callbacks[i])
+ callbacks[i](result);
+ }
}
var exports = {};
@@ -48,85 +50,188 @@ define([
"gin/test/expect",
"mojo/bindings/js/support",
"mojo/bindings/js/core",
- "mojo/public/bindings/js/connector",
+ "mojo/public/bindings/js/connection",
+ "mojo/public/bindings/tests/sample_interfaces.mojom",
"mojo/public/bindings/tests/sample_service.mojom",
-], function(expect, mockSupport, core, connector, sample) {
+], function(expect,
+ mockSupport,
+ core,
+ connection,
+ sample_interfaces,
+ sample_service) {
+ testClientServer();
+ testWriteToClosedPipe();
+ testRequestResponse();
+ this.result = "PASS";
+
+ function testClientServer() {
+ var receivedFrobinate = false;
+ var receivedDidFrobinate = false;
+
+ // ServiceImpl -------------------------------------------------------------
+
+ function ServiceImpl(peer) {
+ this.peer = peer;
+ }
+
+ ServiceImpl.prototype = Object.create(sample_service.ServiceStub.prototype);
+
+ ServiceImpl.prototype.frobinate = function(foo, baz, port) {
+ receivedFrobinate = true;
+
+ expect(foo.name).toBe("Example name");
+ expect(baz).toBeTruthy();
+ expect(core.close(port)).toBe(core.RESULT_OK);
+
+ this.peer.didFrobinate(42);
+ };
+
+ // ServiceImpl -------------------------------------------------------------
+
+ function ServiceClientImpl(peer) {
+ this.peer = peer;
+ }
+
+ ServiceClientImpl.prototype =
+ Object.create(sample_service.ServiceClientStub.prototype);
+
+ ServiceClientImpl.prototype.didFrobinate = function(result) {
+ receivedDidFrobinate = true;
+
+ expect(result).toBe(42);
+ };
+
+ var pipe = core.createMessagePipe();
+ var anotherPipe = core.createMessagePipe();
+ var sourcePipe = core.createMessagePipe();
+
+ var connection0 = new connection.Connection(
+ pipe.handle0, ServiceImpl, sample_service.ServiceClientProxy);
+
+ var connection1 = new connection.Connection(
+ pipe.handle1, ServiceClientImpl, sample_service.ServiceProxy);
+
+ var foo = new sample_service.Foo();
+ foo.bar = new sample_service.Bar();
+ foo.name = "Example name";
+ foo.source = sourcePipe.handle0;
+ connection1.remote.frobinate(foo, true, anotherPipe.handle0);
- var receivedFrobinate = false;
- var receivedDidFrobinate = false;
+ mockSupport.pumpOnce(core.RESULT_OK);
- // ServiceImpl --------------------------------------------------------------
+ expect(receivedFrobinate).toBeTruthy();
+ expect(receivedDidFrobinate).toBeTruthy();
- function ServiceImpl(peer) {
- this.peer = peer;
+ connection0.close();
+ connection1.close();
+
+ expect(mockSupport.numberOfWaitingCallbacks()).toBe(0);
+
+ // sourcePipe.handle0 was closed automatically when sent over IPC.
+ expect(core.close(sourcePipe.handle0)).toBe(core.RESULT_INVALID_ARGUMENT);
+ // sourcePipe.handle1 hasn't been closed yet.
+ expect(core.close(sourcePipe.handle1)).toBe(core.RESULT_OK);
+
+ // anotherPipe.handle0 was closed automatically when sent over IPC.
+ expect(core.close(anotherPipe.handle0)).toBe(core.RESULT_INVALID_ARGUMENT);
+ // anotherPipe.handle1 hasn't been closed yet.
+ expect(core.close(anotherPipe.handle1)).toBe(core.RESULT_OK);
+
+ // The Connection object is responsible for closing these handles.
+ expect(core.close(pipe.handle0)).toBe(core.RESULT_INVALID_ARGUMENT);
+ expect(core.close(pipe.handle1)).toBe(core.RESULT_INVALID_ARGUMENT);
}
- ServiceImpl.prototype = Object.create(sample.ServiceStub.prototype);
+ function testWriteToClosedPipe() {
+ var pipe = core.createMessagePipe();
+
+ var connection1 = new connection.Connection(
+ pipe.handle1, function() {}, sample_service.ServiceProxy);
- ServiceImpl.prototype.frobinate = function(foo, baz, port) {
- receivedFrobinate = true;
+ // Close the other end of the pipe.
+ core.close(pipe.handle0);
- expect(foo.name).toBe("Example name");
- expect(baz).toBeTruthy();
- expect(core.close(port)).toBe(core.RESULT_OK);
+ // Not observed yet because we haven't pumped events yet.
+ expect(connection1.encounteredError()).toBeFalsy();
- this.peer.didFrobinate(42);
- };
+ var foo = new sample_service.Foo();
+ foo.bar = new sample_service.Bar();
+ // TODO(darin): crbug.com/357043: pass null in place of |foo| here.
+ connection1.remote.frobinate(foo, true, core.kInvalidHandle);
- // ServiceImpl --------------------------------------------------------------
+ // Write failures are not reported.
+ expect(connection1.encounteredError()).toBeFalsy();
- function ServiceClientImpl(peer) {
- this.peer = peer;
+ // Pump events, and then we should start observing the closed pipe.
+ mockSupport.pumpOnce(core.RESULT_OK);
+
+ expect(connection1.encounteredError()).toBeTruthy();
+
+ connection1.close();
}
- ServiceClientImpl.prototype =
- Object.create(sample.ServiceClientStub.prototype);
+ function testRequestResponse() {
- ServiceClientImpl.prototype.didFrobinate = function(result) {
- receivedDidFrobinate = true;
+ // ProviderImpl ------------------------------------------------------------
- expect(result).toBe(42);
- };
+ function ProviderImpl(peer) {
+ this.peer = peer;
+ }
- var pipe = core.createMessagePipe();
- var anotherPipe = core.createMessagePipe();
- var sourcePipe = core.createMessagePipe();
+ ProviderImpl.prototype =
+ Object.create(sample_interfaces.ProviderStub.prototype);
- var connection0 = new connector.Connection(
- pipe.handle0, ServiceImpl, sample.ServiceClientProxy);
+ ProviderImpl.prototype.echoString = function(a, callback) {
+ callback(a);
+ };
- var connection1 = new connector.Connection(
- pipe.handle1, ServiceClientImpl, sample.ServiceProxy);
+ ProviderImpl.prototype.echoStrings = function(a, b, callback) {
+ callback(a, b);
+ };
- var foo = new sample.Foo();
- foo.bar = new sample.Bar();
- foo.name = "Example name";
- foo.source = sourcePipe.handle0;
- connection1.remote.frobinate(foo, true, anotherPipe.handle0);
+ // ProviderClientImpl ------------------------------------------------------
- mockSupport.pumpOnce(core.RESULT_OK);
+ function ProviderClientImpl(peer) {
+ this.peer = peer;
+ }
- expect(receivedFrobinate).toBeTruthy();
- expect(receivedDidFrobinate).toBeTruthy();
+ ProviderClientImpl.prototype =
+ Object.create(sample_interfaces.ProviderClientStub.prototype);
- connection0.close();
- connection1.close();
+ ProviderClientImpl.prototype.didFrobinate = function(result) {
+ receivedDidFrobinate = true;
- expect(mockSupport.numberOfWaitingCallbacks()).toBe(0);
+ expect(result).toBe(42);
+ };
- // sourcePipe.handle0 was closed automatically when sent over IPC.
- expect(core.close(sourcePipe.handle0)).toBe(core.RESULT_INVALID_ARGUMENT);
- // sourcePipe.handle1 hasn't been closed yet.
- expect(core.close(sourcePipe.handle1)).toBe(core.RESULT_OK);
+ var pipe = core.createMessagePipe();
- // anotherPipe.handle0 was closed automatically when sent over IPC.
- expect(core.close(anotherPipe.handle0)).toBe(core.RESULT_INVALID_ARGUMENT);
- // anotherPipe.handle1 hasn't been closed yet.
- expect(core.close(anotherPipe.handle1)).toBe(core.RESULT_OK);
+ var connection0 = new connection.Connection(
+ pipe.handle0, ProviderImpl, sample_interfaces.ProviderClientProxy);
- // The Connection object is responsible for closing these handles.
- expect(core.close(pipe.handle0)).toBe(core.RESULT_INVALID_ARGUMENT);
- expect(core.close(pipe.handle1)).toBe(core.RESULT_INVALID_ARGUMENT);
+ var connection1 = new connection.Connection(
+ pipe.handle1, ProviderClientImpl, sample_interfaces.ProviderProxy);
- this.result = "PASS";
+ var echoedString;
+
+ // echoString
+
+ connection1.remote.echoString("hello", function(a) {
+ echoedString = a;
+ });
+
+ mockSupport.pumpOnce(core.RESULT_OK);
+
+ expect(echoedString).toBe("hello");
+
+ // echoStrings
+
+ connection1.remote.echoStrings("hello", "world", function(a, b) {
+ echoedString = a + " " + b;
+ });
+
+ mockSupport.pumpOnce(core.RESULT_OK);
+
+ expect(echoedString).toBe("hello world");
+ }
});
« no previous file with comments | « no previous file | mojo/apps/js/bindings/connector_unittests.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698