jest.autoMockOff();

const babel = require("@babel/core");
const helper = require("../src");

function getPath(source) {
  let path;

  babel.transform(source, {
    babelrc: false,
    plugins: [
      function({ traverse }) {
        (traverse.clearCache || traverse.cache.clear)();
        return {
          visitor: {
            Program(programPath) {
              path = programPath;
            }
          }
        };
      }
    ]
  });

  return path;
}

describe("babel-helper-mark-eval-scopes", () => {
  it("getEvalScopes - should give a set of scopes which contains eval", () => {
    const source = `
      function foo() {
        function bar() {
          eval(";");
        }
        function baz() {
          noeval();
        }
      }
    `;

    const program = getPath(source);
    const evalScopes = [...helper.getEvalScopes(program)];

    expect(evalScopes).toContain(program.scope);
    expect(evalScopes).toContain(program.get("body.0.body.body.0").scope);
    expect(evalScopes).not.toContain(program.get("body.0.body.body.1").scope);
  });
});
