Ensure customizer results are respected by _.isEqual.

This commit is contained in:
jdalton
2015-05-03 22:57:45 -07:00
parent ee182df533
commit d825937411
2 changed files with 19 additions and 5 deletions

View File

@@ -3928,7 +3928,10 @@
othValue = other[index],
result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;
if (result !== undefined && !result) {
if (result !== undefined) {
if (result) {
continue;
}
return false;
}
// Recursively compare arrays (susceptible to call stack limits).

View File

@@ -7749,15 +7749,26 @@
strictEqual(_.isEqual('a', 'a', _.noop), true);
});
test('should not handle comparisons if `customizer` returns `true`', 3, function() {
var customizer = function(value) {
return _.isString(value) || undefined;
};
strictEqual(_.isEqual('a', 'b', customizer), true);
strictEqual(_.isEqual(['a'], ['b'], customizer), true);
strictEqual(_.isEqual({ '0': 'a' }, { '0': 'b' }, customizer), true);
});
test('should return a boolean value even if `customizer` does not', 2, function() {
var actual = _.isEqual('a', 'a', _.constant('a'));
var actual = _.isEqual('a', 'b', _.constant('c'));
strictEqual(actual, true);
var expected = _.map(falsey, _.constant(false));
var values = _.without(falsey, undefined),
expected = _.map(values, _.constant(false));
actual = [];
_.each(falsey, function(value) {
actual.push(_.isEqual('a', 'b', _.constant(value)));
_.each(values, function(value) {
actual.push(_.isEqual('a', 'a', _.constant(value)));
});
deepEqual(actual, expected);