| Index: test/inspector/debugger/suspended-generator-scopes.js
|
| diff --git a/test/inspector/debugger/suspended-generator-scopes.js b/test/inspector/debugger/suspended-generator-scopes.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f158e75f1158fa4c536229263281b47b98216f6e
|
| --- /dev/null
|
| +++ b/test/inspector/debugger/suspended-generator-scopes.js
|
| @@ -0,0 +1,78 @@
|
| +// 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.
|
| +
|
| +InspectorTest.addScript(
|
| +`function *gen(a) {
|
| + var b = 42;
|
| + yield a;
|
| + return b;
|
| +}
|
| +function testSuspendedGenerator()
|
| +{
|
| + var g = gen(420);
|
| + g.next();
|
| +
|
| + debugger;
|
| +}`);
|
| +
|
| +Protocol.Debugger.enable().then(testSuite);
|
| +
|
| +function dumpInnermostScope(msg) {
|
| + var scopes = msg.result.result;
|
| + var inner_scope = scopes[0].value;
|
| + return Protocol.Runtime.getProperties({ objectId : inner_scope.objectId })
|
| + .then(InspectorTest.logMessage);
|
| +}
|
| +
|
| +function dumpGeneratorScopes(msg)
|
| +{
|
| + var props = msg.result.internalProperties;
|
| + var promises = props
|
| + .filter(prop => prop.name == "[[Scopes]]")
|
| + .map(prop => prop.value.objectId)
|
| + .map(scopesId => Protocol.Runtime.getProperties({ objectId : scopesId })
|
| + .then(dumpInnermostScope));
|
| + return Promise.all(promises);
|
| +}
|
| +
|
| +function fetchGeneratorProperties(objectId) {
|
| + return Protocol.Runtime.getProperties({ objectId : objectId });
|
| +}
|
| +
|
| +function extractGeneratorObjectFromScope(scopeId) {
|
| + return Protocol.Runtime.getProperties({ objectId : scopeId })
|
| + .then(msg => {
|
| + var generatorObjectId = msg.result.result[0].value.objectId;
|
| + return fetchGeneratorProperties(generatorObjectId);
|
| + });
|
| +}
|
| +
|
| +function dumpGeneratorScopesOnPause(msg) {
|
| + var scopeChain = msg.params.callFrames[0].scopeChain;
|
| + var promises = scopeChain
|
| + .filter(scope => scope.type === "local")
|
| + .map(scope => scope.object.objectId)
|
| + .map(scopeId => extractGeneratorObjectFromScope(scopeId)
|
| + .then(dumpGeneratorScopes));
|
| + return Promise.all(promises).then(Protocol.Debugger.resume);
|
| +}
|
| +
|
| +function testSuite() {
|
| + InspectorTest.runTestSuite([
|
| +
|
| + function testScopesPaused(next) {
|
| + Protocol.Debugger.oncePaused()
|
| + .then(dumpGeneratorScopesOnPause)
|
| + .then(next);
|
| + Protocol.Runtime.evaluate({ expression : "testSuspendedGenerator()" });
|
| + },
|
| +
|
| + function testScopesNonPaused(next) {
|
| + Protocol.Runtime.evaluate({ expression : "gen(430)"})
|
| + .then(msg => fetchGeneratorProperties(msg.result.result.objectId))
|
| + .then(dumpGeneratorScopes)
|
| + .then(next);
|
| + },
|
| + ]);
|
| +}
|
|
|