From 74b4fdc7ee471ad9ac477c719fc6ea2dcc5a6019 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Fri, 29 Mar 2013 13:51:28 +0100 Subject: [PATCH] js: Make test suite run on Node.js using faye-websocket --- js/buster.js | 10 +++++++++- js/package.json | 5 +++++ js/src/mopidy.js | 34 ++++++++++++++++++++++++++-------- js/test/mopidy-test.js | 35 ++++++++++++++++++++++++----------- 4 files changed, 64 insertions(+), 20 deletions(-) diff --git a/js/buster.js b/js/buster.js index f789885a..37f41d8a 100644 --- a/js/buster.js +++ b/js/buster.js @@ -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"] +}; diff --git a/js/package.json b/js/package.json index 6638c705..f83c9273 100644 --- a/js/package.json +++ b/js/package.json @@ -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", diff --git a/js/src/mopidy.js b/js/src/mopidy.js index 5a75a836..011aec09 100644 --- a/js/src/mopidy.js +++ b/js/src/mopidy.js @@ -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; +} diff --git a/js/test/mopidy-test.js b/js/test/mopidy-test.js index 8842ebf4..b694fd7e 100644 --- a/js/test/mopidy-test.js +++ b/js/test/mopidy-test.js @@ -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"});