mirror of
https://github.com/denoland/deno.git
synced 2024-12-27 01:29:14 -05:00
897159dc6e
rewrite vm implementation to increase compat. vm.Module+importModuleDynamically callbacks should be added in a followup.
168 lines
5.2 KiB
JavaScript
168 lines
5.2 KiB
JavaScript
// deno-fmt-ignore-file
|
|
// deno-lint-ignore-file
|
|
|
|
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
|
// Taken from Node 18.12.1
|
|
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
|
|
|
'use strict';
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const vm = require('vm');
|
|
|
|
const getSetSymbolReceivingFunction = Symbol('sym-1');
|
|
const getSetSymbolReceivingNumber = Symbol('sym-2');
|
|
const symbolReceivingNumber = Symbol('sym-3');
|
|
const unknownSymbolReceivingNumber = Symbol('sym-4');
|
|
|
|
const window = createWindow();
|
|
|
|
const descriptor1 = Object.getOwnPropertyDescriptor(
|
|
window.globalProxy,
|
|
'getSetPropReceivingFunction'
|
|
);
|
|
assert.strictEqual(typeof descriptor1.get, 'function');
|
|
assert.strictEqual(typeof descriptor1.set, 'function');
|
|
assert.strictEqual(descriptor1.configurable, true);
|
|
|
|
const descriptor2 = Object.getOwnPropertyDescriptor(
|
|
window.globalProxy,
|
|
'getSetPropReceivingNumber'
|
|
);
|
|
assert.strictEqual(typeof descriptor2.get, 'function');
|
|
assert.strictEqual(typeof descriptor2.set, 'function');
|
|
assert.strictEqual(descriptor2.configurable, true);
|
|
|
|
const descriptor3 = Object.getOwnPropertyDescriptor(
|
|
window.globalProxy,
|
|
'propReceivingNumber'
|
|
);
|
|
assert.strictEqual(descriptor3.value, 44);
|
|
|
|
const descriptor4 = Object.getOwnPropertyDescriptor(
|
|
window.globalProxy,
|
|
'unknownPropReceivingNumber'
|
|
);
|
|
assert.strictEqual(descriptor4, undefined);
|
|
|
|
const descriptor5 = Object.getOwnPropertyDescriptor(
|
|
window.globalProxy,
|
|
getSetSymbolReceivingFunction
|
|
);
|
|
assert.strictEqual(typeof descriptor5.get, 'function');
|
|
assert.strictEqual(typeof descriptor5.set, 'function');
|
|
assert.strictEqual(descriptor5.configurable, true);
|
|
|
|
const descriptor6 = Object.getOwnPropertyDescriptor(
|
|
window.globalProxy,
|
|
getSetSymbolReceivingNumber
|
|
);
|
|
assert.strictEqual(typeof descriptor6.get, 'function');
|
|
assert.strictEqual(typeof descriptor6.set, 'function');
|
|
assert.strictEqual(descriptor6.configurable, true);
|
|
|
|
const descriptor7 = Object.getOwnPropertyDescriptor(
|
|
window.globalProxy,
|
|
symbolReceivingNumber
|
|
);
|
|
assert.strictEqual(descriptor7.value, 48);
|
|
|
|
const descriptor8 = Object.getOwnPropertyDescriptor(
|
|
window.globalProxy,
|
|
unknownSymbolReceivingNumber
|
|
);
|
|
assert.strictEqual(descriptor8, undefined);
|
|
|
|
const descriptor9 = Object.getOwnPropertyDescriptor(
|
|
window.globalProxy,
|
|
'getSetPropThrowing'
|
|
);
|
|
assert.strictEqual(typeof descriptor9.get, 'function');
|
|
assert.strictEqual(typeof descriptor9.set, 'function');
|
|
assert.strictEqual(descriptor9.configurable, true);
|
|
|
|
const descriptor10 = Object.getOwnPropertyDescriptor(
|
|
window.globalProxy,
|
|
'nonWritableProp'
|
|
);
|
|
assert.strictEqual(descriptor10.value, 51);
|
|
assert.strictEqual(descriptor10.writable, false);
|
|
|
|
// Regression test for GH-42962. This assignment should not throw.
|
|
window.globalProxy.getSetPropReceivingFunction = () => {};
|
|
assert.strictEqual(window.globalProxy.getSetPropReceivingFunction, 42);
|
|
|
|
window.globalProxy.getSetPropReceivingNumber = 143;
|
|
assert.strictEqual(window.globalProxy.getSetPropReceivingNumber, 43);
|
|
|
|
window.globalProxy.propReceivingNumber = 144;
|
|
assert.strictEqual(window.globalProxy.propReceivingNumber, 144);
|
|
|
|
window.globalProxy.unknownPropReceivingNumber = 145;
|
|
assert.strictEqual(window.globalProxy.unknownPropReceivingNumber, 145);
|
|
|
|
window.globalProxy[getSetSymbolReceivingFunction] = () => {};
|
|
assert.strictEqual(window.globalProxy[getSetSymbolReceivingFunction], 46);
|
|
|
|
window.globalProxy[getSetSymbolReceivingNumber] = 147;
|
|
assert.strictEqual(window.globalProxy[getSetSymbolReceivingNumber], 47);
|
|
|
|
window.globalProxy[symbolReceivingNumber] = 148;
|
|
assert.strictEqual(window.globalProxy[symbolReceivingNumber], 148);
|
|
|
|
window.globalProxy[unknownSymbolReceivingNumber] = 149;
|
|
assert.strictEqual(window.globalProxy[unknownSymbolReceivingNumber], 149);
|
|
|
|
assert.throws(
|
|
() => (window.globalProxy.getSetPropThrowing = 150),
|
|
new Error('setter called')
|
|
);
|
|
assert.strictEqual(window.globalProxy.getSetPropThrowing, 50);
|
|
|
|
assert.throws(
|
|
() => (window.globalProxy.nonWritableProp = 151),
|
|
new TypeError('Cannot redefine property: nonWritableProp')
|
|
);
|
|
assert.strictEqual(window.globalProxy.nonWritableProp, 51);
|
|
|
|
function createWindow() {
|
|
const obj = {};
|
|
vm.createContext(obj);
|
|
Object.defineProperty(obj, 'getSetPropReceivingFunction', {
|
|
get: common.mustCall(() => 42),
|
|
set: common.mustCall(),
|
|
configurable: true,
|
|
});
|
|
Object.defineProperty(obj, 'getSetPropReceivingNumber', {
|
|
get: common.mustCall(() => 43),
|
|
set: common.mustCall(),
|
|
configurable: true,
|
|
});
|
|
obj.propReceivingNumber = 44;
|
|
Object.defineProperty(obj, getSetSymbolReceivingFunction, {
|
|
get: common.mustCall(() => 46),
|
|
set: common.mustCall(),
|
|
configurable: true,
|
|
});
|
|
Object.defineProperty(obj, getSetSymbolReceivingNumber, {
|
|
get: common.mustCall(() => 47),
|
|
set: common.mustCall(),
|
|
configurable: true,
|
|
});
|
|
obj[symbolReceivingNumber] = 48;
|
|
Object.defineProperty(obj, 'getSetPropThrowing', {
|
|
get: common.mustCall(() => 50),
|
|
set: common.mustCall(() => {
|
|
throw new Error('setter called');
|
|
}),
|
|
configurable: true,
|
|
});
|
|
Object.defineProperty(obj, 'nonWritableProp', {
|
|
value: 51,
|
|
writable: false,
|
|
});
|
|
|
|
obj.globalProxy = vm.runInContext('this', obj);
|
|
|
|
return obj;
|
|
}
|