suite('SocketQueue', function() {
	setup(function(){
		wdi.Debug.debug = false; //disable debugging, it slows tests
	});
	
	suite('#connect()', function() {
		setup(function() {
			this.socket = new wdi.Socket();
			this.mock = sinon.mock(this.socket);
			this.expectation = this.mock.expects('connect').once();
			this.socketQ = new wdi.SocketQueue({socket: this.socket});
		});
		
		test('Should call method connect from socket', function() {
			this.socketQ.connect('ws://localhost');
			this.expectation.verify();
		});
		
		teardown(function() {
			this.mock.restore();
		});
	});
	
	suite('#disconnect()', function() {
		setup(function() {
			this.socket = new wdi.Socket();
			this.mock = sinon.mock(this.socket);
			this.expectation = this.mock.expects('disconnect').once();
			this.socketQ = new wdi.SocketQueue({socket: this.socket});
		});
		
		test('Should call method disconnect from socket', function() {
			this.socketQ.disconnect();
			this.expectation.verify();
		});
		
		teardown(function() {
			this.mock.restore();
		});
	});
	
	suite('#getStatus()', function() {
		setup(function() {
			this.socket = new wdi.Socket();
			this.mock = sinon.mock(this.socket);
			this.expectation = this.mock.expects('getStatus').once();
			this.socketQ = new wdi.SocketQueue({socket:this.socket});
		});
		
		test('Should call method getStatus from socket', function() {
			this.socketQ.getStatus();
			this.expectation.verify();
		});
		
		teardown(function() {
			this.mock.restore();
		});
	});
	
	suite('#send()', function() {
		setup(function() {
			this.queue = new wdi.Queue();
			this.mock = sinon.mock(this.queue);
			this.expectation = this.mock.expects('push').once();
			this.socketQ = new wdi.SocketQueue({sQ:this.queue});
			this.socketQ.connect('ws://localhost');
		});
		
		test('Should call send queue push on send(data, false)', function() {
			this.socketQ.send([0x23], false);
			this.expectation.verify();
		});
		
		teardown(function() {
			this.mock.restore();
		});
	});
	
	suite('#flush()', function() {
		setup(function() {
			this.socket = new wdi.Socket();
			this.mock = sinon.mock(this.socket);
			this.expectation = this.mock.expects('send').once();
			this.socketQ = new wdi.SocketQueue({socket: this.socket});
			this.socketQ.connect('ws://localhost');
		});
		
		test('Should call socket send', function() {
			this.socketQ.flush();
			this.expectation.verify();
		});
		
		teardown(function() {
			this.mock.restore();
		});
	});
});