mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Fix RED.util.compareObjects for Function created objects and Buffers
This commit is contained in:
parent
6fa78bdb04
commit
b1896e3737
@ -62,31 +62,55 @@ function cloneMessage(msg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function compareObjects(obj1,obj2) {
|
function compareObjects(obj1,obj2) {
|
||||||
|
var i;
|
||||||
if (obj1 === obj2) {
|
if (obj1 === obj2) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (obj1 == null || obj2 == null) {
|
if (obj1 == null || obj2 == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!(obj1 instanceof Object) && !(obj2 instanceof Object)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var isArray1 = Array.isArray(obj1);
|
var isArray1 = Array.isArray(obj1);
|
||||||
var isArray2 = Array.isArray(obj2);
|
var isArray2 = Array.isArray(obj2);
|
||||||
if (isArray1 != isArray2) {
|
if (isArray1 != isArray2) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (isArray1 && isArray2) {
|
if (isArray1 && isArray2) {
|
||||||
if (obj1.length != obj2.length) {
|
if (obj1.length !== obj2.length) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (var i=0;i<obj1.length;i++) {
|
for (i=0;i<obj1.length;i++) {
|
||||||
if (!compareObjects(obj1[i],obj2[i])) {
|
if (!compareObjects(obj1[i],obj2[i])) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
var isBuffer1 = Buffer.isBuffer(obj1);
|
||||||
|
var isBuffer2 = Buffer.isBuffer(obj2);
|
||||||
|
if (isBuffer1 != isBuffer2) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (isBuffer1 && isBuffer2) {
|
||||||
|
if (Buffer.compare) {
|
||||||
|
// For node 4.x+ - use the native compare
|
||||||
|
return Buffer.compare(obj1,obj2);
|
||||||
|
} else {
|
||||||
|
if (obj1.length !== obj2.length) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (i=0;i<obj1.length;i++) {
|
||||||
|
if (obj1.readUInt8(i) !== obj2.readUInt8(i)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof obj1 !== 'object' || typeof obj2 !== 'object') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
var keys1 = Object.keys(obj1);
|
var keys1 = Object.keys(obj1);
|
||||||
var keys2 = Object.keys(obj2);
|
var keys2 = Object.keys(obj2);
|
||||||
if (keys1.length != keys2.length) {
|
if (keys1.length != keys2.length) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2014, 2015 IBM Corp.
|
* Copyright 2014, 2016 IBM Corp.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -25,12 +25,41 @@ describe("red/util", function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('compareObjects', function() {
|
describe('compareObjects', function() {
|
||||||
it('unequal arrays are unequal', function() {
|
it('numbers', function() {
|
||||||
|
util.compareObjects(0,0).should.equal(true);
|
||||||
|
util.compareObjects(0,1).should.equal(false);
|
||||||
|
util.compareObjects(1000,1001).should.equal(false);
|
||||||
|
util.compareObjects(1000,1000).should.equal(true);
|
||||||
|
util.compareObjects(0,"0").should.equal(false);
|
||||||
|
util.compareObjects(1,"1").should.equal(false);
|
||||||
|
util.compareObjects(0,null).should.equal(false);
|
||||||
|
util.compareObjects(0,undefined).should.equal(false);
|
||||||
|
});
|
||||||
|
it('strings', function() {
|
||||||
|
util.compareObjects("","").should.equal(true);
|
||||||
|
util.compareObjects("a","a").should.equal(true);
|
||||||
|
util.compareObjects("",null).should.equal(false);
|
||||||
|
util.compareObjects("",undefined).should.equal(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('arrays', function() {
|
||||||
|
util.compareObjects(["a"],["a"]).should.equal(true);
|
||||||
|
util.compareObjects(["a"],["a","b"]).should.equal(false);
|
||||||
|
util.compareObjects(["a","b"],["b"]).should.equal(false);
|
||||||
util.compareObjects(["a"],"a").should.equal(false);
|
util.compareObjects(["a"],"a").should.equal(false);
|
||||||
|
util.compareObjects([[1],["a"]],[[1],["a"]]).should.equal(true);
|
||||||
|
util.compareObjects([[1],["a"]],[["a"],[1]]).should.equal(false);
|
||||||
});
|
});
|
||||||
it('unequal key lengths are unequal', function() {
|
it('objects', function() {
|
||||||
util.compareObjects({"a":1},{"a":1,"b":1}).should.equal(false);
|
util.compareObjects({"a":1},{"a":1,"b":1}).should.equal(false);
|
||||||
|
util.compareObjects({"a":1,"b":1},{"a":1,"b":1}).should.equal(true);
|
||||||
|
util.compareObjects({"b":1,"a":1},{"a":1,"b":1}).should.equal(true);
|
||||||
});
|
});
|
||||||
|
it('Buffer', function() {
|
||||||
|
util.compareObjects(new Buffer("hello"),new Buffer("hello")).should.equal(true);
|
||||||
|
util.compareObjects(new Buffer("hello"),new Buffer("hello ")).should.equal(false);
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('ensureString', function() {
|
describe('ensureString', function() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user