// 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('Tests that variables introduced in eval scopes are accessible'); contextGroup.addScript( `function testNonEmptyEvalScope() { eval("'use strict'; var hest = 420; debugger;"); } function testEmptyEvalScope() { eval("var fisk = 42; testNonEmptyEvalScope();"); }`); Protocol.Debugger.enable(); Protocol.Debugger.oncePaused().then(dumpScopeOnPause); Protocol.Runtime.evaluate({ "expression": "testEmptyEvalScope();" }); var waitScopeObjects = 0; function dumpScopeOnPause(message) { var scopeChain = message.params.callFrames[0].scopeChain; var evalScopeObjectIds = []; for (var scope of scopeChain) { if (scope.type === "eval") { evalScopeObjectIds.push(scope.object.objectId); } } waitScopeObjects = evalScopeObjectIds.length; if (!waitScopeObjects) { InspectorTest.completeTest(); } else { for (var objectId of evalScopeObjectIds) Protocol.Runtime.getProperties({ "objectId" : objectId }) .then(dumpProperties); } } function dumpProperties(message) { InspectorTest.logMessage(message); --waitScopeObjects; if (!waitScopeObjects) Protocol.Debugger.resume().then(InspectorTest.completeTest); }