blob: 16964682ec85bbc90ffa6e59def200f412e9d037 [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
function write(v) { WScript.Echo(v + ""); }
var r;
// Delete locals
(function Test1() {
var p;
var q = 10;
write("p : " + p);
r = delete p;
write("delete p: " + r);
write("p : " + p);
write("q : " + q);
r = delete q;
write("delete q: " + r);
write("q : " + q);
}) ();
test2_value = 10;
// Delete globals
(function Test2() {
test2_local = 20;
write("test2_value : " + test2_value);
r = delete test2_value;
write("delete test2_value: " + r);
try {
write("test2_value : " + test2_value);
write("delete test2_value failed");
} catch (e) {
write("delete test2_value passed");
}
write("test2_local : " + test2_local);
r = delete test2_local;
write("delete test2_local: " + r);
try {
write("test2_local : " + test2_local);
write("delete test2_local failed");
} catch (e) {
write("delete test2_local passed");
}
}) ();
// Deleting parameters
(function Test3(x,y,z) {
write("Test3 x : " + x + " y: " + y + " z: " + z);
r = delete x;
write("delete x: " + r);
r = delete y;
write("delete x: " + r);
r = delete z;
write("delete x: " + r);
write("Test3 x : " + x + " y: " + y + " z: " + z);
})(10, "hello");
// Delete arguments[i]
(function Test4(x,y,z) {
write("Test4 x : " + x + " y: " + y + " z: " + z);
write("Test4 arguments[0] : " + arguments[0] + " arguments[1]: " + arguments[1] + " arguments[2]: " + arguments[2]);
r = delete arguments[0];
write("delete arguments[0]: " + r);
r = delete arguments[2];
write("delete arguments[2]: " + r);
write("Test4 x : " + x + " y: " + y + " z: " + z);
write("Test4 arguments[0] : " + arguments[0] + " arguments[1]: " + arguments[1] + " arguments[2]: " + arguments[2]);
}) (10, "hello");
// Delete nested function
(function Test5() {
function test5_func() { return 100;}
r = delete test5_func;
write("Test5: delete function " + r);
write("test5_func() :" + test5_func());
}) ();
// Delete this
(function Test6() {
try {
r = delete this;
} catch (e) {
write("Exception delete this : " + e.message);
}
write("Test6: delete this: " + r);
}) ();
// Delete a global function
function test7_value() {}
(function Test7() {
r = delete test7_value;
write("Test7: delete test7_value: " + r);
}) ();
// Delete arguments
(function Test8() {
r = delete arguments;
write("Test8: delete arguments: " + r);
}) ();
// Delete exception
(function Test9() {
try {
throw 10;
} catch(e) {
r = delete e;
}
write("Test9: delete exception: " + r);
})();
// Delete exception
(function Test10() {
try {
throw new Error("some error");
} catch(e) {
r = delete e;
}
write("Test10: delete exception: " + r);
})();
// Delete variable declared using eval
(function Test11(){
eval("var x = 10;");
r = delete x;
write("Test11: delete x: " + r);
}) ();
// Delete variable declared using eval, in eval
(function Test12(){
eval("var x = 10;");
r = eval("delete x");
write("Test12: delete x: " + r);
}) ();
// Delete variable in eval
(function Test13(){
var x;
r = eval("delete x;");
write("Test13: delete x: " + r);
}) ();
// Delete function in eval
(function Test14(){
function f() { return 100;}
r = eval("delete f;");
write("Test14: delete f: " + r);
}) ();
// Delete function in eval, declared in eval
(function Test15(){
eval("function f() { return 100;}");
r = eval("delete f;");
write("Test15: delete f: " + r);
}) ();
// Delete function, declared in eval
(function Test16(){
eval("function f() { return 100;}");
r = delete f;
write("Test16: delete f: " + r);
}) ();
// Delete arguments in function declared and called in eval
(function Test17(){
r = eval("function test17_value(){ return delete arguments; }; test17_value();");
write("Test17: delete test17_value: " + r);
}) ();
// With cases
// Delete local variable, not in with
(function Test18(){
var test18_value = 10;
var o = {};
with(o){
r = delete test18_value;
}
write("Test18: delete test18_value: " + r);
write("test18_value : " + test18_value);
}) ();
// Delete variable in with
(function Test19(){
var test19_value = 10;
var o = { test19_value : 20 };
with(o){
r = delete test19_value;
}
write("Test19: delete test19_value: " + r);
write("test19_value : " + test19_value);
write("o.test19_value : " + o.test19_value);
}) ();
// Delete local variable, not in with inside eval
(function Test20(){
var test20_value = 10;
var o = {};
with(o){
r = eval("delete test20_value");
}
write("Test20: delete test20_value: " + r);
write("test20_value : " + test20_value);
}) ();
// Delete variable in with, inside eval
(function Test21(){
var test21_value = 10;
var o = { test21_value : 20 };
with(o){
r = eval("delete test21_value");
}
write("Test21: delete test21_value: " + r);
write("test21_value : " + test21_value);
write("o.test21_value : " + o.test21_value);
}) ();
// Delete variable in multi level with!!!
(function Test22(){
var test22_value = 10;
var o1 = { test22_value : 20 };
var o2 = { test22_value : 30 };
var o3 = { test22_value : 40 };
var o4 = { test22_value : 50 };
with(o1){
with(o2){
with(o3){
with(o4){
r = delete test22_value;
}
}
}
}
write("Test22: delete test22_value: " + r);
write("test22_value : " + test22_value);
write("o1.test22_value : " + o1.test22_value);
write("o2.test22_value : " + o2.test22_value);
write("o3.test22_value : " + o3.test22_value);
write("o4.test22_value : " + o4.test22_value);
}) ();
(function Test23(){
var test23_value = 10;
var o1 = { test23_value : 20 };
var o2 = { test23_value : 30 };
var o3 = { test23_value : 40 };
var o4 = { test23_value : 50 };
with(o1){
with(o2){
with(o3){
with(o4){
r = eval("delete test23_value");
}
}
}
}
write("Test23: delete test23_value: " + r);
write("test23_value : " + test23_value);
write("o1.test23_value : " + o1.test23_value);
write("o2.test23_value : " + o2.test23_value);
write("o3.test23_value : " + o3.test23_value);
write("o4.test23_value : " + o4.test23_value);
}) ();
var Test24_value = 1;
(function Test24(){
var Test24_value = 10;
var o = { Test24_value : 20 };
with(o){
r = delete Test24_value;
}
write("Test24: delete Test24_value: " + r);
write("Test24_value : " + Test24_value);
write("o.Test24_value : " + o.Test24_value);
}) ();
var Test25_value = 1;
(function Test25(){
var o = { Test25_value : 20 };
with(o){
r = eval("delete Test25_value");
}
write("Test25: delete Test25_value: " + r);
write("Test25_value : " + Test25_value);
write("o.Test25_value : " + o.Test25_value);
}) ();
var Test26_value = 1;
(function Test26(){
var o = new Object();
with(o){
r = delete Test26_value;
}
write("Test26: delete Test26_value: " + r);
write("Test26_value : " + Test26_value);
write("o.Test26_value : " + o.Test26_value);
}) ();
var Test27_value = 1;
(function Test27(){
var o = new Object();
with(o){
r = delete Test27_value;
}
write("Test27: delete Test27_value: " + r);
write("Test27_value : " + Test27_value);
write("o.Test27_value : " + o.Test27_value);
}) ();
// Function Declaration. And eval with same name
function Func28()
{
write("Func28.1 :" + typeof(Func28));
eval("var Func28 = 1;");
write("Func28.2 :" + typeof(Func28));
r = delete Func28;
write("Func28: delete Func28: " + r);
write("Func28.3 :" + typeof(Func28));
eval("var Func28 = 1;");
write("Func28.4 :" + typeof(Func28));
eval("r = delete Func28;");
write("Func28: delete Func28: " + r);
write("Func28.5 :" + typeof(Func28));
}
Func28();
(function Expr29()
{
write("Expr29.1 :" + typeof(Expr29));
eval("var Expr29 = 1;");
write("Expr29.2 :" + typeof(Expr29));
r = delete Expr29;
write("Expr29: delete Expr29: " + r);
write("Expr29.3 :" + typeof(Expr29));
eval("var Expr29 = 1;");
write("Expr29.4 :" + typeof(Expr29));
eval("r = delete Expr29;");
write("Expr29: delete Expr29: " + r);
write("Expr29.5 :" + typeof(Expr29));
})()
function Func30()
{
write("Func30.1 :" + typeof(Func30));
eval("var Func30 = 1;");
eval('write("Func30.2 :" + typeof(Func30));');
eval('eval("var Func30 = {};");');
eval('write("Func30.3 :" + typeof(Func30));');
var str = '(function Func30_inner() {' +
' write("Func30.4 :" + typeof(Func30));' +
' r = delete Func30; ' +
' write("Func30: delete Func30: " + r);' +
' write("Func30.5 :" + typeof(Func30));' +
' r = delete Func30; ' +
' write("Func30: delete Func30: " + r);' +
' write("Func30.6 :" + typeof(Func30));' +
'})();';
eval(str);
write("Func30.7 :" + typeof(Func30));
}
Func30();
(function Expr31()
{
write("Expr31.1 :" + typeof(Expr31));
eval("var Expr31 = 1;");
eval('write("Expr31.2 :" + typeof(Expr31));');
eval('eval("var Expr31 = {};");');
eval('write("Expr31.3 :" + typeof(Expr31));');
var str = '(function Expr31_inner() {' +
' write("Expr31.4 :" + typeof(Expr31));' +
' r = delete Expr31; ' +
' write("Expr31: delete Expr31: " + r);' +
' write("Expr31.5 :" + typeof(Expr31));' +
' r = delete Expr31; ' +
' write("Expr31: delete Expr31: " + r);' +
' write("Expr31.6 :" + typeof(Expr31));' +
'})();';
eval(str);
write("Expr31.7 :" + typeof(Expr31));
})()