diff --git a/test/known_issues/test-vm-ownkeys.js b/test/known_issues/test-vm-ownkeys.js new file mode 100644 index 00000000000000..12d3ba7470bf8f --- /dev/null +++ b/test/known_issues/test-vm-ownkeys.js @@ -0,0 +1,28 @@ +'use strict'; + +require('../common'); +const vm = require('vm'); +const assert = require('assert'); + +const sym1 = Symbol('1'); +const sym2 = Symbol('2'); +const sandbox = { + a: true, + [sym1]: true +}; +Object.defineProperty(sandbox, 'b', { value: true }); +Object.defineProperty(sandbox, sym2, { value: true }); + +const ctx = vm.createContext(sandbox); + +// Sanity check +// Please uncomment these when the test is no longer broken +// assert.deepStrictEqual(Reflect.ownKeys(sandbox), ['a', 'b', sym1, sym2]); +// assert.deepStrictEqual(Object.getOwnPropertyNames(sandbox), ['a', 'b']); +// assert.deepStrictEqual(Object.getOwnPropertySymbols(sandbox), [sym1, sym2]); + +const nativeKeys = vm.runInNewContext('Reflect.ownKeys(this);'); +const ownKeys = vm.runInContext('Reflect.ownKeys(this);', ctx); +const restKeys = ownKeys.filter((key) => !nativeKeys.includes(key)); +// this should not fail +assert.deepStrictEqual(Array.from(restKeys), ['a', 'b', sym1, sym2]); diff --git a/test/known_issues/test-vm-ownpropertynames.js b/test/known_issues/test-vm-ownpropertynames.js new file mode 100644 index 00000000000000..cb8184babc8904 --- /dev/null +++ b/test/known_issues/test-vm-ownpropertynames.js @@ -0,0 +1,28 @@ +'use strict'; + +require('../common'); +const vm = require('vm'); +const assert = require('assert'); + +const sym1 = Symbol('1'); +const sym2 = Symbol('2'); +const sandbox = { + a: true, + [sym1]: true +}; +Object.defineProperty(sandbox, 'b', { value: true }); +Object.defineProperty(sandbox, sym2, { value: true }); + +const ctx = vm.createContext(sandbox); + +// Sanity check +// Please uncomment these when the test is no longer broken +// assert.deepStrictEqual(Reflect.ownKeys(sandbox), ['a', 'b', sym1, sym2]); +// assert.deepStrictEqual(Object.getOwnPropertyNames(sandbox), ['a', 'b']); +// assert.deepStrictEqual(Object.getOwnPropertySymbols(sandbox), [sym1, sym2]); + +const nativeNames = vm.runInNewContext('Object.getOwnPropertyNames(this);'); +const ownNames = vm.runInContext('Object.getOwnPropertyNames(this);', ctx); +const restNames = ownNames.filter((name) => !nativeNames.includes(name)); +// this should not fail +assert.deepStrictEqual(Array.from(restNames), ['a', 'b']); diff --git a/test/known_issues/test-vm-ownpropertysymbols.js b/test/known_issues/test-vm-ownpropertysymbols.js new file mode 100644 index 00000000000000..f11c4999cd463b --- /dev/null +++ b/test/known_issues/test-vm-ownpropertysymbols.js @@ -0,0 +1,28 @@ +'use strict'; + +require('../common'); +const vm = require('vm'); +const assert = require('assert'); + +const sym1 = Symbol('1'); +const sym2 = Symbol('2'); +const sandbox = { + a: true, + [sym1]: true +}; +Object.defineProperty(sandbox, 'b', { value: true }); +Object.defineProperty(sandbox, sym2, { value: true }); + +const ctx = vm.createContext(sandbox); + +// Sanity check +// Please uncomment these when the test is no longer broken +// assert.deepStrictEqual(Reflect.ownKeys(sandbox), ['a', 'b', sym1, sym2]); +// assert.deepStrictEqual(Object.getOwnPropertyNames(sandbox), ['a', 'b']); +// assert.deepStrictEqual(Object.getOwnPropertySymbols(sandbox), [sym1, sym2]); + +const nativeSym = vm.runInNewContext('Object.getOwnPropertySymbols(this);'); +const ownSym = vm.runInContext('Object.getOwnPropertySymbols(this);', ctx); +const restSym = ownSym.filter((sym) => !nativeSym.includes(sym)); +// this should not fail +assert.deepStrictEqual(Array.from(restSym), [sym1, sym2]);