text: 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);
              });
          });
      });
  });
  