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) {
|
||||
var i;
|
||||
if (obj1 === obj2) {
|
||||
return true;
|
||||
}
|
||||
if (obj1 == null || obj2 == null) {
|
||||
return false;
|
||||
}
|
||||
if (!(obj1 instanceof Object) && !(obj2 instanceof Object)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var isArray1 = Array.isArray(obj1);
|
||||
var isArray2 = Array.isArray(obj2);
|
||||
if (isArray1 != isArray2) {
|
||||
return false;
|
||||
}
|
||||
if (isArray1 && isArray2) {
|
||||
if (obj1.length != obj2.length) {
|
||||
if (obj1.length !== obj2.length) {
|
||||
return false;
|
||||
}
|
||||
for (var i=0;i<obj1.length;i++) {
|
||||
for (i=0;i<obj1.length;i++) {
|
||||
if (!compareObjects(obj1[i],obj2[i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
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 keys2 = Object.keys(obj2);
|
||||
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");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -25,12 +25,41 @@ describe("red/util", 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([[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,"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() {
|
||||
|
Loading…
Reference in New Issue
Block a user