diff --git a/test/known_issues/test-vm-function-declaration-uses-define.js b/test/known_issues/test-vm-function-declaration-uses-define.js new file mode 100644 index 00000000000000..1cfdd9c368e570 --- /dev/null +++ b/test/known_issues/test-vm-function-declaration-uses-define.js @@ -0,0 +1,21 @@ +'use strict'; + +// https://github.com/nodejs/node/issues/31808 +// function declarations currently call [[Set]] instead of [[DefineOwnProperty]] +// in VM contexts, which violates the ECMA-262 specification: +// https://tc39.es/ecma262/#sec-createglobalfunctionbinding + +const common = require('../common'); +const vm = require('vm'); +const assert = require('assert'); + +const ctx = vm.createContext(); +Object.defineProperty(ctx, 'x', { + enumerable: true, + configurable: true, + get: common.mustNotCall('ctx.x getter must not be called'), + set: common.mustNotCall('ctx.x setter must not be called'), +}); + +vm.runInContext('function x() {}', ctx); +assert.strictEqual(typeof ctx.x, 'function');