Revision d7c10cbac3dc5208661a12289b33d626321a502e authored by Valeri Karpov on 23 December 2015, 21:58:19 UTC, committed by Valeri Karpov on 23 December 2015, 21:58:19 UTC
1 parent 1b44616
Raw File
promise.test.js

/**
 * Module dependencies.
 */

var assert = require('assert');

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

/**
 * Test.
 */

describe('Promise', function() {
  it('events fire right after complete()', function(done) {
    var promise = new Promise()
      , called = 0;

    promise.on('fulfill', function(a, b) {
      assert.equal(a, '1');
      assert.equal(b, '2');
      called++;
    });

    promise.complete('1', '2');

    promise.on('fulfill', function(a, b) {
      assert.equal(a, '1');
      assert.equal(b, '2');
      called++;
    });

    assert.equal(2, called);
    done();
  });

  it('events fire right after error()', function(done) {
    var promise = new Promise()
      , called = 0;

    promise.on('reject', function(err) {
      assert.ok(err instanceof Error);
      called++;
    });

    promise.error('booyah');

    promise.on('reject', function(err) {
      assert.ok(err instanceof Error);
      called++;
    });

    assert.equal(2, called);
    done();
  });

  it('events fire right after reject()', function(done) {
    var promise = new Promise()
      , called = 0;

    promise.on('reject', function(err) {
      assert.equal(9, err);
      called++;
    });

    promise.reject(9);

    promise.on('reject', function(err) {
      assert.equal(9, err);
      called++;
    });

    assert.equal(2, called);
    done();
  });

  describe('onResolve()', function() {
    it('from constructor works', function(done) {
      var called = 0;

      var promise = new Promise(function(err) {
        assert.ok(err instanceof Error);
        called++;
      });

      promise.reject(new Error('dawg'));

      assert.equal(1, called);
      done();
    });

    it('after fulfill()', function(done) {
      var promise = new Promise()
        , called = 0;

      promise.fulfill('woot');

      promise.onResolve(function(err, data) {
        assert.equal(data,'woot');
        called++;
      });

      promise.onResolve(function(err) {
        assert.strictEqual(err, null);
        called++;
      });

      assert.equal(2, called);
      done();
    });

    it('after error()', function(done) {
      var promise = new Promise()
        , called = 0;

      promise.error(new Error('woot'));

      promise.onResolve(function(err) {
        assert.ok(err instanceof Error);
        called++;
      });

      promise.onResolve(function(err) {
        assert.ok(err instanceof Error);
        called++;
      });
      assert.equal(2, called);
      done();
    });
  });

  describe('onFulfill() shortcut', function() {
    it('works', function(done) {
      var promise = new Promise()
        , called = 0;

      promise.onFulfill(function(woot) {
        assert.strictEqual(woot, undefined);
        called++;
      });

      promise.fulfill();

      assert.equal(1, called);
      done();
    });
  });

  describe('onReject shortcut', function() {
    it('works', function(done) {
      var promise = new Promise()
        , called = 0;

      promise.onReject(function(err) {
        assert.ok(err instanceof Error);
        called++;
      });

      promise.reject(new Error);
      assert.equal(1, called);
      done();
    });
  });

  describe('return values', function() {
    it('on()', function(done) {
      var promise = new Promise();
      assert.ok(promise.on('jump', function() {}) instanceof Promise);
      done();
    });

    it('onFulfill()', function(done) {
      var promise = new Promise();
      assert.ok(promise.onFulfill(function() {}) instanceof Promise);
      done();
    });
    it('onReject()', function(done) {
      var promise = new Promise();
      assert.ok(promise.onReject(function() {}) instanceof Promise);
      done();
    });
    it('onResolve()', function(done) {
      var promise = new Promise();
      assert.ok(promise.onResolve(function() {}) instanceof Promise);
      done();
    });
  });

  describe('casting errors', function() {
    describe('error()', function() {
      it('casts arguments to Error', function(done) {
        var p = new Promise(function(err) {
          assert.ok(err instanceof Error);
          assert.equal('3', err.message);
          done();
        });

        p.error(3);
      });
    });

    describe('reject()', function() {
      it('does not cast arguments to Error', function(done) {
        var p = new Promise(function(err) {
          assert.equal(3, err);
          done();
        });

        p.reject(3);
      });
    });
  });

  it('doesnt swallow exceptions (gh-3222)', function(done) {
    assert.throws(function() {
      new Promise.ES6(function() {
        throw 'bacon';
      });
    });
    done();
  });
});
back to top