7bbea08f66
This refactoring makes it easier to write advanced tests and gives full control over what's happening to the test code. It also forces description for every test. BUG=none Review-Url: https://codereview.chromium.org/2891213002 Cr-Commit-Position: refs/heads/master@{#45412}
82 lines
2.4 KiB
JavaScript
82 lines
2.4 KiB
JavaScript
// 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;
|
|
}`);
|
|
|
|
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);
|
|
},
|
|
]);
|
|
}
|