Skip to content
This repository has been archived by the owner on Aug 12, 2017. It is now read-only.

Commit

Permalink
Test: Reference blessObject/extendConstructor directly
Browse files Browse the repository at this point in the history
  • Loading branch information
novemberborn committed Mar 19, 2014
1 parent d6333bc commit b87d9ea
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 25 deletions.
9 changes: 5 additions & 4 deletions test/promise-races-test.js
Expand Up @@ -4,8 +4,9 @@ var assert = require('chai').assert;
var sentinels = require('chai-sentinels');

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

var main = require('../');
function SubPromise(executor) {
if (typeof executor !== 'function') {
throw new TypeError();
Expand All @@ -15,11 +16,11 @@ function SubPromise(executor) {
return new SubPromise(executor);
}

if (executor !== main.blessObject) {
main.blessObject(this, executor, true);
if (executor !== blessObject) {
blessObject(this, executor, true);
}
}
main.extendConstructor(SubPromise, Promise);
extendConstructor(SubPromise, Promise);

describe('Promise.all(input)', function() {
it('returns a promise of the same subclass', function() {
Expand Down
9 changes: 5 additions & 4 deletions test/promise-sugar-test.js
Expand Up @@ -6,8 +6,9 @@ var sentinels = require('chai-sentinels');

var Promise = require('../').Promise;
var CancellationError = require('../').CancellationError;
var blessObject = require('../').blessObject;
var extendConstructor = require('../').extendConstructor;

var main = require('../');
function SubPromise(executor) {
if (typeof executor !== 'function') {
throw new TypeError();
Expand All @@ -17,11 +18,11 @@ function SubPromise(executor) {
return new SubPromise(executor);
}

if (executor !== main.blessObject) {
main.blessObject(this, executor, true);
if (executor !== blessObject) {
blessObject(this, executor, true);
}
}
main.extendConstructor(SubPromise, Promise);
extendConstructor(SubPromise, Promise);

var slice = [].slice;

Expand Down
9 changes: 5 additions & 4 deletions test/series-test.js
Expand Up @@ -8,8 +8,9 @@ var Promise = require('../').Promise;
var Series = require('../').Series;
var CancellationError = require('../').CancellationError;
var delay = require('../').timed.delay;
var blessObject = require('../').blessObject;
var extendConstructor = require('../').extendConstructor;

var main = require('../');
function SubSeries(executor) {
if (typeof executor !== 'function') {
throw new TypeError();
Expand All @@ -19,11 +20,11 @@ function SubSeries(executor) {
return new SubSeries(executor);
}

if (executor !== main.blessObject) {
main.blessObject(this, executor, true);
if (executor !== blessObject) {
blessObject(this, executor, true);
}
}
main.extendConstructor(SubSeries, Series);
extendConstructor(SubSeries, Series);

function identity(x) { return x; }
function thrower(x) { throw x; }
Expand Down
27 changes: 14 additions & 13 deletions test/subclassing-test.js
Expand Up @@ -3,8 +3,9 @@
var assert = require('chai').assert;
var sentinels = require('chai-sentinels');

var main = require('../');
var Promise = require('../').Promise;
var blessObject = require('../').blessObject;
var extendConstructor = require('../').extendConstructor;

function SubPromise(executor) {
if (typeof executor !== 'function') {
Expand All @@ -15,11 +16,11 @@ function SubPromise(executor) {
return new SubPromise(executor);
}

if (executor !== main.blessObject) {
main.blessObject(this, executor);
if (executor !== blessObject) {
blessObject(this, executor);
}
}
SubPromise.prototype = new Promise(main.blessObject);
SubPromise.prototype = new Promise(blessObject);
SubPromise.prototype.constructor = SubPromise;

function defer(constructor) {
Expand Down Expand Up @@ -88,9 +89,9 @@ describe('Subclassing', function() {
});

describe('can be configured to return a different subclass', function() {
var OtherPromise = main.extendConstructor(function(executor) {
if (executor !== main.blessObject) {
main.blessObject(this, executor, true, SubPromise);
var OtherPromise = extendConstructor(function(executor) {
if (executor !== blessObject) {
blessObject(this, executor, true, SubPromise);
}
});

Expand Down Expand Up @@ -146,17 +147,17 @@ describe('Subclassing', function() {

describe('main.extendObject helper', function() {
it('sets up inheritance', function() {
var Extended = main.extendConstructor(function() {});
var Extended = extendConstructor(function() {});
assert.instanceOf(new Extended(), Promise);
});

it('keeps the constructor reference intact', function() {
var Extended = main.extendConstructor(function() {});
var Extended = extendConstructor(function() {});
assert.strictEqual(new Extended().constructor, Extended);
});

it('copies constructor methods from Promise', function() {
var Extended = main.extendConstructor(function() {});
var Extended = extendConstructor(function() {});
assert.strictEqual(Extended.from, Promise.from);
assert.strictEqual(Extended.rejected, Promise.rejected);
assert.strictEqual(Extended.all, Promise.all);
Expand All @@ -166,14 +167,14 @@ describe('Subclassing', function() {
});

it('sets up an `isInstance()` helper', function() {
var Extended = main.extendConstructor(function() {});
var Extended = extendConstructor(function() {});
assert.isTrue(Extended.isInstance(new Extended()));
assert.isFalse(Extended.isInstance(Promise.from()));
});

it('takes a base class argument', function() {
var Base = main.extendConstructor(function() {});
var Extended = main.extendConstructor(function() {}, Base);
var Base = extendConstructor(function() {});
var Extended = extendConstructor(function() {}, Base);
assert.instanceOf(new Extended(), Promise);
assert.instanceOf(new Extended(), Base);
});
Expand Down

0 comments on commit b87d9ea

Please sign in to comment.