/// /// import tsd = require('../typescript_deferred'); import assert = require('assert'); suite('typescript-deferred::Deferred', function() { this.timeout(100); suite('multiple resolutions / rejects: the first one wins', function() { var rejectCalled: number, resolveCalled: number, reason: string, value: string, deferred: tsd.DeferredInterface; setup(function() { rejectCalled = resolveCalled = 0; reason = value = ''; deferred = tsd.create(); deferred.promise.then( (v: string) => (value = v, resolveCalled++), (r: string) => (reason = r, rejectCalled++) ); }); test('double resolve', function(done) { deferred.resolve('foo').resolve('bar'); setTimeout( function(): void { try { assert.strictEqual(rejectCalled, 0, 'reject should not have been called'); assert.strictEqual(resolveCalled, 1, 'resolve should have been called once'); assert.strictEqual(value, 'foo', 'the first resolve should have won'); } catch (e) { return done(e); } done(); }, 50 ); }); test('resolve, reject', function(done) { deferred.resolve('foo').reject('bar'); setTimeout( function(): void { try { assert.strictEqual(rejectCalled, 0, 'reject should not have been called'); assert.strictEqual(resolveCalled, 1, 'resolve should have been called once'); assert.strictEqual(value, 'foo', 'resolve should have won'); } catch (e) { return done(e); } done(); }, 50 ); }); test('reject, resolve', function(done) { deferred.reject('foo').resolve('bar'); setTimeout( function(): void { try { assert.strictEqual(rejectCalled, 1, 'reject should have been called once'); assert.strictEqual(resolveCalled, 0, 'resolve should not have been called'); assert.strictEqual(reason, 'foo', 'reject should have won'); } catch (e) { return done(e); } done(); }, 50 ); }); test('double reject', function(done) { deferred.reject('foo').reject('bar'); setTimeout( function(): void { try { assert.strictEqual(rejectCalled, 1, 'reject should have been called once'); assert.strictEqual(resolveCalled, 0, 'resolve should not have been called'); assert.strictEqual(reason, 'foo', 'the first reject should have won'); } catch (e) { return done(e); } done(); }, 50 ); }); }); });