123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- test("basic eval() functionality", () => {
- expect(eval("1 + 2")).toBe(3);
- function foo(a) {
- var x = 5;
- eval("x += a");
- return x;
- }
- expect(foo(7)).toBe(12);
- });
- test("returns value of last value-producing statement", () => {
- // See https://tc39.es/ecma262/#sec-block-runtime-semantics-evaluation
- expect(eval("")).toBeUndefined();
- expect(eval("1;;;;;")).toBe(1);
- expect(eval("1;{}")).toBe(1);
- expect(eval("1;var a;")).toBe(1);
- });
- test("syntax error", () => {
- expect(() => {
- eval("{");
- }).toThrowWithMessage(
- SyntaxError,
- "Unexpected token Eof. Expected CurlyClose (line: 1, column: 2)"
- );
- });
- test("returns 1st argument unless 1st argument is a string", () => {
- var stringObject = new String("1 + 2");
- expect(eval(stringObject)).toBe(stringObject);
- });
- // These eval scope tests use function expressions due to bug #8198
- var testValue = "outer";
- test("eval only touches locals if direct use", function () {
- var testValue = "inner";
- expect(globalThis.eval("testValue")).toEqual("outer");
- });
- test("alias to eval works as a global eval", function () {
- var testValue = "inner";
- var eval1 = globalThis.eval;
- expect(eval1("testValue")).toEqual("outer");
- });
- test("eval evaluates all args", function () {
- var i = 0;
- expect(eval("testValue", i++, i++, i++)).toEqual("outer");
- expect(i).toEqual(3);
- });
- test("eval tests for exceptions", function () {
- var i = 0;
- expect(function () {
- eval("testValue", i++, i++, j, i++);
- }).toThrowWithMessage(ReferenceError, "'j' is not defined");
- expect(i).toEqual(2);
- });
- test("direct eval inherits non-strict evaluation", function () {
- expect(eval("01")).toEqual(1);
- });
- test("direct eval inherits strict evaluation", function () {
- "use strict";
- expect(() => {
- eval("01");
- }).toThrowWithMessage(SyntaxError, "Unprefixed octal number not allowed in strict mode");
- });
- test("global eval evaluates as non-strict", function () {
- "use strict";
- expect(globalThis.eval("01"));
- });
|