mirror of
https://github.com/Hopiu/fabric.js.git
synced 2026-03-16 22:10:32 +00:00
do not mutate passed object to fromObject (#4699)
* do not mutate passed object to fromObject * add a test * this is what you get for editing in github.com
This commit is contained in:
parent
58f2488fc7
commit
e13bc33c63
2 changed files with 35 additions and 1 deletions
|
|
@ -630,7 +630,8 @@
|
|||
* @param {Object} object Object to create an instance from
|
||||
* @param {Function} callback Callback to invoke when an image instance is created
|
||||
*/
|
||||
fabric.Image.fromObject = function(object, callback) {
|
||||
fabric.Image.fromObject = function(_object, callback) {
|
||||
var object = fabric.util.object.clone(_object);
|
||||
fabric.util.loadImage(object.src, function(img, error) {
|
||||
if (error) {
|
||||
callback && callback(null, error);
|
||||
|
|
|
|||
|
|
@ -337,6 +337,39 @@
|
|||
});
|
||||
});
|
||||
|
||||
QUnit.test('fromObject does not mutate data', function(assert) {
|
||||
var done = assert.async();
|
||||
assert.ok(typeof fabric.Image.fromObject === 'function');
|
||||
|
||||
var obj = fabric.util.object.extend(fabric.util.object.clone(REFERENCE_IMG_OBJECT), {
|
||||
src: IMG_SRC
|
||||
});
|
||||
var brightness = {
|
||||
type: 'Brightness',
|
||||
brightness: 0.1
|
||||
};
|
||||
var contrast = {
|
||||
type: 'Contrast',
|
||||
contrast: 0.1
|
||||
};
|
||||
obj.filters = [brightness];
|
||||
obj.resizeFilter = contrast;
|
||||
var copyOfFilters = obj.filters;
|
||||
var copyOfBrighteness = brightness;
|
||||
var copyOfContrast = contrast;
|
||||
var copyOfObject = obj;
|
||||
fabric.Image.fromObject(obj, function(){
|
||||
assert.ok(copyOfFilters === obj.filters, 'filters array did not mutate');
|
||||
assert.ok(copyOfBrighteness === copyOfFilters[0], 'filter is same object');
|
||||
assert.deepEqual(copyOfBrighteness, obj.filters[0], 'did not mutate filter');
|
||||
assert.deepEqual(copyOfFilters, obj.filters, 'did not mutate array');
|
||||
assert.deepEqual(copyOfContrast, obj.resizeFilter, 'did not mutate object');
|
||||
assert.deepEqual(copyOfObject, obj, 'did not change any value');
|
||||
assert.ok(copyOfContrast === obj.resizeFilter, 'resizefilter is same object');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('fromURL', function(assert) {
|
||||
var done = assert.async();
|
||||
assert.ok(typeof fabric.Image.fromURL === 'function');
|
||||
|
|
|
|||
Loading…
Reference in a new issue