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