diff --git a/src/node.js b/src/node.js index 2b50a85e..4a1c5caa 100644 --- a/src/node.js +++ b/src/node.js @@ -50,6 +50,7 @@ else { fabric.log(err.message); } + callback(null); }); req.end(); @@ -71,10 +72,16 @@ fabric.util.loadImage = function(url, callback, context) { function createImageAndCallBack(data) { - img.src = new Buffer(data, 'binary'); - // preserving original url, which seems to be lost in node-canvas - img._src = url; - callback && callback.call(context, img); + if (data) { + img.src = new Buffer(data, 'binary'); + // preserving original url, which seems to be lost in node-canvas + img._src = url; + callback && callback.call(context, img); + } + else { + img = null; + callback && callback.call(context, null, true); + } } var img = new Image(); if (url && (url instanceof Buffer || url.indexOf('data') === 0)) { diff --git a/test/unit/util.js b/test/unit/util.js index 11e29b5c..13708b84 100644 --- a/test/unit/util.js +++ b/test/unit/util.js @@ -24,6 +24,8 @@ ? require("path").join(__dirname, '../fixtures/', 'very_large_image.jpg') : getAbsolutePath('../fixtures/very_large_image.jpg'); + var IMG_URL_NON_EXISTING = 'http://www.google.com/non-existing'; + test('fabric.util.toFixed', function(){ ok(typeof fabric.util.toFixed == 'function'); @@ -459,6 +461,23 @@ }, 1000); }); + + asyncTest('fabric.util.loadImage with url for a non exsiting image', function() { + var callbackInvoked = false; + var hadError = false; + + fabric.util.loadImage(IMG_URL_NON_EXISTING, function(img, error) { + callbackInvoked = true; + hadError = error; + }); + + setTimeout(function() { + ok(callbackInvoked, 'callback should be invoked'); + equal(hadError, true, 'callback should be invoked with error set to true'); + start(); + }, 1000); + }); + var SVG_WITH_1_ELEMENT = '\ \ \