blob: e5b5f24cb3bda9afbc826b071bd06162fdc5c6d7 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(async function() {
TestRunner.addResult(`Checks that JavaScriptSourceFrame show inline breakpoints correctly\n`);
await TestRunner.loadModule('sources_test_runner');
await TestRunner.showPanel('sources');
await TestRunner.evaluateInPagePromise(`
function foo()
{
var p = Promise.resolve().then(() => console.log(42))
.then(() => console.log(239));
return p;
}
// some comment.
// another comment.
function boo() {
return 42;
}
//# sourceURL=foo.js
`);
function waitAndDumpDecorations(sourceFrame) {
return SourcesTestRunner.waitJavaScriptSourceFrameBreakpoints(sourceFrame)
.then(() => SourcesTestRunner.dumpJavaScriptSourceFrameBreakpoints(sourceFrame));
}
Bindings.breakpointManager._storage._breakpoints = {};
SourcesTestRunner.runDebuggerTestSuite([
function testAddRemoveBreakpoint(next) {
var javaScriptSourceFrame;
SourcesTestRunner.showScriptSource('foo.js', addBreakpoint);
function addBreakpoint(sourceFrame) {
javaScriptSourceFrame = sourceFrame;
TestRunner.addResult('Setting breakpoint');
SourcesTestRunner.createNewBreakpoint(javaScriptSourceFrame, 11, '', true)
.then(() => waitAndDumpDecorations(javaScriptSourceFrame).then(removeBreakpoint));
}
function removeBreakpoint() {
TestRunner.addResult('Toggle breakpoint');
waitAndDumpDecorations(javaScriptSourceFrame).then(() => next());
SourcesTestRunner.toggleBreakpoint(javaScriptSourceFrame, 11);
}
},
function testAddRemoveBreakpointInLineWithOneLocation(next) {
var javaScriptSourceFrame;
SourcesTestRunner.showScriptSource('foo.js', addBreakpoint);
function addBreakpoint(sourceFrame) {
javaScriptSourceFrame = sourceFrame;
TestRunner.addResult('Setting breakpoint');
SourcesTestRunner.createNewBreakpoint(javaScriptSourceFrame, 13, '', true)
.then(() => waitAndDumpDecorations(javaScriptSourceFrame).then(removeBreakpoint));
}
function removeBreakpoint() {
TestRunner.addResult('Toggle breakpoint');
SourcesTestRunner.toggleBreakpoint(javaScriptSourceFrame, 13);
waitAndDumpDecorations(javaScriptSourceFrame).then(() => next());
}
},
function clickByInlineBreakpoint(next) {
var javaScriptSourceFrame;
SourcesTestRunner.showScriptSource('foo.js', addBreakpoint);
function addBreakpoint(sourceFrame) {
javaScriptSourceFrame = sourceFrame;
TestRunner.addResult('Setting breakpoint');
SourcesTestRunner.createNewBreakpoint(javaScriptSourceFrame, 11, '', true)
.then(() => waitAndDumpDecorations(javaScriptSourceFrame).then(clickBySecondLocation));
}
function clickBySecondLocation() {
TestRunner.addResult('Click by second breakpoint');
waitAndDumpDecorations(javaScriptSourceFrame).then(clickByFirstLocation);
SourcesTestRunner.clickJavaScriptSourceFrameBreakpoint(javaScriptSourceFrame, 11, 1, next);
}
function clickByFirstLocation() {
TestRunner.addResult('Click by first breakpoint');
waitAndDumpDecorations(javaScriptSourceFrame).then(clickBySecondLocationAgain);
SourcesTestRunner.clickJavaScriptSourceFrameBreakpoint(javaScriptSourceFrame, 11, 0, next);
}
function clickBySecondLocationAgain() {
TestRunner.addResult('Click by second breakpoint');
waitAndDumpDecorations(javaScriptSourceFrame).then(() => next());
SourcesTestRunner.clickJavaScriptSourceFrameBreakpoint(javaScriptSourceFrame, 11, 1, next);
}
},
function toggleBreakpointInAnotherLineWontRemoveExisting(next) {
var javaScriptSourceFrame;
SourcesTestRunner.showScriptSource('foo.js', addBreakpoint);
function addBreakpoint(sourceFrame) {
javaScriptSourceFrame = sourceFrame;
TestRunner.addResult('Setting breakpoint in line 4');
SourcesTestRunner.toggleBreakpoint(sourceFrame, 12, false);
waitAndDumpDecorations(javaScriptSourceFrame).then(toggleBreakpointInAnotherLine);
}
function toggleBreakpointInAnotherLine() {
TestRunner.addResult('Setting breakpoint in line 3');
waitAndDumpDecorations(javaScriptSourceFrame).then(removeBreakpoints);
SourcesTestRunner.toggleBreakpoint(javaScriptSourceFrame, 11, false);
}
function removeBreakpoints() {
TestRunner.addResult('Click by first inline breakpoints');
waitAndDumpDecorations(javaScriptSourceFrame).then(() => next());
SourcesTestRunner.clickJavaScriptSourceFrameBreakpoint(javaScriptSourceFrame, 11, 0, next);
SourcesTestRunner.clickJavaScriptSourceFrameBreakpoint(javaScriptSourceFrame, 12, 0, next);
}
},
async function testAddRemoveBreakpointInLineWithoutBreakableLocations(next) {
let javaScriptSourceFrame = await SourcesTestRunner.showScriptSourcePromise('foo.js');
TestRunner.addResult('Setting breakpoint');
await SourcesTestRunner.createNewBreakpoint(javaScriptSourceFrame, 16, '', true)
await waitAndDumpDecorations(javaScriptSourceFrame);
TestRunner.addResult('Toggle breakpoint');
let decorationsPromise = waitAndDumpDecorations(javaScriptSourceFrame);
SourcesTestRunner.toggleBreakpoint(javaScriptSourceFrame, 25);
await decorationsPromise;
next();
}
]);
})();