Ensure _.mergeWith sources are cloned when customizer returns undefiend. [closes #2111]

This commit is contained in:
John-David Dalton
2016-03-15 08:32:23 -07:00
parent 7d1d7d909a
commit b95d1d6123
2 changed files with 12 additions and 2 deletions

View File

@@ -3219,7 +3219,7 @@
}
else {
isCommon = false;
newValue = baseClone(srcValue, !customizer);
newValue = baseClone(srcValue, true);
}
}
else if (isPlainObject(srcValue) || isArguments(srcValue)) {
@@ -3228,7 +3228,7 @@
}
else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {
isCommon = false;
newValue = baseClone(srcValue, !customizer);
newValue = baseClone(srcValue, true);
}
else {
newValue = objValue;

View File

@@ -14610,6 +14610,16 @@
assert.deepEqual(actual, { 'a': { 'b': ['c'] } });
});
QUnit.test('should clone sources when `customizer` result is `undefined`', function(assert) {
assert.expect(1);
var source1 = { 'a': { 'b': { 'c': 1 } } },
source2 = { 'a': { 'b': { 'd': 2 } } },
actual = _.mergeWith({}, source1, source2, alwaysUndefined);
assert.deepEqual(source1.a.b, { 'c': 1 });
});
QUnit.test('should pop the stack of sources for each sibling property', function(assert) {
assert.expect(1);