// 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 suspended generators produce scopes'); contextGroup.addScript(` function *gen(a) { var b = 42; yield a; return b; } function testSuspendedGenerator() { var g = gen(420); g.next(); debugger; return g; }`); InspectorTest.runAsyncTestSuite([ async function testScopesPaused() { Protocol.Debugger.enable(); Protocol.Runtime.evaluate({expression: 'testSuspendedGenerator()'}); let {params:{callFrames:[callFrame]}} = await Protocol.Debugger.oncePaused(); // Current local scope. let localScope = callFrame.scopeChain.find(scope => scope.type === 'local'); let variables = (await Protocol.Runtime.getProperties({ objectId: localScope.object.objectId })).result.result; let genObjectId = variables.find(variable => variable.name === 'g').value.objectId; let {result:{internalProperties}} = await Protocol.Runtime.getProperties({ objectId: genObjectId }); // Generator [[Scopes]]. let scopes = internalProperties.find(prop => prop.name === '[[Scopes]]'); let {result:{result}} = await Protocol.Runtime.getProperties({ objectId: scopes.value.objectId }); // Locals from generator. let scope = result.find(scope => scope.value.description === 'Local (gen)'); ({result:{result}} = await Protocol.Runtime.getProperties({ objectId: scope.value.objectId })); InspectorTest.logMessage(result); await Protocol.Debugger.disable(); }, async function testScopesNonPaused() { let {result:{result:{objectId}}} = await Protocol.Runtime.evaluate({ expression: 'gen(430)' }); let {result:{internalProperties}} = await Protocol.Runtime.getProperties({ objectId }); // Generator [[Scopes]]. let scopes = internalProperties.find(prop => prop.name === '[[Scopes]]'); let {result:{result}} = await Protocol.Runtime.getProperties({ objectId: scopes.value.objectId }); // Locals from generator. let scope = result.find(scope => scope.value.description === 'Local (gen)'); ({result:{result}} = await Protocol.Runtime.getProperties({ objectId: scope.value.objectId })); InspectorTest.logMessage(result); } ]);