Browse Source

Two bug fixes for process.mixin

Bug #1 occurred when trying to use process.mixin on a function and
produced a fatal exception.

Bug #2 occurred when trying to do a deep merge with an object containing
one or more objects with a nodeType property. In those cases the deep
copy for this part of the object was not performed and a shallow one was
performed instead.

Both of these bugs were artifacts of the jQuery.extend port.
v0.7.4-release
Felix Geisendörfer 15 years ago
committed by Ryan Dahl
parent
commit
f080de5380
  1. 4
      src/node.js
  2. 16
      test/mjsunit/test-process-mixin.js

4
src/node.js

@ -109,7 +109,7 @@ process.mixin = function() {
}
// Handle case when target is a string or something (possible in deep copy)
if ( typeof target !== "object" && !process.isFunction(target) )
if ( typeof target !== "object" && !(typeof target === 'function') )
target = {};
// mixin process itself if only one argument is passed
@ -130,7 +130,7 @@ process.mixin = function() {
continue;
// Recurse if we're merging object values
if ( deep && copy && typeof copy === "object" && !copy.nodeType )
if ( deep && copy && typeof copy === "object" )
target[ name ] = process.mixin( deep,
// Never move original objects, clone them
src || ( copy.length != null ? [ ] : { } )

16
test/mjsunit/test-process-mixin.js

@ -0,0 +1,16 @@
process.mixin(require("./common"));
var target = function() {};
process.mixin(target, {
foo: 'bar'
});
assert.equal('bar', target.foo);
// This test verifies there are no DOM-related aspects to process.mixin which
// originally had been in there due to its jQuery origin.
var fakeDomElement = {deep: {nodeType: 4}};
target = {};
process.mixin(true, target, fakeDomElement);
assert.notStrictEqual(target.deep, fakeDomElement.deep);
Loading…
Cancel
Save