mirror of
https://github.com/nodejs/node.git
synced 2025-05-17 22:02:33 +00:00

Original commit message:
Fix preview of set entries
Set entries return an array with the value as first and second entry.
As such these are considered key value pairs to align with maps
entries iterator.
So far the return value was identical to the values iterator and that
is misleading.
This also adds tests to verify the results and improves the coverage
a tiny bit by testing different iterators.
Refs: https://github.com/nodejs/node/issues/24629
R=yangguo@chromium.org
Change-Id: I669a724bb4afaf5a713e468b1f51691d22c25253
Reviewed-on: https://chromium-review.googlesource.com/c/1350790
Commit-Queue: Yang Guo <yangguo@chromium.org>
Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Jakob Gruber <jgruber@chromium.org>
Reviewed-by: Yang Guo <yangguo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#59311}
Refs: 74571c80a9
PR-URL: https://github.com/nodejs/node/pull/25852
Reviewed-By: Ujjwal Sharma <usharma1998@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
109 lines
3.0 KiB
JavaScript
109 lines
3.0 KiB
JavaScript
// 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("Check internal properties reported in object preview.");
|
|
|
|
Protocol.Debugger.enable();
|
|
Protocol.Runtime.enable();
|
|
Protocol.Runtime.onConsoleAPICalled(dumpInternalPropertiesAndEntries);
|
|
|
|
contextGroup.setupInjectedScriptEnvironment();
|
|
|
|
InspectorTest.runTestSuite([
|
|
function boxedObjects(next)
|
|
{
|
|
checkExpression("new Number(239)")
|
|
.then(() => checkExpression("new Boolean(false)"))
|
|
.then(() => checkExpression("new String(\"abc\")"))
|
|
.then(() => checkExpression("Object(Symbol(42))"))
|
|
.then(() => checkExpression("Object(BigInt(2))"))
|
|
.then(next);
|
|
},
|
|
|
|
function promise(next)
|
|
{
|
|
checkExpression("Promise.resolve(42)")
|
|
.then(() => checkExpression("new Promise(() => undefined)"))
|
|
.then(next);
|
|
},
|
|
|
|
function generatorObject(next)
|
|
{
|
|
checkExpression("(function* foo() { yield 1 })()")
|
|
.then(next);
|
|
},
|
|
|
|
function entriesInMapAndSet(next)
|
|
{
|
|
checkExpression("new Map([[1,2]])")
|
|
.then(() => checkExpression("new Set([1])"))
|
|
.then(() => checkExpression("new WeakMap([[{}, 42]])"))
|
|
.then(() => checkExpression("new WeakSet([{}])"))
|
|
.then(next);
|
|
},
|
|
|
|
function iteratorObject(next)
|
|
{
|
|
checkExpression("(new Map([[1,2]])).entries()")
|
|
.then(() => checkExpression("(new Set([1,2])).entries()"))
|
|
.then(next);
|
|
},
|
|
|
|
function noPreviewForFunctionObject(next)
|
|
{
|
|
var expression = "(function foo(){})";
|
|
InspectorTest.log(expression);
|
|
Protocol.Runtime.evaluate({ expression: expression, generatePreview: true})
|
|
.then(message => InspectorTest.logMessage(message))
|
|
.then(next);
|
|
},
|
|
|
|
function otherObjects(next)
|
|
{
|
|
checkExpression("[1,2,3]")
|
|
.then(() => checkExpression("/123/"))
|
|
.then(() => checkExpression("({})"))
|
|
.then(next);
|
|
},
|
|
|
|
function overridenArrayGetter(next)
|
|
{
|
|
Protocol.Runtime.evaluate({ expression: "Array.prototype.__defineGetter__(\"0\",() => { throw new Error() }) "})
|
|
.then(() => checkExpression("Promise.resolve(42)"))
|
|
.then(next);
|
|
}
|
|
]);
|
|
|
|
function checkExpression(expression)
|
|
{
|
|
InspectorTest.log(`expression: ${expression}`);
|
|
// console.table has higher limits for internal properties amount in preview.
|
|
return Protocol.Runtime.evaluate({ expression: `console.table(${expression})`, generatePreview: true });
|
|
}
|
|
|
|
function dumpInternalPropertiesAndEntries(message)
|
|
{
|
|
var properties;
|
|
var entries;
|
|
try {
|
|
var preview = message.params.args[0].preview;
|
|
properties = preview.properties;
|
|
entries = preview.entries;
|
|
} catch (e) {
|
|
InspectorTest.logMessage(message);
|
|
return;
|
|
}
|
|
if (!properties) {
|
|
InspectorTest.logMessage(message);
|
|
return;
|
|
}
|
|
for (var property of properties)
|
|
InspectorTest.logMessage(property);
|
|
if (entries) {
|
|
InspectorTest.log("[[Entries]]:");
|
|
InspectorTest.logMessage(entries);
|
|
}
|
|
InspectorTest.log("");
|
|
}
|