js: Make test suite run on Node.js using faye-websocket

This commit is contained in:
Stein Magnus Jodal 2013-03-29 13:51:28 +01:00
parent 5e29647897
commit 74b4fdc7ee
4 changed files with 64 additions and 20 deletions

View File

@ -1,9 +1,17 @@
var config = module.exports;
config["tests"] = {
config.browser_tests = {
environment: "browser",
libs: ["lib/**/*.js"],
sources: ["src/**/*.js"],
testHelpers: ["test/**/*-helper.js"],
tests: ["test/**/*-test.js"]
};
config.node_tests = {
environment: "node",
libs: ["lib/**/*.js"],
sources: ["src/**/*.js"],
testHelpers: ["test/**/*-helper.js"],
tests: ["test/**/*-test.js"]
};

View File

@ -1,6 +1,11 @@
{
"name": "mopidy",
"version": "0.0.0",
"dependencies": {
"bane": "~0.4.0",
"faye-websocket": "~0.4.4",
"when": "~1.8.1"
},
"devDependencies": {
"buster": "~0.6.12",
"grunt": "~0.4.0",

View File

@ -1,4 +1,10 @@
/*global bane:false, when:false*/
/*global exports:false, require:false*/
if (typeof module === "object" && typeof require === "function") {
var bane = require("bane");
var websocket = require("faye-websocket");
var when = require("when");
}
function Mopidy(settings) {
if (!(this instanceof Mopidy)) {
@ -20,9 +26,17 @@ function Mopidy(settings) {
}
}
if (typeof module === "object" && typeof require === "function") {
Mopidy.WebSocket = websocket.Client;
} else {
Mopidy.WebSocket = window.WebSocket;
}
Mopidy.prototype._configure = function (settings) {
var currentHost = (typeof document !== "undefined" &&
document.location.host) || "localhost";
settings.webSocketUrl = settings.webSocketUrl ||
"ws://" + document.location.host + "/mopidy/ws/";
"ws://" + currentHost + "/mopidy/ws/";
if (settings.autoConnect !== false) {
settings.autoConnect = true;
@ -35,7 +49,7 @@ Mopidy.prototype._configure = function (settings) {
};
Mopidy.prototype._getConsole = function () {
var console = window.console || {};
var console = typeof console !== "undefined" && console || {};
console.log = console.log || function () {};
console.warn = console.warn || function () {};
@ -63,7 +77,7 @@ Mopidy.prototype._delegateEvents = function () {
Mopidy.prototype.connect = function () {
if (this._webSocket) {
if (this._webSocket.readyState === WebSocket.OPEN) {
if (this._webSocket.readyState === Mopidy.WebSocket.OPEN) {
return;
} else {
this._webSocket.close();
@ -71,7 +85,7 @@ Mopidy.prototype.connect = function () {
}
this._webSocket = this._settings.webSocket ||
new WebSocket(this._settings.webSocketUrl);
new Mopidy.WebSocket(this._settings.webSocketUrl);
this._webSocket.onclose = function (close) {
this.emit("websocket:close", close);
@ -136,17 +150,17 @@ Mopidy.prototype._send = function (message) {
var deferred = when.defer();
switch (this._webSocket.readyState) {
case WebSocket.CONNECTING:
case Mopidy.WebSocket.CONNECTING:
deferred.resolver.reject({
message: "WebSocket is still connecting"
});
break;
case WebSocket.CLOSING:
case Mopidy.WebSocket.CLOSING:
deferred.resolver.reject({
message: "WebSocket is closing"
});
break;
case WebSocket.CLOSED:
case Mopidy.WebSocket.CLOSED:
deferred.resolver.reject({
message: "WebSocket is closed"
});
@ -280,3 +294,7 @@ Mopidy.prototype._snakeToCamel = function (name) {
return match.toUpperCase().replace("_", "");
});
};
if (typeof exports === "object") {
exports.Mopidy = Mopidy;
}

View File

@ -1,4 +1,10 @@
/*global buster:false, assert:false, refute:false, when:false, Mopidy:false*/
/*global require:false, assert:false, refute:false*/
if (typeof module === "object" && typeof require === "function") {
var buster = require("buster");
var Mopidy = require("../src/mopidy").Mopidy;
var when = require("when");
}
buster.testCase("Mopidy", {
setUp: function () {
@ -14,10 +20,11 @@ buster.testCase("Mopidy", {
fakeWebSocket.OPEN = 1;
fakeWebSocket.CLOSING = 2;
fakeWebSocket.CLOSED = 3;
this.realWebSocket = WebSocket;
window.WebSocket = fakeWebSocket;
this.webSocketConstructorStub = this.stub(window, "WebSocket");
this.realWebSocket = Mopidy.WebSocket;
Mopidy.WebSocket = fakeWebSocket;
this.webSocketConstructorStub = this.stub(Mopidy, "WebSocket");
this.webSocket = {
close: this.stub(),
@ -27,15 +34,18 @@ buster.testCase("Mopidy", {
},
tearDown: function () {
window.WebSocket = this.realWebSocket;
Mopidy.WebSocket = this.realWebSocket;
},
"constructor": {
"connects when autoConnect is true": function () {
new Mopidy({autoConnect: true});
var currentHost = typeof document !== "undefined" &&
document.location.host || "localhost";
assert.calledOnceWith(this.webSocketConstructorStub,
"ws://" + document.location.host + "/mopidy/ws/");
"ws://" + currentHost + "/mopidy/ws/");
},
"does not connect when autoConnect is false": function () {
@ -67,12 +77,15 @@ buster.testCase("Mopidy", {
mopidy.connect();
var currentHost = typeof document !== "undefined" &&
document.location.host || "localhost";
assert.calledOnceWith(this.webSocketConstructorStub,
"ws://" + document.location.host + "/mopidy/ws/");
"ws://" + currentHost + "/mopidy/ws/");
},
"does nothing when the WebSocket is open": function () {
this.webSocket.readyState = WebSocket.OPEN;
this.webSocket.readyState = Mopidy.WebSocket.OPEN;
var mopidy = new Mopidy({webSocket: this.webSocket});
mopidy.connect();
@ -367,7 +380,7 @@ buster.testCase("Mopidy", {
},
"immediately rejects request if CONNECTING": function (done) {
this.mopidy._webSocket.readyState = WebSocket.CONNECTING;
this.mopidy._webSocket.readyState = Mopidy.WebSocket.CONNECTING;
var promise = this.mopidy._send({method: "foo"});
@ -381,7 +394,7 @@ buster.testCase("Mopidy", {
},
"immediately rejects request if CLOSING": function (done) {
this.mopidy._webSocket.readyState = WebSocket.CLOSING;
this.mopidy._webSocket.readyState = Mopidy.WebSocket.CLOSING;
var promise = this.mopidy._send({method: "foo"});
@ -395,7 +408,7 @@ buster.testCase("Mopidy", {
},
"immediately rejects request if CLOSED": function (done) {
this.mopidy._webSocket.readyState = WebSocket.CLOSED;
this.mopidy._webSocket.readyState = Mopidy.WebSocket.CLOSED;
var promise = this.mopidy._send({method: "foo"});