diff --git a/src/Angular.js b/src/Angular.js index 2a9fb5560edb..c14c6ea0928a 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -597,6 +597,7 @@ function copy(source, destination){ } } } else { + if (source === destination) throw Error("Can't copy equivalent objects or arrays"); if (isArray(source)) { while(destination.length) { destination.pop(); diff --git a/test/AngularSpec.js b/test/AngularSpec.js index 1cb6af5e8796..709972407ac2 100644 --- a/test/AngularSpec.js +++ b/test/AngularSpec.js @@ -65,6 +65,14 @@ describe('angular', function() { it('should throw an exception if a Window is being copied', function() { expect(function() { copy(window); }).toThrow("Can't copy Window or Scope"); }); + + it('should throw an exception when source and destination are equivalent', function() { + var src, dst; + src = dst = {key: 'value'}; + expect(function() { copy(src, dst); }).toThrow("Can't copy equivalent objects or arrays"); + src = dst = [2, 4]; + expect(function() { copy(src, dst); }).toThrow("Can't copy equivalent objects or arrays"); + }); }); describe('equals', function() {