fics
Version:
A promise-based interface for the Free Internet Chess Server
92 lines (63 loc) • 2.15 kB
JavaScript
var net = require("net");
var path = require("path");
var EventEmitter = require("events").EventEmitter;
var Readable = require("stream").Readable;
var _ = require("underscore");
var sinon = require("sinon");
var FICSClient = require(path.join(__filename, "..", "..", ".."));
var MockSocket = require("./mock_socket");
exports.testClientCanBeCreated = function(test) {
var mockConnection = sinon.mock(net);
mockConnection.expects("connect")
.withExactArgs({ host: "freechess.org", port: 5000 })
.returns({ on: function() { } });
new FICSClient();
mockConnection.verify();
mockConnection.restore();
test.done();
};
exports.testClientIsAnEmitter = function(test) {
var mockSocket = new MockSocket(test);
var fics = new FICSClient();
test.ok(fics instanceof EventEmitter);
fics.on("foo", function() {
mockSocket.close();
});
// force private socket to emit an event
fics.socket.emit("foo");
};
exports.testGetStream = function(test) {
var mockSocket = new MockSocket(test);
mockSocket.registerFixture("login_screen");
var fics = new FICSClient();
var stream = fics.getStream();
test.ok(stream instanceof Readable);
stream.on("data", function(data) {
mockSocket.close();
});
mockSocket.run();
};
exports.testClose = function(test) {
var mockStream = sinon.mock({ on: function() { }, removeAllListeners: function() { }, end: function() { } });
mockStream.expects("removeAllListeners").once().returns(mockStream.object);
mockStream.expects("end").once()
var mockConnection = sinon.mock(net);
mockConnection.expects("connect").returns(mockStream.object);
(new FICSClient()).end();
mockStream.verify();
mockConnection.restore();
test.done();
};
exports.testLinesFunction = function(test) {
var client = new FICSClient();
var socket = client.socket;
var listenerCount = 25;
var deffereds = _.map(Array(listenerCount), function(n) {
return _.tap(client.lines(_.noop), function() {
test.equal(1, socket.listeners("data").length);
});
});
_.invoke(deffereds, "resolve");
client.end();
test.done();
};