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)
113 lines
3.2 KiB
JavaScript
113 lines
3.2 KiB
JavaScript
var obj = Object.create({ a: "qux", d: "qux" });
|
|
obj.a = "foo"; obj.b = "bar"; obj.c = "baz";
|
|
var values = Object.values(obj);
|
|
var passed = Array.isArray(values) && String(values) === "foo,bar,baz";
|
|
|
|
if (!passed)
|
|
throw new Error("Object.values return wrong result.");
|
|
|
|
var complexObject = {
|
|
obj : {
|
|
a: 'x',
|
|
b: 'y'
|
|
},
|
|
primitive : 'z'
|
|
};
|
|
|
|
passed = false;
|
|
values = Object.values(complexObject);
|
|
|
|
passed = values.length === 2 && values[0].a === 'x' && values[0].b === 'y' && values[1] === 'z';
|
|
|
|
if (!passed)
|
|
throw new Error("Object.values return wrong result.");
|
|
|
|
values = Object.values({ a: 'abcdef' });
|
|
|
|
passed = values.length === 1 && values[0] === 'abcdef';
|
|
|
|
if (!passed)
|
|
throw new Error("Object.values return wrong result.");
|
|
|
|
var primitives = [
|
|
["string", ['s', 't', 'r', 'i', 'n', 'g']],
|
|
[42, []],
|
|
[Symbol("symbol"), []],
|
|
[true, []],
|
|
[false, []]
|
|
];
|
|
|
|
function compare(ax, bx) {
|
|
if (ax.length !== bx.length)
|
|
return false;
|
|
for (var i = 0, iz = ax.length; i < iz; ++i) {
|
|
if (ax[i] !== bx[i])
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
for (var [primitive, expected] of primitives) {
|
|
var ret = Object.values(primitive);
|
|
if (!compare(ret, expected))
|
|
throw new Error("bad value for " + String(primitive) + ": " + String(ret));
|
|
}
|
|
|
|
[
|
|
[ null, "TypeError: Object.values requires that input parameter not be null or undefined" ],
|
|
[ undefined, "TypeError: Object.values requires that input parameter not be null or undefined" ]
|
|
].forEach(function ([value, message]) {
|
|
var error = null;
|
|
try {
|
|
Object.values(value);
|
|
} catch (e) {
|
|
error = e;
|
|
}
|
|
if (!error)
|
|
throw new Error("error not thrown");
|
|
if (String(error) !== message)
|
|
throw new Error("bad error: " + String(error));
|
|
});
|
|
|
|
const getInvokedFunctions = (obj) => {
|
|
let arr = []
|
|
let p = new Proxy(obj, {
|
|
ownKeys: function(...args) {
|
|
arr.push("ownKeys");
|
|
return Reflect.ownKeys(...args);
|
|
},
|
|
getOwnPropertyDescriptor: function(...args) {
|
|
arr.push("getOwnPropertyDescriptor");
|
|
return Reflect.getOwnPropertyDescriptor(...args);
|
|
}
|
|
});
|
|
|
|
Object.values(p);
|
|
return arr;
|
|
};
|
|
|
|
const arr1 = getInvokedFunctions({});
|
|
passed = arr1.length === 1 && arr1[0] === "ownKeys";
|
|
|
|
if (!passed)
|
|
throw new Error("Object.values should invoke ownkeys.");
|
|
|
|
const arr2 = getInvokedFunctions({a:'foo', b:'boo'});
|
|
passed = arr2.length === 3 && arr2[0] === "ownKeys";
|
|
|
|
if (!passed)
|
|
throw new Error("Object.values should invoke ownkeys.");
|
|
|
|
passed = arr2[1] === "getOwnPropertyDescriptor";
|
|
|
|
if (!passed)
|
|
throw new Error("Object.values should get property descriptor.");
|
|
|
|
Array.prototype.push = function () { throw new Error("Array.prototype.push should not be used during invoking of Object.values.")};
|
|
Object.getOwnPropertyDescriptor = function () { throw new Error("Array.prototype.getOwnPropertyDescriptor should not be used during invoking of Object.values.")};
|
|
|
|
values = Object.values({a:'1-2', b:'3-4'});
|
|
passed = Array.isArray(values) && String(values) === "1-2,3-4";
|
|
|
|
if (!passed)
|
|
throw new Error("Object.values return wrong result."); |