blob: a1c678c62d12593c5fefd980cc171d27d99848b4 [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 count = 0;
function check(scen) {
var str = "check" + ++count + ": " + scen;
try {
var result = eval(scen);
str += " #" + result;
} catch (e) {
str += " @" + e.message;
}
write(str);
}
var Test0 = function F_Test0()
{
}
var Test1 = function F_Test1()
{
write(F_Test1);
}
// funcexpression assigned a value
var Test2 = function F_Test2()
{
write(F_Test2);
F_Test2 = 100;
write(F_Test2);
}
//variable with same name
var Test3 = function F_Test3()
{
write("Test3: " + F_Test3);
var F_Test3;
write("Test3: " + F_Test3);
}
// variable with same name with init
var Test4 = function F_Test4()
{
write("Test4: " + F_Test4);
var F_Test4 = 100;
write("Test4: " + F_Test4);
}
// variable with same name with init
var Test5 = function F_Test5()
{
write("Test5: " + F_Test5);
var F_Test5;
F_Test5 = 100;
write("Test5: " + F_Test5);
}
// argument with same name
var Test6 = function F_Test6(F_Test6)
{
write("Test6: " + F_Test6);
}
// argument with same name and assignment
var Test7 = function F_Test7(F_Test7)
{
write("Test7: " + F_Test7);
F_Test7 = 100;
write("Test7: " + F_Test7);
}
// argument with same name and assignment
var Test8 = function F_Test8(F_Test8)
{
write("Test8: " + F_Test8);
F_Test8 = 100;
write("Test8: " + F_Test8);
write("Test8: " + arguments[0]);
}
// argument with same name and assignment
var Test9 = function F_Test9(F_Test9)
{
write("Test9: " + F_Test9);
arguments[0] = 100;
write("Test9: " + F_Test9);
write("Test9: " + arguments[0]);
}
eval("var Test10 = function F_Test10(){}");
var Test11 = function F_Test11()
{
eval('write("Test11: " + F_Test11)');
}
eval("var Test12 = function F_Test12(){eval('write(\"Test12: \" + F_Test12)');}");
// funcexpression assigned a value
var Test13 = function F_Test13()
{
write("Test13: " + F_Test13);
eval("F_Test13 = 100");
write("Test13: " + F_Test13);
}
// variable with same name with init
var Test14 = function F_Test14()
{
write("Test14: " + F_Test14);
eval("var F_Test14 = 100;");
write("Test14: " + F_Test14);
}
// variable with same name with init
var Test15 = function F_Test15()
{
write("Test15: " + F_Test15);
eval("var F_Test15;");
write("Test15: " + F_Test15);
eval("F_Test15 = 100;");
write("Test15: " + F_Test15);
}
// argument with same name
var Test16 = function F_Test16(F_Test16)
{
eval("write(F_Test16)");
}
// argument with same name and assignment
var Test17 = function F_Test17(F_Test17)
{
write("Test17: " + F_Test17);
eval("F_Test17 = 100;");
write("Test17: " + F_Test17);
}
// argument with same name and assignment
var Test18 = function F_Test18(F_Test18)
{
write("Test18: " + F_Test18);
eval("F_Test18 = 100;");
write("Test18: " + F_Test18);
write("Test18: " + arguments[0]);
}
// argument with same name and assignment
var Test19 = function F_Test19(F_Test19)
{
write("Test19: " + F_Test19);
eval("arguments[0] = 100;");
write("Test19: " + F_Test19);
write("Test19: " + arguments[0]);
}
var Test20 = function F_Test20()
{
function inner20()
{
eval("var F_Test20 = 10");
write(F_Test20);
}
inner20();
WScript.Echo(F_Test20);
return 0;
}
var Test21 = function F_Test21()
{
try {
var x = function y() {
var a = function b() {
eval("WScript.Echo(y)");
eval("y = 'legacy only'");
eval("WScript.Echo(y)");
}
a();
}
x();
} catch (ex) {
WScript.Echo(ex);
}
}
var Test22 = function F_Test22()
{
eval('try {} catch(e) {} (function e(x){}); WScript.Echo(e);');
return e;
}
var Test23 = function F_Test23() {
var x = 1;
new (function g() {
with({}) {
WScript.Echo('typeof g === ' + typeof g);
WScript.Echo('typeof F_Test23 === ' + typeof F_Test23);
WScript.Echo('typeof x === ' + typeof x);
if (!x)
g();
}
} );
}
var numTests = 24;
for (var i=0;i<numTests;i++)
{
check("Test" + i + "();");
check("Test" + i + "('hello');");
check("F_Test" + i + "();");
}