-
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
122 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
version: ~> 1.0 | ||
language: node_js | ||
os: | ||
- linux | ||
import: | ||
- ljharb/travis-ci:node/all.yml | ||
- ljharb/travis-ci:node/pretest.yml | ||
- ljharb/travis-ci:node/posttest.yml | ||
- ljharb/travis-ci:node/coverage.yml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
'use strict'; | ||
|
||
var test = require('tape'); | ||
|
||
var callBound = require('../callBound'); | ||
|
||
test('callBound', function (t) { | ||
// static primitive | ||
t.equal(callBound('Array.length'), Array.length, 'Array.length yields itself'); | ||
t.equal(callBound('%Array.length%'), Array.length, '%Array.length% yields itself'); | ||
|
||
// static non-function object | ||
t.equal(callBound('Array.prototype'), Array.prototype, 'Array.prototype yields itself'); | ||
t.equal(callBound('%Array.prototype%'), Array.prototype, '%Array.prototype% yields itself'); | ||
t.equal(callBound('Array.constructor'), Array.constructor, 'Array.constructor yields itself'); | ||
t.equal(callBound('%Array.constructor%'), Array.constructor, '%Array.constructor% yields itself'); | ||
|
||
// static function | ||
t.equal(callBound('Date.parse'), Date.parse, 'Date.parse yields itself'); | ||
t.equal(callBound('%Date.parse%'), Date.parse, '%Date.parse% yields itself'); | ||
|
||
// prototype primitive | ||
t.equal(callBound('Error.prototype.message'), Error.prototype.message, 'Error.prototype.message yields itself'); | ||
t.equal(callBound('%Error.prototype.message%'), Error.prototype.message, '%Error.prototype.message% yields itself'); | ||
|
||
// prototype function | ||
t.notEqual(callBound('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString does not yield itself'); | ||
t.notEqual(callBound('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% does not yield itself'); | ||
t.equal(callBound('Object.prototype.toString')(true), Object.prototype.toString.call(true), 'call-bound Object.prototype.toString calls into the original'); | ||
t.equal(callBound('%Object.prototype.toString%')(true), Object.prototype.toString.call(true), 'call-bound %Object.prototype.toString% calls into the original'); | ||
|
||
t['throws']( | ||
function () { callBound('does not exist'); }, | ||
SyntaxError, | ||
'nonexistent intrinsic throws' | ||
); | ||
t['throws']( | ||
function () { callBound('does not exist', true); }, | ||
SyntaxError, | ||
'allowMissing arg still throws for unknown intrinsic' | ||
); | ||
|
||
/* globals WeakRef: false */ | ||
t.test('real but absent intrinsic', { skip: typeof WeakRef !== 'undefined' }, function (st) { | ||
st['throws']( | ||
function () { callBound('WeakRef'); }, | ||
TypeError, | ||
'real but absent intrinsic throws' | ||
); | ||
st.equal(callBound('WeakRef', true), undefined, 'allowMissing arg avoids exception'); | ||
st.end(); | ||
}); | ||
|
||
t.end(); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
'use strict'; | ||
|
||
var callBind = require('../'); | ||
|
||
var test = require('tape'); | ||
|
||
test('callBind', function (t) { | ||
var sentinel = { sentinel: true }; | ||
var func = function (a, b) { | ||
// eslint-disable-next-line no-invalid-this | ||
return [this, a, b]; | ||
}; | ||
t.deepEqual(func(), [undefined, undefined, undefined], 'unbound func with too few args'); | ||
t.deepEqual(func(1, 2), [undefined, 1, 2], 'unbound func with right args'); | ||
t.deepEqual(func(1, 2, 3), [undefined, 1, 2], 'unbound func with too many args'); | ||
|
||
var bound = callBind(func); | ||
t.deepEqual(bound(), [undefined, undefined, undefined], 'bound func with too few args'); | ||
t.deepEqual(bound(1, 2), [1, 2, undefined], 'bound func with right args'); | ||
t.deepEqual(bound(1, 2, 3), [1, 2, 3], 'bound func with too many args'); | ||
|
||
var boundR = callBind(func, sentinel); | ||
t.deepEqual(boundR(), [sentinel, undefined, undefined], 'bound func with receiver, with too few args'); | ||
t.deepEqual(boundR(1, 2), [sentinel, 1, 2], 'bound func with receiver, with right args'); | ||
t.deepEqual(boundR(1, 2, 3), [sentinel, 1, 2], 'bound func with receiver, with too many args'); | ||
|
||
var boundArg = callBind(func, sentinel, 1); | ||
t.deepEqual(boundArg(), [sentinel, 1, undefined], 'bound func with receiver and arg, with too few args'); | ||
t.deepEqual(boundArg(2), [sentinel, 1, 2], 'bound func with receiver and arg, with right arg'); | ||
t.deepEqual(boundArg(2, 3), [sentinel, 1, 2], 'bound func with receiver and arg, with too many args'); | ||
|
||
t.test('callBind.apply', function (st) { | ||
var aBound = callBind.apply(func); | ||
st.deepEqual(aBound(sentinel), [sentinel, undefined, undefined], 'apply-bound func with no args'); | ||
st.deepEqual(aBound(sentinel, [1], 4), [sentinel, 1, undefined], 'apply-bound func with too few args'); | ||
st.deepEqual(aBound(sentinel, [1, 2], 4), [sentinel, 1, 2], 'apply-bound func with right args'); | ||
|
||
var aBoundArg = callBind.apply(func); | ||
st.deepEqual(aBoundArg(sentinel, [1, 2, 3], 4), [sentinel, 1, 2], 'apply-bound func with too many args'); | ||
st.deepEqual(aBoundArg(sentinel, [1, 2], 4), [sentinel, 1, 2], 'apply-bound func with right args'); | ||
st.deepEqual(aBoundArg(sentinel, [1], 4), [sentinel, 1, undefined], 'apply-bound func with too few args'); | ||
|
||
var aBoundR = callBind.apply(func, sentinel); | ||
st.deepEqual(aBoundR([1, 2, 3], 4), [sentinel, 1, 2], 'apply-bound func with receiver and too many args'); | ||
st.deepEqual(aBoundR([1, 2], 4), [sentinel, 1, 2], 'apply-bound func with receiver and right args'); | ||
st.deepEqual(aBoundR([1], 4), [sentinel, 1, undefined], 'apply-bound func with receiver and too few args'); | ||
|
||
st.end(); | ||
}); | ||
|
||
t.end(); | ||
}); |