test("basic functionality", () => {
function foo() {
i = 3;
expect(i).toBe(3);
var i;
}
foo();
var caught_exception;
try {
j = i;
} catch (e) {
caught_exception = e;
}
expect(caught_exception).not.toBeUndefined();
});
test("Issue #8198 arrow function escapes function scope", () => {
const b = 3;
function f() {
expect(b).toBe(3);
(() => {
expect(b).toBe(3);
var a = "wat";
eval("var b=a;");
expect(b).toBe("wat");
})();
expect(b).toBe(3);
}
f();
expect(b).toBe(3);
});
test("Referencing the declared var in the initializer of a duplicate var declaration", () => {
function c(e) {
e.foo;
}
function h() {}
function go() {
var p = true;
var p = h() || c(p);
return 0;
}
// It's all good as long as go() doesn't throw.
expect(go()).toBe(0);
});
test("direct eval can access variables in the entire scope chain", () => {
var a = 1;
let g = 4;
const j = 8;
const result = (function () {
var e = 2;
let h = 5;
const k = 9;
return (function () {
var f = 3;
let i = 7;
const l = 10;
return (function () {
return eval("a + e + f + g + h + i + j + k + l");
})();
})();
})();
expect(result).toBe(49);
});