switch-realms-native.js (1630B)
1 function testCall() { 2 var g = newGlobal({sameCompartmentAs: this}); 3 for (var i = 0; i < 20; i++) { 4 assertEq(objectGlobal(g.Array(1, 2, 3)), g); 5 assertEq(objectGlobal(new g.Array(1, 2, 3)), g); 6 } 7 for (var i = 0; i < 20; i++) { 8 g.Error(); 9 g.assertCorrectRealm(); 10 if (i > 15) 11 g.gc(); 12 } 13 } 14 testCall(); 15 16 function testAccessor() { 17 var g = newGlobal({sameCompartmentAs: this}); 18 var o = {}; 19 Object.defineProperty(o, "foo", {get: g.assertCorrectRealm, 20 set: g.assertCorrectRealm}); 21 for (var i = 0; i < 20; i++) 22 o.foo; 23 for (var i = 0; i < 20; i++) 24 o.foo = 1; 25 Object.defineProperty(o, "arr", {get: g.Array}); 26 for (var i = 0; i < 20; i++) { 27 var arr = o.arr; 28 assertEq(objectGlobal(arr), g); 29 assertEq(arr.__proto__, g.Array.prototype); 30 } 31 } 32 testAccessor(); 33 34 function testException1() { 35 var g = newGlobal({sameCompartmentAs: this}); 36 for (var i = 0; i < 20; i++) { 37 var ex; 38 try { 39 g.throwOutOfMemory(); 40 } catch(e) { 41 ex = e; 42 } 43 assertCorrectRealm(); 44 assertEq(typeof ex, "string"); 45 } 46 } 47 testException1(); 48 49 function testDOMCalls() { 50 var g = newGlobal({sameCompartmentAs: this}); 51 var obj = g.evaluate("new FakeDOMObject()"); 52 for (var i = 0; i < 2000; i++) { 53 assertCorrectRealm(); 54 assertEq(obj.doFoo(1), 1); 55 assertEq(typeof obj.x, "number"); 56 assertEq(obj.global, g); 57 obj.global = g; // Throws if not setter's global. 58 } 59 } 60 testDOMCalls();