aboutsummaryrefslogtreecommitdiffstats
path: root/test/AngularSpec.js
diff options
context:
space:
mode:
authorIgor Minar2011-11-30 14:06:04 -0500
committerIgor Minar2011-11-30 14:49:36 -0500
commitf43c226c67ab64ee056615567e51f976c7637127 (patch)
tree8a53c1e853447f28269b23c1b81a3d1113f55e03 /test/AngularSpec.js
parent0e1fa2aefe34fe9ba5c957efde9ae4a82df54e11 (diff)
downloadangular.js-f43c226c67ab64ee056615567e51f976c7637127.tar.bz2
fix(copy,equals): prevent browser crashes with Scope or Window
Scope and Window instances are special and when copied can crash browser. For this reason it makes sense to compare them only by identity.
Diffstat (limited to 'test/AngularSpec.js')
-rw-r--r--test/AngularSpec.js24
1 files changed, 24 insertions, 0 deletions
diff --git a/test/AngularSpec.js b/test/AngularSpec.js
index 53f62f00..1cb6af5e 100644
--- a/test/AngularSpec.js
+++ b/test/AngularSpec.js
@@ -57,6 +57,14 @@ describe('angular', function() {
expect(copy(123)).toEqual(123);
expect(copy([{key:null}])).toEqual([{key:null}]);
});
+
+ it('should throw an exception if a Scope is being copied', inject(function($rootScope) {
+ expect(function() { copy($rootScope.$new()); }).toThrow("Can't copy Window or Scope");
+ }));
+
+ it('should throw an exception if a Window is being copied', function() {
+ expect(function() { copy(window); }).toThrow("Can't copy Window or Scope");
+ });
});
describe('equals', function() {
@@ -114,6 +122,22 @@ describe('angular', function() {
it('should treat two NaNs as equal', function() {
expect(equals(NaN, NaN)).toBe(true);
});
+
+ it('should compare Scope instances only by identity', inject(function($rootScope) {
+ var scope1 = $rootScope.$new(),
+ scope2 = $rootScope.$new();
+
+ expect(equals(scope1, scope1)).toBe(true);
+ expect(equals(scope1, scope2)).toBe(false);
+ expect(equals($rootScope, scope1)).toBe(false);
+ expect(equals(undefined, scope1)).toBe(false);
+ }));
+
+ it('should compare Window instances only by identity', function() {
+ expect(equals(window, window)).toBe(true);
+ expect(equals(window, window.parent)).toBe(false);
+ expect(equals(window, undefined)).toBe(false);
+ });
});
describe('size', function() {