| // Copyright 2016 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| let {session, contextGroup, Protocol} = InspectorTest.start('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; |
| return v.type !== "undefined" |
| } |
| |
| var propertyArray = protocolResult.result; |
| propertyArray.sort(NamedThingComparator); |
| for (var i = 0; i < propertyArray.length; i++) { |
| var p = propertyArray[i]; |
| var v = p.value; |
| var own = p.isOwn ? "own" : "inherited"; |
| if (v) |
| InspectorTest.log(" " + p.name + " " + own + " " + v.type + " " + v.value); |
| else |
| InspectorTest.log(" " + p.name + " " + own + " no value" + |
| (hasGetterSetter(p, "get") ? ", getter" : "") + (hasGetterSetter(p, "set") ? ", setter" : "")); |
| } |
| var internalPropertyArray = protocolResult.internalProperties; |
| if (internalPropertyArray) { |
| InspectorTest.log("Internal properties"); |
| internalPropertyArray.sort(NamedThingComparator); |
| for (var i = 0; i < internalPropertyArray.length; i++) { |
| var p = internalPropertyArray[i]; |
| var v = p.value; |
| InspectorTest.log(" " + p.name + " " + v.type + " " + v.value); |
| } |
| } |
| |
| function NamedThingComparator(o1, o2) { |
| return o1.name === o2.name ? 0 : (o1.name < o2.name ? -1 : 1); |
| } |
| } |