var Promise = require('../Promise');

describe('Promise', function() {
	describe('Promise._setImmediateFn', function() {
		it('changes immediate fn', function() {
			var spy = jasmine.createSpy('callback').and.callFake(function(fn) {
				fn();
			});
			Promise._setImmediateFn(spy);
			var done = false,
				a = new Promise(function(resolve, reject) {
				resolve();
			}).then(function() {
				done = true;
			});
			expect(spy).toHaveBeenCalled();
			expect(done).toBe(true);
		});
		it('changes immediate fn multiple', function() {
			var spy1 = jasmine.createSpy('callback').and.callFake(function(fn) {
				fn();
			});
			var spy2 = jasmine.createSpy('callback').and.callFake(function(fn) {
				fn();
			});
			Promise._setImmediateFn(spy1);
			var done = false,
				a = new Promise(function(resolve, reject) {
				resolve();
			}).then(function() {});
			Promise._setImmediateFn(spy2);

			a = new Promise(function(resolve, reject) {
				resolve();
			}).then(function() {
				done = true;
			});
			expect(spy2).toHaveBeenCalled();
			expect(spy1.calls.count()).toBe(1);
			expect(done).toBe(true);
		});
	});
});