| Index: test/inspector/runtime/get-properties.js
|
| diff --git a/test/inspector/runtime/get-properties.js b/test/inspector/runtime/get-properties.js
|
| index af5e8a67b5a081bb8f0544e05f0e7dc0c9f8bed1..2c1222b5818877a0e4529425727b47ddff41d1d7 100644
|
| --- a/test/inspector/runtime/get-properties.js
|
| +++ b/test/inspector/runtime/get-properties.js
|
| @@ -2,235 +2,73 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -// A general-purpose engine for sending a sequence of protocol commands.
|
| -// The clients provide requests and response handlers, while the engine catches
|
| -// errors and makes sure that once there's nothing to do completeTest() is called.
|
| -// @param step is an object with command, params and callback fields
|
| -function runRequestSeries(step)
|
| -{
|
| - processStep(step);
|
| -
|
| - function processStep(s)
|
| - {
|
| - try {
|
| - processStepOrFail(s);
|
| - } catch (e) {
|
| - InspectorTest.log(e.stack);
|
| - InspectorTest.completeTest();
|
| - }
|
| - }
|
| -
|
| - function processStepOrFail(s)
|
| - {
|
| - if (!s) {
|
| - InspectorTest.completeTest();
|
| - return;
|
| - }
|
| - if (!s.command) {
|
| - // A simple loopback step.
|
| - var next = s.callback();
|
| - processStep(next);
|
| - return;
|
| - }
|
| -
|
| - var innerCallback = function(response)
|
| - {
|
| - if ("error" in response) {
|
| - InspectorTest.log(response.error.message);
|
| - InspectorTest.completeTest();
|
| - return;
|
| - }
|
| - var next;
|
| - try {
|
| - next = s.callback(response.result);
|
| - } catch (e) {
|
| - InspectorTest.log(e.stack);
|
| - InspectorTest.completeTest();
|
| - return;
|
| - }
|
| - processStep(next);
|
| - }
|
| - var command = s.command.split(".");
|
| - Protocol[command[0]][command[1]](s.params).then(innerCallback);
|
| - }
|
| -}
|
| -
|
| -var firstStep = { callback: callbackStart5 };
|
| -
|
| -runRequestSeries(firstStep);
|
| -
|
| -// 'Object5' section -- check properties of '5' wrapped as object (has an internal property).
|
| -
|
| -function callbackStart5()
|
| -{
|
| - // Create an wrapper object with additional property.
|
| - var expression = "(function(){var r = Object(5); r.foo = 'cat';return r;})()";
|
| -
|
| - return { command: "Runtime.evaluate", params: {expression: expression}, callback: callbackEval5 };
|
| -}
|
| -function callbackEval5(result)
|
| -{
|
| - var id = result.result.objectId;
|
| - if (id === undefined)
|
| - throw new Error("objectId is expected");
|
| - return {
|
| - command: "Runtime.getProperties", params: {objectId: id, ownProperties: true}, callback: callbackProperties5
|
| - };
|
| -}
|
| -function callbackProperties5(result)
|
| -{
|
| - logGetPropertiesResult("Object(5)", result);
|
| - return { callback: callbackStartNotOwn };
|
| -}
|
| -
|
| -
|
| -// 'Not own' section -- check all properties of the object, including ones from it prototype chain.
|
| -
|
| -function callbackStartNotOwn()
|
| -{
|
| - // Create an wrapper object with additional property.
|
| - var expression = "({ a: 2, set b(_) {}, get b() {return 5;}, __proto__: { a: 3, c: 4, get d() {return 6;} }})";
|
| -
|
| - return { command: "Runtime.evaluate", params: {expression: expression}, callback: callbackEvalNotOwn };
|
| -}
|
| -function callbackEvalNotOwn(result)
|
| -{
|
| - var id = result.result.objectId;
|
| - if (id === undefined)
|
| - throw new Error("objectId is expected");
|
| - return {
|
| - command: "Runtime.getProperties", params: {objectId: id, ownProperties: false}, callback: callbackPropertiesNotOwn
|
| - };
|
| -}
|
| -function callbackPropertiesNotOwn(result)
|
| -{
|
| - logGetPropertiesResult("Not own properties", result);
|
| - return { callback: callbackStartAccessorsOnly };
|
| -}
|
| -
|
| -
|
| -// 'Accessors only' section -- check only accessor properties of the object.
|
| -
|
| -function callbackStartAccessorsOnly()
|
| -{
|
| - // Create an wrapper object with additional property.
|
| - var expression = "({ a: 2, set b(_) {}, get b() {return 5;}, c: 'c', set d(_){} })";
|
| -
|
| - return { command: "Runtime.evaluate", params: {expression: expression}, callback: callbackEvalAccessorsOnly };
|
| -}
|
| -function callbackEvalAccessorsOnly(result)
|
| -{
|
| - var id = result.result.objectId;
|
| - if (id === undefined)
|
| - throw new Error("objectId is expected");
|
| - return {
|
| - command: "Runtime.getProperties", params: {objectId: id, ownProperties: true, accessorPropertiesOnly: true}, callback: callbackPropertiesAccessorsOnly
|
| - };
|
| -}
|
| -function callbackPropertiesAccessorsOnly(result)
|
| -{
|
| - logGetPropertiesResult("Accessor only properties", result);
|
| - return { callback: callbackStartArray };
|
| -}
|
| -
|
| -
|
| -// 'Array' section -- check properties of an array.
|
| -
|
| -function callbackStartArray()
|
| -{
|
| - var expression = "['red', 'green', 'blue']";
|
| - return { command: "Runtime.evaluate", params: {expression: expression}, callback: callbackEvalArray };
|
| -}
|
| -function callbackEvalArray(result)
|
| -{
|
| - var id = result.result.objectId;
|
| - if (id === undefined)
|
| - throw new Error("objectId is expected");
|
| - return {
|
| - command: "Runtime.getProperties", params: {objectId: id, ownProperties: true}, callback: callbackPropertiesArray
|
| - };
|
| -}
|
| -function callbackPropertiesArray(result)
|
| -{
|
| - logGetPropertiesResult("array", result);
|
| - return { callback: callbackStartBound };
|
| -}
|
| -
|
| -
|
| -// 'Bound' section -- check properties of a bound function (has a bunch of internal properties).
|
| -
|
| -function callbackStartBound()
|
| -{
|
| - var expression = "Number.bind({}, 5)";
|
| - return { command: "Runtime.evaluate", params: {expression: expression}, callback: callbackEvalBound };
|
| -}
|
| -function callbackEvalBound(result)
|
| -{
|
| - var id = result.result.objectId;
|
| - if (id === undefined)
|
| - throw new Error("objectId is expected");
|
| - return {
|
| - command: "Runtime.getProperties", params: {objectId: id, ownProperties: true}, callback: callbackPropertiesBound
|
| - };
|
| -}
|
| -function callbackPropertiesBound(result)
|
| -{
|
| - logGetPropertiesResult("Bound function", result);
|
| - return { callback: callbackStartObjectThrowsLength };
|
| -}
|
| -
|
| -
|
| -// Object throws on length access
|
| -
|
| -function callbackStartObjectThrowsLength() {
|
| - var expression = "({get length() { throw 'Length called'; }})";
|
| - return { command: "Runtime.evaluate", params: {expression: expression}, callback: callbackEvalObjectThrowsLength };
|
| -}
|
| -function callbackEvalObjectThrowsLength(result) {
|
| - var id = result.result.objectId;
|
| - if (id === undefined)
|
| - throw new Error("objectId is expected");
|
| - return {
|
| - command: "Runtime.getProperties", params: {objectId: id, ownProperties: true}, callback: callbackPropertiesObjectThrowsLength
|
| - };
|
| -}
|
| -function callbackPropertiesObjectThrowsLength(result) {
|
| - logGetPropertiesResult("Object that throws on length access", result);
|
| - return { callback: callbackStartTypedArrayWithoutLength };
|
| -}
|
| -
|
| -
|
| -// Typed array without length
|
| -
|
| -function callbackStartTypedArrayWithoutLength() {
|
| - var expression = "({__proto__: Uint8Array.prototype})";
|
| - return { command: "Runtime.evaluate", params: {expression: expression}, callback: callbackEvalTypedArrayWithoutLength };
|
| -}
|
| -function callbackEvalTypedArrayWithoutLength(result) {
|
| - var id = result.result.objectId;
|
| - if (id === undefined)
|
| - throw new Error("objectId is expected");
|
| - return {
|
| - command: "Runtime.getProperties", params: {objectId: id, ownProperties: true}, callback: callbackPropertiesTypedArrayWithoutLength
|
| - };
|
| -}
|
| -function callbackPropertiesTypedArrayWithoutLength(result) {
|
| - logGetPropertiesResult("TypedArray without length", result);
|
| - return; // End of test
|
| -}
|
| -
|
| -// A helper function that dumps object properties and internal properties in sorted order.
|
| -function logGetPropertiesResult(title, protocolResult)
|
| -{
|
| - function hasGetterSetter(property, fieldName)
|
| - {
|
| +InspectorTest.log('Checks Runtime.getProperties method');
|
| +
|
| +InspectorTest.runAsyncTestSuite([
|
| + async function testObject5() {
|
| + let objectId = (await Protocol.Runtime.evaluate({
|
| + expression: '(function(){var r = Object(5); r.foo = \'cat\';return r;})()'
|
| + })).result.result.objectId;
|
| + let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true });
|
| + logGetPropertiesResult(props.result);
|
| + },
|
| +
|
| + async function testNotOwn() {
|
| + let objectId = (await Protocol.Runtime.evaluate({
|
| + expression: '({ a: 2, set b(_) {}, get b() {return 5;}, __proto__: { a: 3, c: 4, get d() {return 6;} }})'
|
| + })).result.result.objectId;
|
| + let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: false });
|
| + logGetPropertiesResult(props.result);
|
| + },
|
| +
|
| + async function testAccessorsOnly() {
|
| + let objectId = (await Protocol.Runtime.evaluate({
|
| + expression: '({ a: 2, set b(_) {}, get b() {return 5;}, c: \'c\', set d(_){} })'
|
| + })).result.result.objectId;
|
| + let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true, accessorPropertiesOnly: true });
|
| + logGetPropertiesResult(props.result);
|
| + },
|
| +
|
| + async function testArray() {
|
| + let objectId = (await Protocol.Runtime.evaluate({
|
| + expression: '[\'red\', \'green\', \'blue\']'
|
| + })).result.result.objectId;
|
| + let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true });
|
| + logGetPropertiesResult(props.result);
|
| + },
|
| +
|
| + async function testBound() {
|
| + let objectId = (await Protocol.Runtime.evaluate({
|
| + expression: 'Number.bind({}, 5)'
|
| + })).result.result.objectId;
|
| + let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true });
|
| + logGetPropertiesResult(props.result);
|
| + },
|
| +
|
| + async function testObjectThrowsLength() {
|
| + let objectId = (await Protocol.Runtime.evaluate({
|
| + expression: '({get length() { throw \'Length called\'; }})'
|
| + })).result.result.objectId;
|
| + let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true });
|
| + logGetPropertiesResult(props.result);
|
| + },
|
| +
|
| + async function testTypedArrayWithoutLength() {
|
| + let objectId = (await Protocol.Runtime.evaluate({
|
| + expression: '({__proto__: Uint8Array.prototype})'
|
| + })).result.result.objectId;
|
| + let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true });
|
| + logGetPropertiesResult(props.result);
|
| + },
|
| +]);
|
| +
|
| +function logGetPropertiesResult(protocolResult) {
|
| + function hasGetterSetter(property, fieldName) {
|
| var v = property[fieldName];
|
| - if (!v)
|
| - return false;
|
| + if (!v) return false;
|
| return v.type !== "undefined"
|
| }
|
|
|
| - InspectorTest.log("Properties of " + title);
|
| var propertyArray = protocolResult.result;
|
| propertyArray.sort(NamedThingComparator);
|
| for (var i = 0; i < propertyArray.length; i++) {
|
| @@ -254,8 +92,7 @@ function logGetPropertiesResult(title, protocolResult)
|
| }
|
| }
|
|
|
| - function NamedThingComparator(o1, o2)
|
| - {
|
| + function NamedThingComparator(o1, o2) {
|
| return o1.name === o2.name ? 0 : (o1.name < o2.name ? -1 : 1);
|
| }
|
| }
|
|
|