diff options
| -rw-r--r-- | src/Angular.js | 1 | ||||
| -rw-r--r-- | test/AngularSpec.js | 8 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/Angular.js b/src/Angular.js index 2a9fb556..c14c6ea0 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 1cb6af5e..70997240 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() { |
