'use strict';
const common = require('../common');
const assert = require('assert');
const repl = require('repl');

{
  let evalCalledWithExpectedArgs = false;

  const options = {
    eval: common.mustCall((cmd, context) => {
      // Assertions here will not cause the test to exit with an error code
      // so set a boolean that is checked later instead.
      evalCalledWithExpectedArgs = (cmd === 'function f() {}\n' &&
                                    context.foo === 'bar');
    })
  };

  const r = repl.start(options);
  r.context = { foo: 'bar' };

  try {
    // Default preprocessor transforms
    //  function f() {}  to
    //  var f = function f() {}
    // Test to ensure that original input is preserved.
    // Reference: https://github.com/nodejs/node/issues/9743
    r.write('function f() {}\n');
  } finally {
    r.write('.exit\n');
  }

  assert(evalCalledWithExpectedArgs);
}
