mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 14:30:27 +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)
207 lines
5.9 KiB
JavaScript
207 lines
5.9 KiB
JavaScript
function shouldBe(actual, expected) {
|
|
if (actual !== expected)
|
|
throw new Error('bad value: ' + actual);
|
|
}
|
|
|
|
function unreachable()
|
|
{
|
|
throw new Error('unreachable');
|
|
}
|
|
|
|
function receiverTest(object, receiver)
|
|
{
|
|
shouldBe(Reflect.set(object, 'Cocoa', 42, receiver), true);
|
|
shouldBe(Reflect.get(receiver, 'Cocoa'), 42);
|
|
shouldBe(Reflect.get(object, 'Cocoa'), undefined);
|
|
|
|
// Existing.
|
|
shouldBe(Reflect.set(object, 'Matcha', 40), true);
|
|
shouldBe(Reflect.get(object, 'Matcha'), 40);
|
|
shouldBe(Reflect.set(object, 'Matcha', 42, receiver), true);
|
|
shouldBe(Reflect.get(receiver, 'Matcha'), 42);
|
|
shouldBe(Reflect.get(object, 'Matcha'), 40);
|
|
|
|
// Existing non writable own descriptor.
|
|
Reflect.defineProperty(object, 'Cappuccino', {
|
|
value: 'nice',
|
|
writable: false
|
|
});
|
|
shouldBe(Reflect.set(object, 'Cappuccino', 42, receiver), false);
|
|
shouldBe(Reflect.get(receiver, 'Cappuccino'), undefined);
|
|
shouldBe(receiver.hasOwnProperty('Cappuccino'), false);
|
|
shouldBe(Reflect.get(object, 'Cappuccino'), 'nice');
|
|
|
|
// Existing non writable receiver descriptor.
|
|
Reflect.defineProperty(receiver, 'Kilimanjaro', {
|
|
value: 'good',
|
|
writable: false
|
|
});
|
|
shouldBe(Reflect.set(object, 'Kilimanjaro', 42, receiver), false);
|
|
shouldBe(Reflect.get(receiver, 'Kilimanjaro'), 'good');
|
|
shouldBe(receiver.hasOwnProperty('Kilimanjaro'), true);
|
|
shouldBe(Reflect.get(object, 'Kilimanjaro'), undefined);
|
|
shouldBe(object.hasOwnProperty('Kilimanjaro'), false);
|
|
|
|
shouldBe(Reflect.set(object, 'Kilimanjaro', 42, 'receiver'), false);
|
|
|
|
// Receiver accessors.
|
|
shouldBe(Reflect.defineProperty(receiver, 'Mocha', {
|
|
get()
|
|
{
|
|
return 42;
|
|
},
|
|
configurable: true
|
|
}), true);
|
|
shouldBe(Reflect.set(object, 'Mocha', 42, receiver), false);
|
|
shouldBe(Reflect.defineProperty(receiver, 'Mocha', {
|
|
set(value)
|
|
{
|
|
unreachable();
|
|
},
|
|
configurable: true
|
|
}), true);
|
|
shouldBe(Reflect.set(object, 'Mocha', 42, receiver), false);
|
|
shouldBe(receiver.value, undefined);
|
|
shouldBe(Reflect.defineProperty(object, 'Mocha', {
|
|
get(value)
|
|
{
|
|
},
|
|
configurable: true
|
|
}), true);
|
|
shouldBe(Reflect.set(object, 'Mocha', 42, receiver), false);
|
|
shouldBe(receiver.value, undefined);
|
|
shouldBe(Reflect.defineProperty(object, 'Mocha', {
|
|
set(value)
|
|
{
|
|
shouldBe(this, receiver);
|
|
this.value = value;
|
|
},
|
|
configurable: true
|
|
}), true);
|
|
shouldBe(Reflect.set(object, 'Mocha', 42, receiver), true);
|
|
shouldBe(receiver.value, 42);
|
|
shouldBe(object.value, undefined);
|
|
}
|
|
|
|
function receiverTestIndexed(object, receiver)
|
|
{
|
|
shouldBe(Reflect.set(object, 11, 42, receiver), true);
|
|
shouldBe(Reflect.get(receiver, 11), 42);
|
|
shouldBe(Reflect.get(object, 11), undefined);
|
|
|
|
// Existing.
|
|
shouldBe(Reflect.set(object, 12, 40), true);
|
|
shouldBe(Reflect.get(object, 12), 40);
|
|
shouldBe(Reflect.set(object, 12, 42, receiver), true);
|
|
shouldBe(Reflect.get(receiver, 12), 42);
|
|
shouldBe(Reflect.get(object, 12), 40);
|
|
|
|
// Existing non writable own descriptor.
|
|
Reflect.defineProperty(object, 13, {
|
|
value: 'nice',
|
|
writable: false
|
|
});
|
|
shouldBe(Reflect.set(object, 13, 42, receiver), false);
|
|
shouldBe(Reflect.get(receiver, 13), undefined);
|
|
shouldBe(receiver.hasOwnProperty(13), false);
|
|
shouldBe(Reflect.get(object, 13), 'nice');
|
|
|
|
// Existing non writable receiver descriptor.
|
|
Reflect.defineProperty(receiver, 14, {
|
|
value: 'good',
|
|
writable: false
|
|
});
|
|
shouldBe(Reflect.set(object, 14, 42, receiver), false);
|
|
shouldBe(Reflect.get(receiver, 14), 'good');
|
|
shouldBe(receiver.hasOwnProperty(14), true);
|
|
shouldBe(Reflect.get(object, 14), undefined);
|
|
shouldBe(object.hasOwnProperty(14), false);
|
|
|
|
// Receiver is a primitive value.
|
|
shouldBe(Reflect.set(object, 14, 42, 'receiver'), false);
|
|
|
|
// Receiver accessors.
|
|
shouldBe(Reflect.defineProperty(receiver, 15, {
|
|
get()
|
|
{
|
|
return 42;
|
|
},
|
|
configurable: true
|
|
}), true);
|
|
shouldBe(Reflect.set(object, 15, 42, receiver), false);
|
|
shouldBe(Reflect.defineProperty(receiver, 15, {
|
|
set(value)
|
|
{
|
|
unreachable();
|
|
},
|
|
configurable: true
|
|
}), true);
|
|
shouldBe(Reflect.set(object, 15, 42, receiver), false);
|
|
shouldBe(receiver.value, undefined);
|
|
shouldBe(Reflect.defineProperty(object, 15, {
|
|
get(value)
|
|
{
|
|
},
|
|
configurable: true
|
|
}), true);
|
|
shouldBe(Reflect.set(object, 15, 42, receiver), false);
|
|
shouldBe(receiver.value, undefined);
|
|
shouldBe(Reflect.defineProperty(object, 15, {
|
|
set(value)
|
|
{
|
|
shouldBe(this, receiver);
|
|
this.value = value;
|
|
},
|
|
configurable: true
|
|
}), true);
|
|
shouldBe(Reflect.set(object, 15, 42, receiver), true);
|
|
shouldBe(receiver.value, 42);
|
|
shouldBe(object.value, undefined);
|
|
}
|
|
|
|
// The global object is wrapped with the JSProxy.
|
|
var global = this;
|
|
|
|
receiverTest(global, {});
|
|
receiverTestIndexed(global, {});
|
|
Reflect.defineProperty(global, 'OK1', {
|
|
set: function (value) {
|
|
shouldBe(this, global);
|
|
}
|
|
});
|
|
function test1()
|
|
{
|
|
global.OK1 = 'Hello';
|
|
}
|
|
noInline(test1);
|
|
for (var i = 0; i < 1e4; ++i)
|
|
test1();
|
|
|
|
Reflect.defineProperty(global, 'OK2', {
|
|
set: function (value) {
|
|
'use strict';
|
|
shouldBe(this, global);
|
|
}
|
|
});
|
|
function test2()
|
|
{
|
|
global.OK2 = 'Hello';
|
|
}
|
|
noInline(test2);
|
|
for (var i = 0; i < 1e4; ++i)
|
|
test2();
|
|
|
|
var receiver = {};
|
|
Reflect.defineProperty(global, 'OK3', {
|
|
set: function (value) {
|
|
shouldBe(this, receiver);
|
|
}
|
|
});
|
|
function test3()
|
|
{
|
|
shouldBe(Reflect.set(global, 'OK3', 'value', receiver), true);
|
|
}
|
|
noInline(test3);
|
|
for (var i = 0; i < 1e4; ++i)
|
|
test3();
|