172 lines
5.5 KiB
JavaScript
Executable File
172 lines
5.5 KiB
JavaScript
Executable File
var should = require('should');
|
|
var sinon = require('sinon');
|
|
var pcsc = require('../lib/pcsclite');
|
|
|
|
describe('Testing PCSCLite private', function() {
|
|
|
|
describe('#start()', function() {
|
|
before(function() {
|
|
this.clock = sinon.useFakeTimers();
|
|
});
|
|
|
|
it('#start() stub', function(done) {
|
|
var self = this;
|
|
var p = pcsc();
|
|
var stub = sinon.stub(p, 'start', function(my_cb) {
|
|
var times = 0;
|
|
setInterval(function() {
|
|
switch (++ times) {
|
|
case 1:
|
|
my_cb(undefined, new Buffer("MyReader\0\0"));
|
|
self.clock.tick(1000);
|
|
break;
|
|
|
|
case 2:
|
|
my_cb(undefined, new Buffer("MyReader"));
|
|
break;
|
|
|
|
case 3:
|
|
my_cb(undefined, new Buffer("MyReader1\0MyReader2\0\0"));
|
|
break;
|
|
}
|
|
}, 1000);
|
|
self.clock.tick(1000);
|
|
});
|
|
|
|
var times = 0;
|
|
p.on('reader', function(reader) {
|
|
reader.close();
|
|
switch (++ times) {
|
|
case 1:
|
|
reader.name.should.equal("MyReader");
|
|
break;
|
|
|
|
case 2:
|
|
reader.name.should.equal("MyReader1");
|
|
break;
|
|
|
|
case 3:
|
|
reader.name.should.equal("MyReader2");
|
|
p.close();
|
|
done();
|
|
break;
|
|
}
|
|
});
|
|
});
|
|
|
|
after(function() {
|
|
this.clock.restore();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Testing CardReader private', function() {
|
|
|
|
var get_reader = function() {
|
|
var p = pcsc();
|
|
var stub = sinon.stub(p, 'start', function(my_cb) {
|
|
/* "MyReader\0" */
|
|
my_cb(undefined, new Buffer("MyReader\0\0"));
|
|
});
|
|
|
|
return p;
|
|
};
|
|
|
|
describe('#_connect()', function() {
|
|
|
|
it('#_connect() success', function(done) {
|
|
var p = get_reader();
|
|
p.on('reader', function(reader) {
|
|
var connect_stub = sinon.stub(reader, '_connect', function(share_mode,
|
|
protocol,
|
|
connect_cb) {
|
|
connect_cb(undefined, 1);
|
|
});
|
|
|
|
reader.connect(function(err, protocol) {
|
|
should.not.exist(err);
|
|
protocol.should.equal(1);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
it('#_connect() error', function() {
|
|
var p = get_reader();
|
|
p.on('reader', function(reader) {
|
|
var cb = sinon.spy();
|
|
var connect_stub = sinon.stub(reader, '_connect', function(share_mode,
|
|
protocol,
|
|
connect_cb) {
|
|
connect_cb("");
|
|
});
|
|
|
|
reader.connect(cb);
|
|
sinon.assert.calledOnce(cb);
|
|
});
|
|
});
|
|
|
|
it('#_connect() already connected', function() {
|
|
var p = get_reader();
|
|
p.on('reader', function(reader) {
|
|
var cb = sinon.spy();
|
|
reader.connected = true;
|
|
|
|
reader.connect(cb);
|
|
process.nextTick(function () {
|
|
sinon.assert.calledOnce(cb);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#_disconnect()', function() {
|
|
|
|
it('#_disconnect() success', function() {
|
|
var p = get_reader();
|
|
p.on('reader', function(reader) {
|
|
reader.connected = true;
|
|
var cb = sinon.spy();
|
|
var connect_stub = sinon.stub(reader, '_disconnect', function(disposition,
|
|
disconnect_cb) {
|
|
disconnect_cb(undefined);
|
|
});
|
|
|
|
reader.disconnect(cb);
|
|
sinon.assert.calledOnce(cb);
|
|
});
|
|
});
|
|
|
|
it('#_disconnect() error', function() {
|
|
var p = get_reader();
|
|
p.on('reader', function(reader) {
|
|
reader.connected = true;
|
|
var cb = sinon.spy();
|
|
var connect_stub = sinon.stub(reader, '_disconnect', function(disposition,
|
|
disconnect_cb) {
|
|
disconnect_cb("");
|
|
});
|
|
|
|
reader.disconnect(cb);
|
|
sinon.assert.calledOnce(cb);
|
|
});
|
|
});
|
|
|
|
it('#_disconnect() already disconnected', function() {
|
|
var p = get_reader();
|
|
p.on('reader', function(reader) {
|
|
var cb = sinon.spy();
|
|
var connect_stub = sinon.stub(reader, '_disconnect', function(disposition,
|
|
disconnect_cb) {
|
|
disconnect_cb(undefined);
|
|
});
|
|
|
|
reader.disconnect(cb);
|
|
process.nextTick(function () {
|
|
sinon.assert.calledOnce(cb);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|