mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Prevent the callback to be called twice
and add test cases
This commit is contained in:
parent
2a287b2ae6
commit
ba18b27371
@ -30,19 +30,24 @@ Memory.prototype.close = function(){
|
|||||||
|
|
||||||
Memory.prototype.get = function(scope, key, callback) {
|
Memory.prototype.get = function(scope, key, callback) {
|
||||||
var value;
|
var value;
|
||||||
|
var error;
|
||||||
try{
|
try{
|
||||||
if(this.data[scope]){
|
if(this.data[scope]){
|
||||||
value = util.getMessageProperty(this.data[scope], key);
|
value = util.getMessageProperty(this.data[scope], key);
|
||||||
}
|
}
|
||||||
}catch(err){
|
}catch(err){
|
||||||
if(callback){
|
if(callback){
|
||||||
callback(err);
|
error = err;
|
||||||
}else{
|
}else{
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(callback){
|
if(callback){
|
||||||
callback(null, value);
|
if(error){
|
||||||
|
callback(error);
|
||||||
|
} else {
|
||||||
|
callback(null, value);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
@ -52,22 +57,24 @@ Memory.prototype.set =function(scope, key, value, callback) {
|
|||||||
if(!this.data[scope]){
|
if(!this.data[scope]){
|
||||||
this.data[scope] = {};
|
this.data[scope] = {};
|
||||||
}
|
}
|
||||||
|
var error;
|
||||||
try{
|
try{
|
||||||
util.setMessageProperty(this.data[scope],key,value);
|
util.setMessageProperty(this.data[scope],key,value);
|
||||||
}catch(err){
|
}catch(err){
|
||||||
if(callback){
|
if(callback){
|
||||||
callback(err);
|
error = err;
|
||||||
}else{
|
}else{
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(callback){
|
if(callback){
|
||||||
callback(null);
|
callback(error || null);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Memory.prototype.keys = function(scope, callback){
|
Memory.prototype.keys = function(scope, callback){
|
||||||
var values = [];
|
var values = [];
|
||||||
|
var error;
|
||||||
try{
|
try{
|
||||||
if(this.data[scope]){
|
if(this.data[scope]){
|
||||||
if (scope !== "global") {
|
if (scope !== "global") {
|
||||||
@ -80,13 +87,17 @@ Memory.prototype.keys = function(scope, callback){
|
|||||||
}
|
}
|
||||||
}catch(err){
|
}catch(err){
|
||||||
if(callback){
|
if(callback){
|
||||||
callback(err);
|
error = err;
|
||||||
}else{
|
}else{
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(callback){
|
if(callback){
|
||||||
callback(null, values);
|
if(error){
|
||||||
|
callback(error);
|
||||||
|
} else {
|
||||||
|
callback(null, values);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
@ -32,77 +32,141 @@ describe('memory',function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('#get/set',function() {
|
describe('#get/set',function() {
|
||||||
it('should store property',function() {
|
describe('sync',function() {
|
||||||
should.not.exist(context.get("nodeX","foo"));
|
it('should store property',function() {
|
||||||
context.set("nodeX","foo","test");
|
should.not.exist(context.get("nodeX","foo"));
|
||||||
context.get("nodeX","foo").should.equal("test");
|
context.set("nodeX","foo","test");
|
||||||
|
context.get("nodeX","foo").should.equal("test");
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should store property - creates parent properties',function() {
|
||||||
|
context.set("nodeX","foo.bar","test");
|
||||||
|
context.get("nodeX","foo").should.eql({bar:"test"});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should delete property',function() {
|
||||||
|
context.set("nodeX","foo.abc.bar1","test1");
|
||||||
|
context.set("nodeX","foo.abc.bar2","test2");
|
||||||
|
context.get("nodeX","foo.abc").should.eql({bar1:"test1",bar2:"test2"});
|
||||||
|
context.set("nodeX","foo.abc.bar1",undefined);
|
||||||
|
context.get("nodeX","foo.abc").should.eql({bar2:"test2"});
|
||||||
|
context.set("nodeX","foo.abc",undefined);
|
||||||
|
should.not.exist(context.get("nodeX","foo.abc"));
|
||||||
|
context.set("nodeX","foo",undefined);
|
||||||
|
should.not.exist(context.get("nodeX","foo"));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not shared context with other scope', function() {
|
||||||
|
should.not.exist(context.get("nodeX","foo"));
|
||||||
|
should.not.exist(context.get("nodeY","foo"));
|
||||||
|
context.set("nodeX","foo","testX");
|
||||||
|
context.set("nodeY","foo","testY");
|
||||||
|
|
||||||
|
context.get("nodeX","foo").should.equal("testX");
|
||||||
|
context.get("nodeY","foo").should.equal("testY");
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should thorw the error if the error occurs', function() {
|
||||||
|
try{
|
||||||
|
context.set("nodeX",".foo","test");
|
||||||
|
should.fail("Error was not thrown");
|
||||||
|
}catch(err){
|
||||||
|
should.exist(err);
|
||||||
|
try{
|
||||||
|
context.get("nodeX",".foo");
|
||||||
|
should.fail("Error was not thrown");
|
||||||
|
}catch(err){
|
||||||
|
should.exist(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should store property - creates parent properties',function() {
|
describe('async',function() {
|
||||||
context.set("nodeX","foo.bar","test");
|
it('should store property',function(done) {
|
||||||
context.get("nodeX","foo").should.eql({bar:"test"});
|
context.get("nodeX","foo",function(err, value){
|
||||||
});
|
should.not.exist(value);
|
||||||
|
context.set("nodeX","foo","test",function(err){
|
||||||
|
context.get("nodeX","foo",function(err, value){
|
||||||
|
value.should.equal("test");
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should delete property',function() {
|
it('should pass the error to callback if the error occurs',function(done) {
|
||||||
context.set("nodeX","foo.abc.bar1","test1");
|
context.set("nodeX",".foo","test",function(err, value){
|
||||||
context.set("nodeX","foo.abc.bar2","test2");
|
should.exist(err);
|
||||||
context.get("nodeX","foo.abc").should.eql({bar1:"test1",bar2:"test2"});
|
context.get("nodeX",".foo",function(err){
|
||||||
context.set("nodeX","foo.abc.bar1",undefined);
|
should.exist(err);
|
||||||
context.get("nodeX","foo.abc").should.eql({bar2:"test2"});
|
done();
|
||||||
context.set("nodeX","foo.abc",undefined);
|
});
|
||||||
should.not.exist(context.get("nodeX","foo.abc"));
|
});
|
||||||
context.set("nodeX","foo",undefined);
|
});
|
||||||
should.not.exist(context.get("nodeX","foo"));
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not shared context with other scope', function() {
|
|
||||||
should.not.exist(context.get("nodeX","foo"));
|
|
||||||
should.not.exist(context.get("nodeY","foo"));
|
|
||||||
context.set("nodeX","foo","testX");
|
|
||||||
context.set("nodeY","foo","testY");
|
|
||||||
|
|
||||||
context.get("nodeX","foo").should.equal("testX");
|
|
||||||
context.get("nodeY","foo").should.equal("testY");
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#keys',function() {
|
describe('#keys',function() {
|
||||||
it('should enumerate context keys', function() {
|
describe('sync',function() {
|
||||||
var keys = context.keys("nodeX");
|
it('should enumerate context keys', function() {
|
||||||
keys.should.be.an.Array();
|
var keys = context.keys("nodeX");
|
||||||
keys.should.be.empty();
|
keys.should.be.an.Array();
|
||||||
|
keys.should.be.empty();
|
||||||
|
|
||||||
context.set("nodeX","foo","bar");
|
context.set("nodeX","foo","bar");
|
||||||
keys = context.keys("nodeX");
|
keys = context.keys("nodeX");
|
||||||
keys.should.have.length(1);
|
keys.should.have.length(1);
|
||||||
keys[0].should.equal("foo");
|
keys[0].should.equal("foo");
|
||||||
|
|
||||||
context.set("nodeX","abc.def","bar");
|
context.set("nodeX","abc.def","bar");
|
||||||
keys = context.keys("nodeX");
|
keys = context.keys("nodeX");
|
||||||
keys.should.have.length(2);
|
keys.should.have.length(2);
|
||||||
keys[1].should.equal("abc");
|
keys[1].should.equal("abc");
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should enumerate context keys in each scopes', function() {
|
||||||
|
var keysX = context.keys("nodeX");
|
||||||
|
keysX.should.be.an.Array();
|
||||||
|
keysX.should.be.empty();
|
||||||
|
|
||||||
|
var keysY = context.keys("nodeY");
|
||||||
|
keysY.should.be.an.Array();
|
||||||
|
keysY.should.be.empty();
|
||||||
|
|
||||||
|
context.set("nodeX","foo","bar");
|
||||||
|
context.set("nodeY","hoge","piyo");
|
||||||
|
keysX = context.keys("nodeX");
|
||||||
|
keysX.should.have.length(1);
|
||||||
|
keysX[0].should.equal("foo");
|
||||||
|
|
||||||
|
keysY = context.keys("nodeY");
|
||||||
|
keysY.should.have.length(1);
|
||||||
|
keysY[0].should.equal("hoge");
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should enumerate context keys in each scopes', function() {
|
describe('async',function() {
|
||||||
var keysX = context.keys("nodeX");
|
it('should enumerate context keys', function(done) {
|
||||||
keysX.should.be.an.Array();
|
context.keys("nodeX", function(err, keys) {
|
||||||
keysX.should.be.empty();
|
keys.should.be.an.Array();
|
||||||
|
keys.should.be.empty();
|
||||||
var keysY = context.keys("nodeY");
|
context.set("nodeX", "foo", "bar", function(err) {
|
||||||
keysY.should.be.an.Array();
|
context.keys("nodeX", function(err, keys) {
|
||||||
keysY.should.be.empty();
|
keys.should.have.length(1);
|
||||||
|
keys[0].should.equal("foo");
|
||||||
context.set("nodeX","foo","bar");
|
context.set("nodeX","abc.def","bar",function(err){
|
||||||
context.set("nodeY","hoge","piyo");
|
context.keys("nodeX",function(err, keys){
|
||||||
keysX = context.keys("nodeX");
|
keys.should.have.length(2);
|
||||||
keysX.should.have.length(1);
|
keys[1].should.equal("abc");
|
||||||
keysX[0].should.equal("foo");
|
done();
|
||||||
|
});
|
||||||
keysY = context.keys("nodeY");
|
});
|
||||||
keysY.should.have.length(1);
|
});
|
||||||
keysY[0].should.equal("hoge");
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#delete',function() {
|
describe('#delete',function() {
|
||||||
|
Loading…
Reference in New Issue
Block a user