blob: a8d971bd22857d8cbe0434aa1e615dc1a683d2e7 [file] [log] [blame]
<html>
<head>
<script src="../../http/tests/inspector/resources/protocol-test.js"></script>
<script>
function test()
{
var suite = ProtocolTest.createAsyncSuite("Runtime.getProperties");
addGetPropertiesTestCase({
name: "CheckPropertiesOfWrapperObject",
description: "Check properties of `Object(5)`.",
expression: "(function(){var r = Object(5); r.foo = 'cat';return r;})()",
});
addGetPropertiesTestCase({
name: "CheckPropertiesOfArray",
description: "Check properties of `['red', 'green', 'blue']`.",
expression: "['red', 'green', 'blue']",
});
addGetPropertiesTestCase({
name: "CheckPropertiesOfBoundConstructor",
description: "Check properties of a bound function (has a bunch of internal properties).",
expression: "Number.bind({}, 5)",
});
addGetPropertiesTestCase({
name: "CheckPropertiesOfBoundFunctionNoArguments",
description: "Check properties of a bound function with no bound arguments.",
expression: "(function(){}).bind(null)",
});
suite.runTestCasesAndFinish();
function addGetPropertiesTestCase(args) {
var {name, description, expression} = args;
suite.addTestCase({
name,
description,
test(resolve, reject) {
ProtocolTest.log("Evaluating expression: " + expression);
InspectorProtocol.awaitCommand({
method: "Runtime.evaluate",
params: {expression}
})
.then(function(reply) {
var objectId = reply.result.objectId;
if (objectId === undefined)
throw new Error("objectId is expected");
return InspectorProtocol.awaitCommand({
method: "Runtime.getProperties",
params: {objectId, ownProperties: true}
});
})
.then(function(reply) {
dumpGetPropertiesResult(reply);
resolve();
})
.catch(reject);
}
});
}
// A helper function that dumps object properties and internal properties in sorted order.
function dumpGetPropertiesResult(protocolResult) {
var properties = protocolResult.result;
if (properties) {
ProtocolTest.log("Properties:");
properties.sort(NamedThingComparator);
properties.map(dumpSingleProperty);
}
var internalProperties = protocolResult.internalProperties;
if (internalProperties) {
ProtocolTest.log("Internal properties:");
internalProperties.sort(NamedThingComparator);
internalProperties.map(dumpSingleProperty);
}
function dumpSingleProperty(property) {
var {name, value, get, set} = property;
if (value)
ProtocolTest.log(` ${name} ${value.type} ${value.value || value.description}`);
else if (get || set)
ProtocolTest.log(` ${name} ${get ? "getter" : "-"} ${set ? "setter" : ""}`);
else
ProtocolTest.log(` ${name}`);
}
function NamedThingComparator(o1, o2) {
return o1.name.localeCompare(o2.name);
}
}
}
</script>
</head>
<body onLoad="runTest()">
</body>
</html>