From ed116dc3c65a6d568e2de7c09bd1c6f9db2c9b24 Mon Sep 17 00:00:00 2001 From: Franziska Hinkelmann Date: Mon, 23 Oct 2017 16:06:35 +0200 Subject: [PATCH] test: fix test for inherited properties on vm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The known issue is fixed with https://github.com/nodejs/node/pull/16293. The text needs to call `Object.hasOwnProperty(this)` instead of `this.hasOwnProperty()`, otherwise `this` is from the wrong context is used. Add a second test case taken verbatim from issue https://github.com/nodejs/node/issues/5350 PR-URL: https://github.com/nodejs/node/pull/16411 Fixes: https://github.com/nodejs/node/issues/5350 Ref: https://github.com/nodejs/node/pull/16293 Reviewed-By: Michaƫl Zasso Reviewed-By: Colin Ihrig --- .../test-vm-inherited_properties.js | 20 ---------- test/parallel/test-vm-inherited_properties.js | 38 +++++++++++++++++++ 2 files changed, 38 insertions(+), 20 deletions(-) delete mode 100644 test/known_issues/test-vm-inherited_properties.js create mode 100644 test/parallel/test-vm-inherited_properties.js diff --git a/test/known_issues/test-vm-inherited_properties.js b/test/known_issues/test-vm-inherited_properties.js deleted file mode 100644 index 3df9c57219d8be..00000000000000 --- a/test/known_issues/test-vm-inherited_properties.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; -// Ref: https://github.com/nodejs/node/issues/5350 - -require('../common'); -const vm = require('vm'); -const assert = require('assert'); - -const base = { - propBase: 1 -}; - -const sandbox = Object.create(base, { - propSandbox: { value: 3 } -}); - -const context = vm.createContext(sandbox); - -const result = vm.runInContext('this.hasOwnProperty("propBase");', context); - -assert.strictEqual(result, false); diff --git a/test/parallel/test-vm-inherited_properties.js b/test/parallel/test-vm-inherited_properties.js new file mode 100644 index 00000000000000..53087e1596e5c8 --- /dev/null +++ b/test/parallel/test-vm-inherited_properties.js @@ -0,0 +1,38 @@ +'use strict'; + +require('../common'); + +const vm = require('vm'); +const assert = require('assert'); + +let base = { + propBase: 1 +}; + +let sandbox = Object.create(base, { + propSandbox: { value: 3 } +}); + +const context = vm.createContext(sandbox); + +let result = vm.runInContext('Object.hasOwnProperty(this, "propBase");', + context); + +assert.strictEqual(result, false); + +// Ref: https://github.com/nodejs/node/issues/5350 +base = Object.create(null); +base.x = 1; +base.y = 2; + +sandbox = Object.create(base); +sandbox.z = 3; + +assert.deepStrictEqual(Object.keys(sandbox), ['z']); + +const code = 'x = 0; z = 4;'; +result = vm.runInNewContext(code, sandbox); +assert.strictEqual(result, 4); + +// Check that y is not an own property. +assert.deepStrictEqual(Object.keys(sandbox), ['z', 'x']);