fics
Version:
A promise-based interface for the Free Internet Chess Server
204 lines (168 loc) • 6.58 kB
JavaScript
var path = require("path");
var Q = require("q");
var FICSClient = require(path.join(__filename, "..", "..", ".."));
var MockSocket = require("./mock_socket");
exports.testGames = function(test) {
var mockSocket = new MockSocket(test);
mockSocket.registerMessage("games");
mockSocket.registerFixture("games");
var fics = new FICSClient();
fics.games().then(function(games) {
test.equal(318, games.length);
mockSocket.close();
});
};
exports.testObserve = function(test) {
var mockSocket = new MockSocket(test);
mockSocket.registerMessage("observe 47");
mockSocket.registerFixture("observation");
var fics = new FICSClient();
var notifications =
[
{ white: { name: "CANABLANCA", rating: "1776" }
, black: { name: "GriffySr", rating: "2094" }
, rated: true
, type: "blitz"
, time: { initial: "5", increment: "0" }
}
, { position: "8/1p1Q1pkp/pq1p2p1/5r2/P1p2P2/1P5P/6P1/1R5K"
, current: { color: "W", move: "35" }
, time: { white: "158", black: "296" }
, move: { verbose: "R/e5-f5", algebraic: "Rf5" } }
, { position: "8/1p1Q1pkp/pq1p2p1/5r2/P1p2P2/1P5P/6P1/3R3K"
, current: { color: "B", move: "35" }
, time: { white: "153", black: "296" }
, move: { verbose: "R/b1-d1", algebraic: "Rd1" } }
, { position: "8/1p1Q1pkp/p2p2p1/5r2/P1p2P2/1q5P/6P1/3R3K"
, current: { color: "W", move: "36" }
, time: { white: "153", black: "296" }
, move: { verbose: "Q/b6-b3", algebraic: "Qxb3" } }
, { user: "GriffySr(C)(2094)"
, message: "ply=4; eval=-3.74; nps=14K; time=0.12; egtb=0"
, type: "whisper" }
, { position: "8/1p1Q1pkp/p2R2p1/5r2/P1p2P2/1q5P/6P1/7K"
, current: { color: "B", move: "36" }
, time: { white: "151", black: "296" }
, move: { verbose: "R/d1-d6", algebraic: "Rxd6" } }
, { position: "8/1p1Q1pkp/p2R2p1/8/P1p2r2/1q5P/6P1/7K"
, current: { color: "W", move: "37" }
, time: { white: "151", black: "296" }
, move: { verbose: "R/f5-f4", algebraic: "Rxf4" } }
, { user: "GriffySr(C)(2094)"
, message: "ply=4; eval=-4.19; nps=15K; time=0.14; egtb=0"
, type: "whisper" }
, { position: "4Q3/1p3pkp/p2R2p1/8/P1p2r2/1q5P/6P1/7K"
, current: { color: "B", move: "37" }
, time: { white: "133", black: "296" }
, move: { verbose: "Q/d7-e8", algebraic: "Qe8" } }
, { position: "4Q3/1p3pkp/p2R2p1/8/P1p2r2/7P/6P1/1q5K"
, current: { color: "W", move: "38" }
, time: { white: "133", black: "296" }
, move: { verbose: "Q/b3-b1", algebraic: "Qb1+" } }
, { user: "GriffySr(C)(2094)"
, message: "ply=4; eval=-4.22; nps=43K; time=0.07; egtb=0"
, type: "whisper" }
, { position: "4Q3/1p3pkp/p2R2p1/8/P1p2r2/7P/6PK/1q6"
, current: { color: "B", move: "38" }
, time: { white: "132", black: "296" }
, move: { verbose: "K/h1-h2", algebraic: "Kh2" } }
, { position: "4Q3/1p3pkp/p2R2p1/8/P1p1qr2/7P/6PK/8"
, current: { color: "W", move: "39" }
, time: { white: "132", black: "295" }
, move: { verbose: "Q/b1-e4", algebraic: "Qe4" } }
, { user: "GriffySr(C)(2094)"
, message: "ply=4; eval=-4.33; nps=26K; time=0.06; egtb=0"
, type: "whisper" }
, { position: "2Q5/1p3pkp/p2R2p1/8/P1p1qr2/7P/6PK/8"
, current: { color: "B", move: "39" }
, time: { white: "117", black: "295" }
, move: { verbose: "Q/e8-c8", algebraic: "Qc8" } }
, { position: "2Q5/1p3pkp/p2R2p1/4q3/P1p2r2/7P/6PK/8"
, current: { color: "W", move: "40" }
, time: { white: "117", black: "295" }
, move: { verbose: "Q/e4-e5", algebraic: "Qe5" } }
, { user: "GriffySr(C)(2094)"
, message: "ply=4; eval=-10.05; nps=33K; time=0.15; egtb=0"
, type: "whisper" }
, { position: "2Q5/1p3pkp/p5p1/4q3/P1p2r2/7P/3R2PK/8"
, current: { color: "B", move: "40" }
, time: { white: "102", black: "295" }
, move: { verbose: "R/d6-d2", algebraic: "Rd2" } }
, { position: "2Q5/1p3pkp/p5p1/4q3/P1p5/5r1P/3R2PK/8"
, current: { color: "W", move: "41" }
, time: { white: "102", black: "295" }
, move: { verbose: "R/f4-f3", algebraic: "Rf3+" } }
, { user: "GriffySr(C)(2094)"
, message: "ply=4; eval=-11.31; nps=53K; time=0.08; egtb=0"
, type: "whisper" }
, { result: "0-1" }
];
fics.observe(47).progress(function(data) {
test.deepEqual(notifications.shift(), data);
}).then(function(result) {
mockSocket.close();
});
};
exports.testObservingMultipleGames = function(test) {
var mockSocket = new MockSocket(test);
mockSocket.registerMessages(["observe 47", "observe 8"]);
var fics = new FICSClient();
Q.all([fics.observe("47"), fics.observe("8")]).then(function(results) {
test.equal(2, results.length);
mockSocket.close();
});
mockSocket.registerFixture("observation");
mockSocket.run();
};
exports.testMoves = function(test) {
var mockSocket = new MockSocket(test);
mockSocket.registerFixture("moves");
mockSocket.registerMessage("moves 93");
var fics = new FICSClient();
fics.moves("93").then(function(moves) {
test.equal(16, moves.length);
test.equal(2, moves[14].length);
test.equal(1, moves[15].length);
mockSocket.close();
});
};
exports.testObservers = function(test) {
var mockSocket = new MockSocket(test);
mockSocket.registerFixture("observers");
mockSocket.registerMessage("allobservers 93");
var fics = new FICSClient();
fics.observers("93").then(function(observers) {
test.equal(6, observers.length);
mockSocket.close();
});
};
exports.testKibitz = function(test) {
var mockSocket = new MockSocket(test);
mockSocket.registerFixture("kibitz");
mockSocket.registerMessage("xkibitz 85 test");
var fics = new FICSClient();
fics.kibitz("85", "test").then(function(success) {
test.ok(success);
mockSocket.close();
});
};
exports.testUnobserveSuccess = function(test) {
var mockSocket = new MockSocket(test);
mockSocket.registerFixture("unobserve_success");
mockSocket.registerMessage("unobserve 433");
var fics = new FICSClient();
fics.unobserve("433").then(function(success) {
test.ok(success);
mockSocket.close();
});
};
exports.testUnobserveFailure = function(test) {
var mockSocket = new MockSocket(test);
mockSocket.registerFixture("unobserve_failure");
mockSocket.registerMessage("unobserve 433");
var fics = new FICSClient();
fics.unobserve("433").then(function(success) {
test.ok(!success);
mockSocket.close();
});
};