11cb0ef41Sopenharmony_ci'use strict';
21cb0ef41Sopenharmony_ciconst common = require('../common');
31cb0ef41Sopenharmony_ciconst assert = require('assert');
41cb0ef41Sopenharmony_ciconst repl = require('repl');
51cb0ef41Sopenharmony_ci
61cb0ef41Sopenharmony_ci{
71cb0ef41Sopenharmony_ci  let evalCalledWithExpectedArgs = false;
81cb0ef41Sopenharmony_ci
91cb0ef41Sopenharmony_ci  const options = {
101cb0ef41Sopenharmony_ci    eval: common.mustCall((cmd, context) => {
111cb0ef41Sopenharmony_ci      // Assertions here will not cause the test to exit with an error code
121cb0ef41Sopenharmony_ci      // so set a boolean that is checked later instead.
131cb0ef41Sopenharmony_ci      evalCalledWithExpectedArgs = (cmd === 'function f() {}\n' &&
141cb0ef41Sopenharmony_ci                                    context.foo === 'bar');
151cb0ef41Sopenharmony_ci    })
161cb0ef41Sopenharmony_ci  };
171cb0ef41Sopenharmony_ci
181cb0ef41Sopenharmony_ci  const r = repl.start(options);
191cb0ef41Sopenharmony_ci  r.context = { foo: 'bar' };
201cb0ef41Sopenharmony_ci
211cb0ef41Sopenharmony_ci  try {
221cb0ef41Sopenharmony_ci    // Default preprocessor transforms
231cb0ef41Sopenharmony_ci    //  function f() {}  to
241cb0ef41Sopenharmony_ci    //  var f = function f() {}
251cb0ef41Sopenharmony_ci    // Test to ensure that original input is preserved.
261cb0ef41Sopenharmony_ci    // Reference: https://github.com/nodejs/node/issues/9743
271cb0ef41Sopenharmony_ci    r.write('function f() {}\n');
281cb0ef41Sopenharmony_ci  } finally {
291cb0ef41Sopenharmony_ci    r.write('.exit\n');
301cb0ef41Sopenharmony_ci  }
311cb0ef41Sopenharmony_ci
321cb0ef41Sopenharmony_ci  assert(evalCalledWithExpectedArgs);
331cb0ef41Sopenharmony_ci}
34