define(["sugar-web/bus"], function (bus) { 'use strict'; describe("bus requests", function () { var client; function MockClient() { this.result = []; this.error = null; } MockClient.prototype.send = function (data) { var that = this; setTimeout(function () { var parsed = JSON.parse(data); var message = { data: JSON.stringify({ result: that.result, error: that.error, id: parsed.id }) }; that.onMessage(message); }, 0); }; MockClient.prototype.close = function () {}; beforeEach(function () { client = new MockClient(); bus.listen(client); }); afterEach(function () { bus.close(); client = null; }); it("should receive a response", function () { var responseReceived; runs(function () { responseReceived = false; function onResponseReceived(error, result) { expect(error).toBeNull(); expect(result).toEqual(["hello"]); responseReceived = true; } client.result = ["hello"]; bus.sendMessage("hello", [], onResponseReceived); }); waitsFor(function () { return responseReceived; }, "a response should be received"); }); it("should receive an error", function () { var errorReceived; runs(function () { errorReceived = false; function onResponseReceived(error, result) { expect(error).toEqual(jasmine.any(Error)); expect(result).toBeNull(); errorReceived = true; } client.result = null; client.error = new Error("error"); bus.sendMessage("hello", [], onResponseReceived); }); waitsFor(function () { return errorReceived; }, "an error should be received"); }); }); describe("bus notifications", function () { var client; function MockClient() { this.params = null; } MockClient.prototype.send_notification = function (method, params) { var that = this; setTimeout(function () { var message = { data: JSON.stringify({ method: method, params: that.params }) }; that.onMessage(message); }, 0); }; MockClient.prototype.close = function () {}; beforeEach(function () { client = new MockClient(); bus.listen(client); }); afterEach(function () { bus.close(); client = null; }); it("should receive a notification", function () { var notificationReceived; var notificationParams; var originalParams = { param1: true, param2: "foo" }; runs(function () { notificationReceived = false; notificationParams = null; function onNotificationReceived(params) { notificationReceived = true; notificationParams = params; } bus.onNotification("hey.there", onNotificationReceived); client.params = originalParams; client.send_notification("hey.there"); }); waitsFor(function () { return notificationReceived; }, "a notification should be received"); runs(function () { expect(notificationParams).toEqual(originalParams); }); }); }); });