blob: 89fc676eaf2c2a9e183135ac522a53f6af1a9c3a [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 print(x) { WScript.Echo(x+""); }
var inFunctionTests =
[
// eval gets scope for let/const variables => they do not leak out, no redeclaration error with vars
function () {
var x = 1;
eval("let x = 2;");
print(x);
},
function () {
var x = 1;
eval("const x = 2;");
print(x);
},
function () {
eval("let x = 2;");
var x = 1;
print(x);
},
function () {
eval("const x = 2;");
var x = 1;
print(x);
},
// var leaks out of eval in non-strict mode => redeclaration error with let/consts
function () {
let x = 1;
eval("var x = 2;");
print(x);
},
function () {
const x = 1;
eval("var x = 2;");
print(x);
},
function () {
eval("var x = 2;");
let x = 1;
print(x);
},
function () {
eval("var x = 2;");
const x = 1;
print(x);
},
];
for (let i = 0; i < inFunctionTests.length; i++)
{
try {
inFunctionTests[i]();
} catch (e) {
print(e);
}
}
// global tests
// eval gets scope for let/const variables => they do not leak out, no redeclaration error with vars
var a = 1;
eval("let a = 2;");
print(a);
var b = 1;
eval("const b = 2;");
print(b);
eval("let c = 2;");
var c = 1;
print(c);
eval("const d = 2;");
var d = 1;
print(d);
// var leaks out of eval in non-strict mode => redeclaration error with let/consts
let e = 1;
try { eval("var e = 2;"); print(e); } catch (e) { print(e); }
const f = 1;
try { eval("var f = 2;"); print(f); } catch (e) { print(e); }
var hadException = false;
try { eval("var g = 2;"); } catch (e) { print(e); hadException = true; }
let g = 1;
if (!hadException) print(g);
hadException = false;
try { eval("var h = 2;"); } catch (e) { print(e); hadException = true; }
const h = 1;
if (!hadException) print(h);