mirror of
https://github.com/tc39/test262.git
synced 2025-05-04 15:00:42 +02:00
117 lines
4.0 KiB
JavaScript
117 lines
4.0 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(ns, , {}) must return false'
|
|
);
|
|
assert.throws(TypeError, function() {
|
|
Object.defineProperty(ns, key, {});
|
|
}, 'Object.defineProperty(ns, key, {}) throws a TypeError exception');
|
|
}
|
|
|
|
|
|
// Own properties. No change requested.
|
|
|
|
for (const key of ([...exported, Symbol.toStringTag])) {
|
|
assert.sameValue(
|
|
Reflect.defineProperty(ns, key, {}),
|
|
true,
|
|
'Reflect.defineProperty(ns, , {}) must return true'
|
|
);
|
|
assert.sameValue(
|
|
Object.defineProperty(ns, key, {}),
|
|
ns,
|
|
'Object.defineProperty(ns, , {}) returns ns'
|
|
);
|
|
|
|
}
|
|
|
|
assert.sameValue(
|
|
Reflect.defineProperty(ns, 'indirect',
|
|
{writable: true, enumerable: true, configurable: false}),
|
|
true,
|
|
'Reflect.defineProperty(ns, "indirect", {writable: true, enumerable: true, configurable: false}) must return true'
|
|
);
|
|
assert.sameValue(
|
|
Object.defineProperty(ns, 'indirect',
|
|
{writable: true, enumerable: true, configurable: false}),
|
|
ns,
|
|
'Object.defineProperty(ns, "indirect", {writable: true, enumerable: true, configurable: false}) returns ns'
|
|
);
|
|
|
|
assert.sameValue(
|
|
Reflect.defineProperty(ns, Symbol.toStringTag,
|
|
{value: "Module", writable: false, enumerable: false,
|
|
configurable: false}),
|
|
true,
|
|
'Reflect.defineProperty( ns, Symbol.toStringTag, {value: "Module", writable: false, enumerable: false, configurable: false} ) must return true'
|
|
);
|
|
assert.sameValue(
|
|
Object.defineProperty(ns, Symbol.toStringTag,
|
|
{value: "Module", writable: false, enumerable: false,
|
|
configurable: false}),
|
|
ns,
|
|
'Object.defineProperty( ns, Symbol.toStringTag, {value: "Module", writable: false, enumerable: false, configurable: false} ) returns ns'
|
|
);
|
|
|
|
|
|
// Own properties. Change requested.
|
|
|
|
for (const key of ([...exported, Symbol.toStringTag])) {
|
|
assert.sameValue(
|
|
Reflect.defineProperty(ns, key, {value: 123}),
|
|
false,
|
|
'Reflect.defineProperty(ns, , {value: 123}) must return false'
|
|
);
|
|
assert.throws(TypeError, function() {
|
|
Object.defineProperty(ns, key, {value: 123});
|
|
}, 'Object.defineProperty(ns, key, {value: 123}) throws a TypeError exception');
|
|
}
|
|
|
|
assert.sameValue(
|
|
Reflect.defineProperty(ns, 'indirect',
|
|
{writable: true, enumerable: true, configurable: true}),
|
|
false,
|
|
'Reflect.defineProperty(ns, "indirect", {writable: true, enumerable: true, configurable: true}) must return false'
|
|
);
|
|
assert.throws(TypeError, function() {
|
|
Object.defineProperty(ns, 'indirect',
|
|
{writable: true, enumerable: true, configurable: true});
|
|
}, 'Object.defineProperty(ns, "indirect", {writable: true, enumerable: true, configurable: true}) throws a TypeError exception');
|
|
|
|
assert.sameValue(
|
|
Reflect.defineProperty(ns, Symbol.toStringTag,
|
|
{value: "module", writable: false, enumerable: false,
|
|
configurable: false}),
|
|
false,
|
|
'Reflect.defineProperty( ns, Symbol.toStringTag, {value: "module", writable: false, enumerable: false, configurable: false} ) must return false'
|
|
);
|
|
assert.throws(TypeError, function() {
|
|
Object.defineProperty(ns, Symbol.toStringTag,
|
|
{value: "module", writable: false, enumerable: false,
|
|
configurable: false});
|
|
}, 'Object.defineProperty(ns, Symbol.toStringTag, {value: "module", writable: false, enumerable: false, configurable: false}) throws a TypeError exception');
|