diff --git a/src/ol/style/icon.js b/src/ol/style/icon.js index 02dbbcd97f..292d85a534 100644 --- a/src/ol/style/icon.js +++ b/src/ol/style/icon.js @@ -181,18 +181,18 @@ ol.inherits(ol.style.Icon, ol.style.Image); ol.style.Icon.prototype.clone = function() { var useImg = (this.iconImage_.getImageState() === ol.Image.State.LOADED); return new ol.style.Icon({ - anchor: this.getAnchor().slice(0), - anchorOrigin: this.anchorOrigin_.slice(0), + anchor: this.anchor_.slice(0), + anchorOrigin: this.anchorOrigin_, anchorXUnits: this.anchorXUnits_, anchorYUnits: this.anchorYUnits_, crossOrigin: this.crossOrigin_, - color: this.color_.slice(0), + color: this.color_ !== null ? this.color_.slice(0) : undefined, img: useImg ? this.getImage(1) : undefined, imgSize: useImg ? this.iconImage_.getSize().slice(0) : undefined, src: useImg ? undefined : this.getSrc(), offset: this.offset_.slice(0), offsetOrigin: this.offsetOrigin_, - size: this.getSize().slice(0), + size: this.size_ !== null ? this.size_.slice(0) : undefined, opacity: this.getOpacity(), scale: this.getScale(), snapToPixel: this.getSnapToPixel(), diff --git a/test/spec/ol/style/fill.test.js b/test/spec/ol/style/fill.test.js index 65579e4f58..3857e657f5 100644 --- a/test/spec/ol/style/fill.test.js +++ b/test/spec/ol/style/fill.test.js @@ -18,7 +18,7 @@ describe('ol.style.Fill', function() { color: '#319FD3' }); var clone = original.clone(); - expect(original.getColor()).to.be(clone.getColor()); + expect(original.getColor()).to.eql(clone.getColor()); }); }); }); diff --git a/test/spec/ol/style/icon.test.js b/test/spec/ol/style/icon.test.js index 5d3fa68cba..96c1c407cb 100644 --- a/test/spec/ol/style/icon.test.js +++ b/test/spec/ol/style/icon.test.js @@ -38,6 +38,67 @@ describe('ol.style.Icon', function() { }); + describe('#clone', function() { + + it('creates a new ol.style.Icon', function() { + var original = new ol.style.Icon({ + src: src + }); + var clone = original.clone(); + expect(clone instanceof ol.style.Icon).to.be(true); + expect(clone).to.not.be(original); + }); + + it('clones all values ', function() { + var canvas = document.createElement('canvas'); + var original = new ol.style.Icon({ + anchor: [1, 0], + anchorOrigin: 'bottom-right', + anchorXUnits: 'pixels', + anchorYUnits: 'pixels', + color: '#319FD3', + crossOrigin: 'Anonymous', + img: canvas, + imgSize: size, + offset: [1, 2], + offsetOrigin: 'bottom-left', + opacity: 0.5, + scale: 2, + snapToPixel: false, + rotation: 4, + size: [10, 12] + }); + + var clone = original.clone(); + expect(original.getAnchor()).to.not.be(clone.getAnchor()); + expect(original.getAnchor()).to.eql(clone.getAnchor()); + expect(original.anchorOrigin_).to.be(clone.anchorOrigin_); + expect(original.anchorXUnits_).to.be(clone.anchorXUnits_); + expect(original.anchorYUnits_).to.be(clone.anchorYUnits_); + expect(original.crossOrigin_).to.be(clone.crossOrigin_); + expect(original.color_).to.not.be(clone.color_); + expect(original.color_).to.eql(clone.color_); + expect(original.getImage(1).src).to.be(clone.getImage(1).src); + expect(original.getImage(1).toDataURL()).to.be(original.getImage(1).toDataURL()); + expect(original.offset_).to.not.be(clone.offset_); + expect(original.offset_).to.eql(clone.offset_); + expect(original.offsetOrigin_).to.be(clone.offsetOrigin_); + expect(original.getSize()).not.to.be(clone.getSize()); + expect(original.getSize()).to.eql(clone.getSize()); + expect(original.getSrc()).to.not.eql(clone.getSrc()); + expect(original.getOpacity()).to.be(clone.getOpacity()); + expect(original.getRotation()).to.be(clone.getRotation()); + expect(original.getRotateWithView()).to.be(clone.getRotateWithView()); + expect(original.getSnapToPixel()).to.be(clone.getSnapToPixel()); + + var original2 = new ol.style.Icon({ + src: src + }); + var clone2 = original2.clone(); + expect(original2.getSrc()).to.be(clone2.getSrc()); + }); + }); + describe('#getAnchor', function() { var fractionAnchor = [0.25, 0.25];