mirror of
https://github.com/tc39/test262.git
synced 2025-05-04 06:50:32 +02:00
This reverts commit b690cb67be9b487eb10156c03e2c00869e88cc9d, reversing changes made to 50dd431dffe5cf86e9064a652d6b01dbbe542cf0. This is necessary because the reverted changeset reduced coverage by an unknown extent.
138 lines
3.7 KiB
JavaScript
138 lines
3.7 KiB
JavaScript
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
|
// This code is governed by the BSD license found in the LICENSE file.
|
|
/*---
|
|
esid: sec-module-namespace-exotic-objects-defineownproperty-p-desc
|
|
description: >
|
|
The [[DefineOwnProperty]] internal method returns `true` if no change is
|
|
requested, and `false` otherwise.
|
|
flags: [module]
|
|
features: [Symbol.iterator, Reflect, Symbol, Symbol.toStringTag]
|
|
---*/
|
|
|
|
import * as ns from './define-own-property.js';
|
|
export var local1;
|
|
var local2;
|
|
export { local2 as renamed };
|
|
export { local1 as indirect } from './define-own-property.js';
|
|
var sym = Symbol('test262');
|
|
|
|
const exported = ['local1', 'renamed', 'indirect'];
|
|
|
|
|
|
// Non-existant properties.
|
|
|
|
for (const key of ['local2', 0, sym, Symbol.iterator]) {
|
|
assert.sameValue(
|
|
Reflect.defineProperty(ns, key, {}),
|
|
false,
|
|
'Reflect.defineProperty: ' + key.toString()
|
|
);
|
|
assert.throws(TypeError, function() {
|
|
Object.defineProperty(ns, key, {});
|
|
}, 'Object.defineProperty: ' + key.toString());
|
|
}
|
|
|
|
|
|
// Own properties. No change requested.
|
|
|
|
for (const key of ([...exported, Symbol.toStringTag])) {
|
|
assert.sameValue(
|
|
Reflect.defineProperty(ns, key, {}),
|
|
true,
|
|
'Reflect.defineProperty: ' + key.toString()
|
|
);
|
|
assert.sameValue(
|
|
Object.defineProperty(ns, key, {}),
|
|
ns,
|
|
'Object.defineProperty: ' + key.toString()
|
|
);
|
|
|
|
}
|
|
|
|
assert.sameValue(
|
|
Reflect.defineProperty(ns, 'indirect',
|
|
{writable: true, enumerable: true, configurable: false}),
|
|
true,
|
|
'Reflect.defineProperty: indirect'
|
|
);
|
|
assert.sameValue(
|
|
Object.defineProperty(ns, 'indirect',
|
|
{writable: true, enumerable: true, configurable: false}),
|
|
ns,
|
|
'Object.defineProperty: indirect'
|
|
);
|
|
|
|
assert.sameValue(
|
|
Reflect.defineProperty(ns, Symbol.toStringTag,
|
|
{value: "Module", writable: false, enumerable: false,
|
|
configurable: false}),
|
|
true,
|
|
'Reflect.defineProperty: Symbol.toStringTag'
|
|
);
|
|
assert.sameValue(
|
|
Object.defineProperty(ns, Symbol.toStringTag,
|
|
{value: "Module", writable: false, enumerable: false,
|
|
configurable: false}),
|
|
ns,
|
|
'Object.defineProperty: Symbol.toStringTag'
|
|
);
|
|
|
|
|
|
// Own properties. Change requested.
|
|
|
|
for (const key of ([...exported, Symbol.toStringTag])) {
|
|
assert.sameValue(
|
|
Reflect.defineProperty(ns, key, {value: 123}),
|
|
false,
|
|
'Reflect.defineProperty: ' + key.toString()
|
|
);
|
|
assert.throws(TypeError, function() {
|
|
Object.defineProperty(ns, key, {value: 123});
|
|
}, 'Object.defineProperty: ' + key.toString());
|
|
}
|
|
|
|
assert.sameValue(
|
|
Reflect.defineProperty(ns, 'indirect',
|
|
{writable: true, enumerable: true, configurable: true}),
|
|
false,
|
|
'Reflect.defineProperty: indirect'
|
|
);
|
|
assert.throws(TypeError, function() {
|
|
Object.defineProperty(ns, 'indirect',
|
|
{writable: true, enumerable: true, configurable: true});
|
|
}, 'Object.defineProperty: indirect');
|
|
|
|
assert.sameValue(
|
|
Reflect.defineProperty(ns, Symbol.toStringTag,
|
|
{value: "module", writable: false, enumerable: false,
|
|
configurable: false}),
|
|
false,
|
|
'Reflect.defineProperty: Symbol.toStringTag'
|
|
);
|
|
assert.throws(TypeError, function() {
|
|
Object.defineProperty(ns, Symbol.toStringTag,
|
|
{value: "module", writable: false, enumerable: false,
|
|
configurable: false});
|
|
}, 'Object.defineProperty: Symbol.toStringTag');
|
|
|
|
|
|
// Indirect change requested through Object.freeze
|
|
|
|
// Try freezing more times than there are exported properties
|
|
for (let i = 1; i < exported.length + 2; i++) {
|
|
assert.throws(
|
|
TypeError,
|
|
function () {
|
|
Object.freeze(ns);
|
|
},
|
|
"Object.freeze: " + String(i)
|
|
);
|
|
}
|
|
|
|
for (const key of exported) {
|
|
const desc = Object.getOwnPropertyDescriptor(ns, key);
|
|
assert.sameValue(desc.writable, true, String(key) + " writable");
|
|
}
|
|
|
|
assert(!Object.isFrozen(ns), "namespace object not frozen");
|