1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/licenses/publicdomain/ */
// Check correct handling of the `target` argument shared by every Reflect method.
// For each standard Reflect method, an array of arguments
// that would be OK after a suitable target argument.
var methodInfo = {
apply: [undefined, []],
construct: [[]],
defineProperty: ["x", {}],
deleteProperty: ["x"],
get: ["x", {}],
getOwnPropertyDescriptor: ["x"],
getPrototypeOf: [],
has: ["x"],
isExtensible: [],
ownKeys: [],
preventExtensions: [],
set: ["x", 0],
setPrototypeOf: [{}]
};
// Check that all Reflect properties are listed above.
for (const name of Reflect.ownKeys(Reflect)) {
// If this assertion fails, congratulations on implementing a new Reflect feature!
// Add it to methodInfo above.
if (typeof name !== "symbol" && name !== "parse")
assertEq(name in methodInfo, true);
}
for (const name of Object.keys(methodInfo)) {
var args = methodInfo[name];
// The target argument is required.
assertThrowsInstanceOf(Reflect[name], TypeError);
// Throw if the target argument is not an object.
for (var value of SOME_PRIMITIVE_VALUES) {
assertThrowsInstanceOf(() => Reflect[name](value, ...args), TypeError);
}
}
reportCompare(0, 0);
|