| // Copyright 2017 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. |
| |
| // Flags: --no-stress-flush-bytecode |
| |
| let {session, contextGroup, Protocol} = InspectorTest.start('Checks internal [[Entries]] in Runtime.getProperties output'); |
| |
| Protocol.Runtime.enable(); |
| |
| InspectorTest.runTestSuite([ |
| function maps(next) { |
| checkExpression('new Map([[1,2],[3,4]])') |
| .then(() => checkExpression('new Map()')) |
| .then(next); |
| }, |
| |
| function mapIterators(next) { |
| checkExpression('new Map([[1,2],[3,4]]).entries()') |
| .then(() => checkExpression('it = new Map([[1,2],[3,4]]).entries(); it.next(); it')) |
| .then(() => checkExpression('it = new Map([[1,2],[3,4]]).keys(); it.next(); it')) |
| .then(() => checkExpression('it = new Map([[1,2],[3,4]]).values(); it.next(); it')) |
| .then(() => checkExpression('it = new Map([[1,2],[3,4]]).entries(); it.next(); it.next(); it')) |
| .then(() => checkExpression('new Map([[1, undefined], [2, () => 42], [3, /abc/], [4, new Error()]]).entries()')) |
| .then(next); |
| }, |
| |
| function sets(next) { |
| checkExpression('new Set([1,2])') |
| .then(() => checkExpression('new Set()')) |
| .then(next); |
| }, |
| |
| function setIterators(next) { |
| checkExpression('new Set([1,2]).values()') |
| .then(() => checkExpression('it = new Set([1,2]).values(); it.next(); it')) |
| .then(() => checkExpression('it = new Set([1,2]).keys(); it.next(); it')) |
| .then(() => checkExpression('it = new Set([1,2]).entries(); it.next(); it')) |
| .then(() => checkExpression('it = new Set([1,2]).values(); it.next(); it.next(); it')) |
| .then(next); |
| }, |
| |
| function weakMaps(next) { |
| checkExpression('new WeakMap()') |
| .then(() => checkExpression('new WeakMap([[{ a: 2 }, 42]])')) |
| .then(next); |
| }, |
| |
| function weakSets(next) { |
| checkExpression('new WeakSet()') |
| .then(() => checkExpression('new WeakSet([{a:2}])')) |
| .then(next); |
| } |
| ]); |
| |
| function checkExpression(expression) |
| { |
| InspectorTest.log(`expression: ${expression}`); |
| var entriesObjectId; |
| return Protocol.Runtime.evaluate({ expression: expression }) |
| .then(message => Protocol.Runtime.getProperties({ objectId: message.result.result.objectId })) |
| .then(message => message.result.internalProperties.filter(p => p.name === '[[Entries]]')[0]) |
| .then(entries => entriesObjectId = entries.value.objectId) |
| .then(() => Protocol.Runtime.callFunctionOn({ objectId: entriesObjectId, functionDeclaration: 'function f() { return this; }', returnByValue: true })) |
| .then(message => InspectorTest.logMessage(message.result.result.value)) |
| .then(() => Protocol.Runtime.getProperties({ objectId: entriesObjectId, ownProperties: true })) |
| .then(message => InspectorTest.logMessage(message)); |
| } |