'use strict'; require('../common'); var assert = require('assert'); var vm = require('vm'); // src/node_contextify.cc filters out the Proxy object from the parent // context. Make sure that the new context has a Proxy object of its own. var sandbox = {}; vm.runInNewContext('this.Proxy = Proxy', sandbox); assert.strictEqual(typeof sandbox.Proxy, 'function'); assert.notStrictEqual(sandbox.Proxy, Proxy); // Unless we copy the Proxy object explicitly, of course. sandbox = { Proxy: Proxy }; vm.runInNewContext('this.Proxy = Proxy', sandbox); assert.strictEqual(typeof sandbox.Proxy, 'function'); assert.strictEqual(sandbox.Proxy, Proxy); // Handle a sandbox that throws while copying properties assert.throws(() => { const handler = { getOwnPropertyDescriptor: (target, prop) => { throw new Error('whoops'); } }; const sandbox = new Proxy({foo: 'bar'}, handler); const context = vm.createContext(sandbox); vm.runInContext('', context); }, /whoops/);