redeclaring-global-properties.js (1254B)
1 // |reftest| skip-if(!xulRuntime.shell) -- needs evaluate 2 // Any copyright is dedicated to the Public Domain. 3 // http://creativecommons.org/licenses/publicdomain/ 4 5 // Attempting to lexically redefine a var is a syntax error. 6 evaluate("var a;"); 7 assertThrowsInstanceOf(() => evaluate("let a;"), SyntaxError); 8 9 // Attempting to lexically redefine a configurable global property that's not a 10 // var is okay. 11 this.b = 42; 12 assertEq(b, 42); 13 evaluate("let b = 17;"); 14 assertEq(b, 17); 15 16 17 // Attempting to lexically redefine a var added by eval code is okay. 18 assertEq(typeof d, "undefined"); 19 eval("var d = 33;"); 20 assertEq(d, 33); 21 22 // Attempting to lexically redefine a var added by eval code, then deleted *as a 23 // name*, is okay. 24 assertEq(typeof e, "undefined"); 25 eval("var e = 'ohia';"); 26 assertEq(e, "ohia"); 27 delete e; 28 assertEq(this.hasOwnProperty("e"), false); 29 evaluate("let e = 3.141592654;"); 30 assertEq(e, 3.141592654); 31 32 // Attempting to lexically redefine a var added by eval code, then deleted *as a 33 // property*, is okay. 34 assertEq(typeof f, "undefined"); 35 eval("var f = 8675309;"); 36 assertEq(f, 8675309); 37 delete this.f; 38 assertEq(this.hasOwnProperty("f"), false); 39 40 if (typeof reportCompare === "function") 41 reportCompare(true, true); 42 43 print("Tests complete");