summaryrefslogtreecommitdiff
path: root/deps/v8/test/inspector/debugger/get-properties-paused.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/inspector/debugger/get-properties-paused.js')
-rw-r--r--deps/v8/test/inspector/debugger/get-properties-paused.js109
1 files changed, 109 insertions, 0 deletions
diff --git a/deps/v8/test/inspector/debugger/get-properties-paused.js b/deps/v8/test/inspector/debugger/get-properties-paused.js
new file mode 100644
index 0000000000..4c1e7b9429
--- /dev/null
+++ b/deps/v8/test/inspector/debugger/get-properties-paused.js
@@ -0,0 +1,109 @@
+// Copyright 2019 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 { Protocol } = InspectorTest.start('Checks Runtime.getProperties method while debugger is paused.');
+
+(async function test() {
+ await Protocol.Debugger.enable();
+ Protocol.Runtime.evaluate({ expression: 'debugger;' });
+ const callFrameId = (await Protocol.Debugger.oncePaused()).params.callFrames[0].callFrameId;
+
+ InspectorTest.runAsyncTestSuite([
+ function testObject5() {
+ return logExpressionProperties(`(function(){var r = Object(5); r.foo = 'cat';return r;})()`);
+ },
+
+ function testNotOwn() {
+ return logExpressionProperties(`({ a: 2, set b(_) {}, get b() {return 5;}, __proto__: { a: 3, c: 4, get d() {return 6;} }})`, { ownProperties: false });
+ },
+
+ function testAccessorsOnly() {
+ return logExpressionProperties(`({ a: 2, set b(_) {}, get b() {return 5;}, c: 'c', set d(_){} })`, { ownProperties: true, accessorPropertiesOnly: true });
+ },
+
+ function testArray() {
+ return logExpressionProperties(`['red', 'green', 'blue']`);
+ },
+
+ function testBound() {
+ return logExpressionProperties('Number.bind({}, 5)');
+ },
+
+ function testObjectThrowsLength() {
+ return logExpressionProperties(`({get length() { throw 'Length called'; }})`);
+ },
+
+ function testTypedArrayWithoutLength() {
+ return logExpressionProperties('({__proto__: Uint8Array.prototype})');
+ },
+
+ async function testArrayBuffer() {
+ let objectId = await evaluateToObjectId('new Uint8Array([1, 1, 1, 1, 1, 1, 1, 1]).buffer');
+ let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true });
+ for (let prop of props.result.result) {
+ if (prop.name === '__proto__')
+ continue;
+ InspectorTest.log(prop.name);
+ await logGetPropertiesResult(prop.value.objectId);
+ }
+ },
+
+ async function testArrayBufferWithBrokenUintCtor() {
+ await evaluateToObjectId(`(function() {
+ this.uint8array_old = this.Uint8Array;
+ this.Uint8Array = 42;
+ })()`);
+ await logExpressionProperties('new Int8Array([1, 1, 1, 1, 1, 1, 1]).buffer');
+ await evaluateToObjectId(`(function() {
+ this.Uint8Array = this.uint8array_old;
+ delete this.uint8array_old;
+ })()`);
+ }
+ ]);
+
+ async function logExpressionProperties(expression, flags) {
+ const objectId = await evaluateToObjectId(expression);
+ return await logGetPropertiesResult(objectId, flags);
+ }
+
+ async function evaluateToObjectId(expression) {
+ return (await Protocol.Debugger.evaluateOnCallFrame({ expression, callFrameId })).result.result.objectId;
+ }
+
+ async function logGetPropertiesResult(objectId, flags = { ownProperties: true }) {
+ function hasGetterSetter(property, fieldName) {
+ var v = property[fieldName];
+ if (!v) return false;
+ return v.type !== "undefined"
+ }
+
+ flags.objectId = objectId;
+ let props = await Protocol.Runtime.getProperties(flags);
+ var propertyArray = props.result.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 = props.result.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);
+ }
+ }
+})();