| // 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); | |
| } |