mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-12 20:07:49 +00:00
Add _.placeholder tests.
This commit is contained in:
12
lodash.js
12
lodash.js
@@ -4247,7 +4247,9 @@
|
|||||||
|
|
||||||
length -= holders.length;
|
length -= holders.length;
|
||||||
if (length < arity) {
|
if (length < arity) {
|
||||||
return createRecurryWrapper(func, bitmask, createHybridWrapper, placeholder, undefined, args, holders, undefined, undefined, arity - length);
|
return createRecurryWrapper(
|
||||||
|
func, bitmask, createHybridWrapper, wrapper.placeholder, undefined,
|
||||||
|
args, holders, undefined, undefined, arity - length);
|
||||||
}
|
}
|
||||||
var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
|
var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
|
||||||
return apply(fn, this, args);
|
return apply(fn, this, args);
|
||||||
@@ -4364,8 +4366,8 @@
|
|||||||
if (isCurried && length < arity) {
|
if (isCurried && length < arity) {
|
||||||
var newHolders = replaceHolders(args, placeholder);
|
var newHolders = replaceHolders(args, placeholder);
|
||||||
return createRecurryWrapper(
|
return createRecurryWrapper(
|
||||||
func, bitmask, createHybridWrapper, placeholder, thisArg, args,
|
func, bitmask, createHybridWrapper, wrapper.placeholder, thisArg,
|
||||||
newHolders, argPos, ary, arity - length
|
args, newHolders, argPos, ary, arity - length
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
var thisBinding = isBind ? thisArg : this,
|
var thisBinding = isBind ? thisArg : this,
|
||||||
@@ -8605,7 +8607,7 @@
|
|||||||
function curry(func, arity, guard) {
|
function curry(func, arity, guard) {
|
||||||
arity = guard ? undefined : arity;
|
arity = guard ? undefined : arity;
|
||||||
var result = createWrapper(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
|
var result = createWrapper(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
|
||||||
result.placeholder = getPlaceholder(curry);
|
result.placeholder = curry.placeholder;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8649,7 +8651,7 @@
|
|||||||
function curryRight(func, arity, guard) {
|
function curryRight(func, arity, guard) {
|
||||||
arity = guard ? undefined : arity;
|
arity = guard ? undefined : arity;
|
||||||
var result = createWrapper(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
|
var result = createWrapper(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
|
||||||
result.placeholder = getPlaceholder(curryRight);
|
result.placeholder = curryRight.placeholder;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
92
test/test.js
92
test/test.js
@@ -1715,6 +1715,23 @@
|
|||||||
assert.deepEqual(bound(), [object, undefined, 'b', undefined]);
|
assert.deepEqual(bound(), [object, undefined, 'b', undefined]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
QUnit.test('should use `_.placeholder` when set', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
|
||||||
|
if (!isModularize) {
|
||||||
|
var _ph = _.placeholder = {},
|
||||||
|
ph = _.bind.placeholder,
|
||||||
|
object = {},
|
||||||
|
bound = _.bind(fn, object, _ph, 'b', ph);
|
||||||
|
|
||||||
|
assert.deepEqual(bound('a', 'c'), [object, 'a', 'b', ph, 'c']);
|
||||||
|
delete _.placeholder;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
skipAssert(assert);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
QUnit.test('should create a function with a `length` of `0`', function(assert) {
|
QUnit.test('should create a function with a `length` of `0`', function(assert) {
|
||||||
assert.expect(2);
|
assert.expect(2);
|
||||||
|
|
||||||
@@ -1995,6 +2012,28 @@
|
|||||||
assert.deepEqual(bound(), [undefined, 'b', undefined]);
|
assert.deepEqual(bound(), [undefined, 'b', undefined]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
QUnit.test('should use `_.placeholder` when set', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
|
||||||
|
if (!isModularize) {
|
||||||
|
var object = {
|
||||||
|
'fn': function() {
|
||||||
|
return slice.call(arguments);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var _ph = _.placeholder = {},
|
||||||
|
ph = _.bindKey.placeholder,
|
||||||
|
bound = _.bindKey(object, 'fn', _ph, 'b', ph);
|
||||||
|
|
||||||
|
assert.deepEqual(bound('a', 'c'), ['a', 'b', ph, 'c']);
|
||||||
|
delete _.placeholder;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
skipAssert(assert);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
QUnit.test('should ensure `new bound` is an instance of `object[key]`', function(assert) {
|
QUnit.test('should ensure `new bound` is an instance of `object[key]`', function(assert) {
|
||||||
assert.expect(2);
|
assert.expect(2);
|
||||||
|
|
||||||
@@ -3622,6 +3661,22 @@
|
|||||||
assert.deepEqual(actual, ['a', 'b', 'c', 'd']);
|
assert.deepEqual(actual, ['a', 'b', 'c', 'd']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
QUnit.test('should use `_.placeholder` when set', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
|
||||||
|
if (!isModularize) {
|
||||||
|
var curried = _.curry(fn),
|
||||||
|
_ph = _.placeholder = {},
|
||||||
|
ph = curried.placeholder;
|
||||||
|
|
||||||
|
assert.deepEqual(curried(1)(_ph, 3)(ph, 4), [1, ph, 3, 4]);
|
||||||
|
delete _.placeholder;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
skipAssert(assert);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
QUnit.test('should provide additional arguments after reaching the target arity', function(assert) {
|
QUnit.test('should provide additional arguments after reaching the target arity', function(assert) {
|
||||||
assert.expect(3);
|
assert.expect(3);
|
||||||
|
|
||||||
@@ -3765,6 +3820,22 @@
|
|||||||
assert.deepEqual(actual, ['a', 'b', 'c', 'd']);
|
assert.deepEqual(actual, ['a', 'b', 'c', 'd']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
QUnit.test('should use `_.placeholder` when set', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
|
||||||
|
if (!isModularize) {
|
||||||
|
var curried = _.curryRight(fn),
|
||||||
|
_ph = _.placeholder = {},
|
||||||
|
ph = curried.placeholder;
|
||||||
|
|
||||||
|
assert.deepEqual(curried(4)(2, _ph)(1, ph), [1, 2, ph, 4]);
|
||||||
|
delete _.placeholder;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
skipAssert(assert);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
QUnit.test('should provide additional arguments after reaching the target arity', function(assert) {
|
QUnit.test('should provide additional arguments after reaching the target arity', function(assert) {
|
||||||
assert.expect(3);
|
assert.expect(3);
|
||||||
|
|
||||||
@@ -15857,9 +15928,9 @@
|
|||||||
|
|
||||||
var fn = function(a, b) { return [a, b]; },
|
var fn = function(a, b) { return [a, b]; },
|
||||||
par = func(fn, 'a'),
|
par = func(fn, 'a'),
|
||||||
expected = ['a', 'b'];
|
expected = isPartial ? ['a', 'b'] : ['b', 'a'];
|
||||||
|
|
||||||
assert.deepEqual(par('b'), isPartial ? expected : expected.reverse());
|
assert.deepEqual(par('b'), expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
QUnit.test('`_.' + methodName + '` works when there are no partially applied arguments and the created function is invoked without additional arguments', function(assert) {
|
QUnit.test('`_.' + methodName + '` works when there are no partially applied arguments and the created function is invoked without additional arguments', function(assert) {
|
||||||
@@ -15896,6 +15967,23 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
QUnit.test('`_.' + methodName + '` should use `_.placeholder` when set', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
|
||||||
|
if (!isModularize) {
|
||||||
|
var _ph = _.placeholder = {},
|
||||||
|
fn = function() { return slice.call(arguments); },
|
||||||
|
par = func(fn, _ph, 'b', ph),
|
||||||
|
expected = isPartial ? ['a', 'b', ph, 'c'] : ['a', 'c', 'b', ph];
|
||||||
|
|
||||||
|
assert.deepEqual(par('a', 'c'), expected);
|
||||||
|
delete _.placeholder;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
skipAssert(assert);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
QUnit.test('`_.' + methodName + '` creates a function with a `length` of `0`', function(assert) {
|
QUnit.test('`_.' + methodName + '` creates a function with a `length` of `0`', function(assert) {
|
||||||
assert.expect(1);
|
assert.expect(1);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user