mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 22:40:28 +02:00
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
287 lines
6.9 KiB
JavaScript
287 lines
6.9 KiB
JavaScript
function shouldBe(actual, expected) {
|
|
if (actual !== expected)
|
|
throw new Error('bad value: ' + actual);
|
|
}
|
|
|
|
function shouldThrow(func, message) {
|
|
var error = null;
|
|
try {
|
|
func();
|
|
} catch (e) {
|
|
error = e;
|
|
}
|
|
if (!error)
|
|
throw new Error("not thrown.");
|
|
if (String(error) !== message)
|
|
throw new Error("bad error: " + String(error));
|
|
}
|
|
|
|
shouldBe(Reflect.defineProperty.length, 3);
|
|
|
|
shouldThrow(() => {
|
|
Reflect.defineProperty("hello");
|
|
}, `TypeError: Reflect.defineProperty requires the first argument be an object`);
|
|
|
|
shouldThrow(() => {
|
|
Reflect.defineProperty(null);
|
|
}, `TypeError: Reflect.defineProperty requires the first argument be an object`);
|
|
|
|
var object = {};
|
|
shouldBe(object[42], undefined);
|
|
shouldBe(object.hello, undefined);
|
|
shouldBe(Reflect.defineProperty(object, 42, {
|
|
value: 42
|
|
}), true);
|
|
shouldBe(Reflect.defineProperty(object, 'hello', {
|
|
value: 50
|
|
}), true);
|
|
shouldBe(object[42], 42);
|
|
shouldBe(object.hello, 50);
|
|
|
|
function testDescriptor(expected, actual) {
|
|
shouldBe(expected.enumerable, actual.enumerable);
|
|
shouldBe(expected.configurable, actual.configurable);
|
|
shouldBe(expected.writable, actual.writable);
|
|
shouldBe(expected.value, actual.value);
|
|
shouldBe(expected.get, actual.get);
|
|
shouldBe(expected.set, actual.set);
|
|
}
|
|
|
|
function getter() { }
|
|
function setter() { }
|
|
|
|
var object = {};
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {}), true);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: false,
|
|
writable: false,
|
|
enumerable: false,
|
|
value: undefined
|
|
});
|
|
|
|
|
|
var object = {};
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {
|
|
configurable: true
|
|
}), true);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: true,
|
|
writable: false,
|
|
enumerable: false,
|
|
value: undefined
|
|
});
|
|
|
|
var object = {};
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {
|
|
configurable: true,
|
|
enumerable: true
|
|
}), true);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: true,
|
|
writable: false,
|
|
enumerable: true,
|
|
value: undefined
|
|
});
|
|
|
|
var object = {};
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {
|
|
configurable: true,
|
|
enumerable: true,
|
|
writable: true
|
|
}), true);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: true,
|
|
writable: true,
|
|
enumerable: true,
|
|
value: undefined
|
|
});
|
|
|
|
var object = {};
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {
|
|
configurable: true,
|
|
enumerable: true,
|
|
writable: true,
|
|
value: 42
|
|
}), true);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: true,
|
|
writable: true,
|
|
enumerable: true,
|
|
value: 42
|
|
});
|
|
|
|
var object = {};
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {
|
|
configurable: true,
|
|
enumerable: true,
|
|
get: getter
|
|
}), true);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: true,
|
|
enumerable: true,
|
|
get: getter,
|
|
set: undefined
|
|
});
|
|
|
|
var object = {};
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {
|
|
configurable: true,
|
|
enumerable: true,
|
|
set: setter
|
|
}), true);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: true,
|
|
enumerable: true,
|
|
get: undefined,
|
|
set: setter
|
|
});
|
|
|
|
var object = {};
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {
|
|
configurable: true,
|
|
enumerable: true,
|
|
set: setter,
|
|
get: getter
|
|
}), true);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: true,
|
|
enumerable: true,
|
|
get: getter,
|
|
set: setter
|
|
});
|
|
|
|
shouldThrow(() => {
|
|
var object = {};
|
|
Reflect.defineProperty(object, 'cocoa', {
|
|
configurable: true,
|
|
enumerable: true,
|
|
set: setter,
|
|
get: getter,
|
|
value: 42
|
|
});
|
|
}, `TypeError: Invalid property. 'value' present on property with getter or setter.`);
|
|
|
|
shouldThrow(() => {
|
|
var object = {};
|
|
Reflect.defineProperty(object, 'cocoa', {
|
|
configurable: true,
|
|
enumerable: true,
|
|
value: 42,
|
|
set: setter,
|
|
get: getter
|
|
});
|
|
}, `TypeError: Invalid property. 'value' present on property with getter or setter.`);
|
|
|
|
shouldThrow(() => {
|
|
var object = {};
|
|
Reflect.defineProperty(object, 'cocoa', {
|
|
configurable: true,
|
|
enumerable: true,
|
|
writable: false,
|
|
get: getter
|
|
});
|
|
}, `TypeError: Invalid property. 'writable' present on property with getter or setter.`);
|
|
|
|
var object = { cocoa: 42 };
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {
|
|
configurable: true,
|
|
enumerable: true,
|
|
writable: false,
|
|
value: 50
|
|
}), true);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: true,
|
|
enumerable: true,
|
|
writable: false,
|
|
value: 50
|
|
});
|
|
|
|
|
|
var object = { cocoa: 42 };
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {
|
|
writable: false,
|
|
value: 50
|
|
}), true);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: true,
|
|
enumerable: true,
|
|
writable: false,
|
|
value: 50
|
|
});
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {
|
|
writable: true,
|
|
}), true);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: true,
|
|
enumerable: true,
|
|
writable: true,
|
|
value: 50
|
|
});
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {
|
|
writable: false,
|
|
configurable: false,
|
|
value: 50
|
|
}), true);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: false,
|
|
enumerable: true,
|
|
writable: false,
|
|
value: 50
|
|
});
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {
|
|
writable: true,
|
|
}), false);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: false,
|
|
enumerable: true,
|
|
writable: false,
|
|
value: 50
|
|
});
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {
|
|
enumerable: false,
|
|
}), false);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: false,
|
|
enumerable: true,
|
|
writable: false,
|
|
value: 50
|
|
});
|
|
shouldBe(Reflect.defineProperty(object, 'cocoa', {
|
|
enumerable: true,
|
|
}), true);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(object, 'cocoa'), {
|
|
configurable: false,
|
|
enumerable: true,
|
|
writable: false,
|
|
value: 50
|
|
});
|
|
|
|
var array = [];
|
|
shouldBe(Reflect.defineProperty(array, 'length', {
|
|
get: getter,
|
|
set: setter
|
|
}), false);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(array, 'length'), {
|
|
configurable: false,
|
|
enumerable: false,
|
|
writable: true,
|
|
value: 0
|
|
});
|
|
shouldBe(Reflect.defineProperty(array, 'length', {
|
|
writable: false,
|
|
value: 30
|
|
}), true);
|
|
testDescriptor(Object.getOwnPropertyDescriptor(array, 'length'), {
|
|
configurable: false,
|
|
enumerable: false,
|
|
writable: false,
|
|
value: 30
|
|
});
|
|
array.length = 40;
|
|
testDescriptor(Object.getOwnPropertyDescriptor(array, 'length'), {
|
|
configurable: false,
|
|
enumerable: false,
|
|
writable: false,
|
|
value: 30
|
|
});
|