Commit 2fed7a00 authored by kozyatinskiy's avatar kozyatinskiy Committed by Commit bot

[inspector] use BREAK_POSITION_ALIGNED for breakpoints

With inline breakpoints DevTools are ready for break position aligned breakpoints instead of statement aligned.

BUG=chromium:695236
R=dgozman@chromium.org,yangguo@chromium.org

Review-Url: https://codereview.chromium.org/2709263002
Cr-Commit-Position: refs/heads/master@{#43385}
parent 18e4c46d
......@@ -1377,7 +1377,7 @@ bool Debug::GetPossibleBreakpoints(Handle<Script> script, int start_position,
CHECK(candidates[i]->HasDebugInfo());
Handle<DebugInfo> debug_info(candidates[i]->GetDebugInfo());
FindBreakablePositions(debug_info, start_position, end_position,
STATEMENT_ALIGNED, positions);
BREAK_POSITION_ALIGNED, positions);
}
return true;
}
......
......@@ -108,7 +108,7 @@ DebuggerScript.getGeneratorScopes = function(gen)
*/
DebuggerScript.setBreakpoint = function(execState, info)
{
var breakId = Debug.setScriptBreakPointById(info.sourceID, info.lineNumber, info.columnNumber, info.condition, undefined, Debug.BreakPositionAlignment.Statement);
var breakId = Debug.setScriptBreakPointById(info.sourceID, info.lineNumber, info.columnNumber, info.condition, undefined, Debug.BreakPositionAlignment.BreakPosition);
var locations = Debug.findBreakPointActualLocations(breakId);
if (!locations.length)
return undefined;
......
......@@ -18,1092 +18,254 @@ Test not existing scriptId.
id : <messageId>
}
Test end < start.
{
id : <messageId>
result : {
locations : [
]
}
}
function foo(){ return Promise.resolve(); }
function boo(){ return Promise.resolve().then(() => 42); }
Test empty range in first line.
{
id : <messageId>
result : {
locations : [
]
}
}
function foo(){ return Promise.resolve(); }
function boo(){ return Promise.resolve().then(() => 42); }
Test one character range in first line.
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 16
lineNumber : 0
scriptId : <scriptId>
}
]
}
}
function foo(){ #return Promise.resolve(); }
function boo(){ return Promise.resolve().then(() => 42); }
Test empty range in not first line.
{
id : <messageId>
result : {
locations : [
]
}
}
function foo(){ return Promise.resolve(); }
function boo(){ return Promise.resolve().then(() => 42); }
Test one character range in not first line.
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 16
lineNumber : 1
scriptId : <scriptId>
}
]
}
}
function foo(){ return Promise.resolve(); }
function boo(){ #return Promise.resolve().then(() => 42); }
Test end is undefined
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 16
lineNumber : 0
scriptId : <scriptId>
}
[1] : {
columnNumber : 42
lineNumber : 0
scriptId : <scriptId>
}
[2] : {
columnNumber : 16
lineNumber : 1
scriptId : <scriptId>
}
[3] : {
columnNumber : 52
lineNumber : 1
scriptId : <scriptId>
}
[4] : {
columnNumber : 54
lineNumber : 1
scriptId : <scriptId>
}
[5] : {
columnNumber : 57
lineNumber : 1
scriptId : <scriptId>
}
[6] : {
columnNumber : 0
lineNumber : 2
scriptId : <scriptId>
}
]
}
}
function foo(){ #return Promise.#resolve(); #}
function boo(){ #return Promise.#resolve().#then(() => #42#); #}
#
Test end.lineNumber > scripts.lineCount()
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 16
lineNumber : 0
scriptId : <scriptId>
}
[1] : {
columnNumber : 42
lineNumber : 0
scriptId : <scriptId>
}
[2] : {
columnNumber : 16
lineNumber : 1
scriptId : <scriptId>
}
[3] : {
columnNumber : 52
lineNumber : 1
scriptId : <scriptId>
}
[4] : {
columnNumber : 54
lineNumber : 1
scriptId : <scriptId>
}
[5] : {
columnNumber : 57
lineNumber : 1
scriptId : <scriptId>
}
[6] : {
columnNumber : 0
lineNumber : 2
scriptId : <scriptId>
}
]
}
}
function foo(){ #return Promise.#resolve(); #}
function boo(){ #return Promise.#resolve().#then(() => #42#); #}
#
Test one string
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 16
lineNumber : 0
scriptId : <scriptId>
}
[1] : {
columnNumber : 42
lineNumber : 0
scriptId : <scriptId>
}
]
}
}
function foo(){ #return Promise.#resolve(); #}
function boo(){ return Promise.resolve().then(() => 42); }
Test end.columnNumber > end.line.length(), should be the same as previous.
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 16
lineNumber : 0
scriptId : <scriptId>
}
[1] : {
columnNumber : 42
lineNumber : 0
scriptId : <scriptId>
}
]
}
}
function foo(){ #return Promise.#resolve(); #}
function boo(){ return Promise.resolve().then(() => 42); }
Running test: getPossibleBreakpointsInArrow
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 17
lineNumber : 0
scriptId : <scriptId>
}
[1] : {
columnNumber : 53
lineNumber : 0
scriptId : <scriptId>
}
[2] : {
columnNumber : 56
lineNumber : 0
scriptId : <scriptId>
}
[3] : {
columnNumber : 69
lineNumber : 0
scriptId : <scriptId>
}
[4] : {
columnNumber : 71
lineNumber : 0
scriptId : <scriptId>
}
[5] : {
columnNumber : 84
lineNumber : 0
scriptId : <scriptId>
}
[6] : {
columnNumber : 90
lineNumber : 0
scriptId : <scriptId>
}
[7] : {
columnNumber : 92
lineNumber : 0
scriptId : <scriptId>
}
[8] : {
columnNumber : 94
lineNumber : 0
scriptId : <scriptId>
}
]
}
}
function foo() { #return Promise.#resolve().#then(() => #239#).#then(() => #42#).#then(() => #() => #42#) #}
Running test: arrowFunctionFirstLine
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 18
lineNumber : 0
scriptId : <scriptId>
}
[1] : {
columnNumber : 47
lineNumber : 0
scriptId : <scriptId>
}
[2] : {
columnNumber : 49
lineNumber : 0
scriptId : <scriptId>
}
[3] : {
columnNumber : 51
lineNumber : 0
scriptId : <scriptId>
}
]
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 18
lineNumber : 0
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 47
lineNumber : 0
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 49
lineNumber : 0
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 51
lineNumber : 0
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
function foo1() { #Promise.#resolve().#then(() => #42#) #}
function foo2() { Promise.resolve().then(() => 42) }
paused in foo1
{
columnNumber : 18
lineNumber : 0
scriptId : <scriptId>
}
function foo1() { ^Promise.resolve().then(() => 42) }
function foo2() { Promise.resolve().then(() => 42) }
paused in foo1
{
columnNumber : 51
lineNumber : 0
scriptId : <scriptId>
}
function foo1() { Promise.^resolve().then(() => 42) }
function foo2() { Promise.resolve().then(() => 42) }
paused in foo1
function foo1() { Promise.resolve().^then(() => 42) }
function foo2() { Promise.resolve().then(() => 42) }
paused in foo1
function foo1() { Promise.resolve().then(() => 42) ^}
function foo2() { Promise.resolve().then(() => 42) }
paused in Promise.resolve.then
{
columnNumber : 47
lineNumber : 0
scriptId : <scriptId>
}
function foo1() { Promise.resolve().then(() => ^42) }
function foo2() { Promise.resolve().then(() => 42) }
paused in Promise.resolve.then
{
columnNumber : 49
lineNumber : 0
scriptId : <scriptId>
}
function foo1() { Promise.resolve().then(() => 42^) }
function foo2() { Promise.resolve().then(() => 42) }
Running test: arrowFunctionOnPause
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
[1] : {
columnNumber : 28
lineNumber : 0
scriptId : <scriptId>
}
[2] : {
columnNumber : 57
lineNumber : 0
scriptId : <scriptId>
}
[3] : {
columnNumber : 59
lineNumber : 0
scriptId : <scriptId>
}
[4] : {
columnNumber : 61
lineNumber : 0
scriptId : <scriptId>
}
[5] : {
columnNumber : 18
lineNumber : 1
scriptId : <scriptId>
}
[6] : {
columnNumber : 47
lineNumber : 1
scriptId : <scriptId>
}
[7] : {
columnNumber : 49
lineNumber : 1
scriptId : <scriptId>
}
[8] : {
columnNumber : 51
lineNumber : 1
scriptId : <scriptId>
}
[9] : {
columnNumber : 0
lineNumber : 2
scriptId : <scriptId>
}
[10] : {
columnNumber : 0
lineNumber : 3
scriptId : <scriptId>
}
[11] : {
columnNumber : 6
lineNumber : 3
scriptId : <scriptId>
}
]
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 28
lineNumber : 0
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 57
lineNumber : 0
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 59
lineNumber : 0
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 61
lineNumber : 0
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 18
lineNumber : 1
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 47
lineNumber : 1
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 49
lineNumber : 1
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 51
lineNumber : 1
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 0
lineNumber : 2
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 0
lineNumber : 3
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 6
lineNumber : 3
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
#debugger; function foo3() { #Promise.#resolve().#then(() => #42#) #}
function foo4() { #Promise.#resolve().#then(() => #42#) #};
#foo3();
#foo4()#;
paused in
{
columnNumber : 0
lineNumber : 2
scriptId : <scriptId>
}
debugger; function foo3() { Promise.resolve().then(() => 42) }
function foo4() { Promise.resolve().then(() => 42) };
^foo3();
foo4();
paused in foo3
{
columnNumber : 28
lineNumber : 0
scriptId : <scriptId>
}
debugger; function foo3() { ^Promise.resolve().then(() => 42) }
function foo4() { Promise.resolve().then(() => 42) };
foo3();
foo4();
paused in foo3
{
columnNumber : 61
lineNumber : 0
scriptId : <scriptId>
}
debugger; function foo3() { Promise.^resolve().then(() => 42) }
function foo4() { Promise.resolve().then(() => 42) };
foo3();
foo4();
paused in foo3
debugger; function foo3() { Promise.resolve().^then(() => 42) }
function foo4() { Promise.resolve().then(() => 42) };
foo3();
foo4();
paused in foo3
debugger; function foo3() { Promise.resolve().then(() => 42) ^}
function foo4() { Promise.resolve().then(() => 42) };
foo3();
foo4();
paused in
{
columnNumber : 0
lineNumber : 3
scriptId : <scriptId>
}
debugger; function foo3() { Promise.resolve().then(() => 42) }
function foo4() { Promise.resolve().then(() => 42) };
foo3();
^foo4();
paused in foo4
{
columnNumber : 18
lineNumber : 1
scriptId : <scriptId>
}
debugger; function foo3() { Promise.resolve().then(() => 42) }
function foo4() { ^Promise.resolve().then(() => 42) };
foo3();
foo4();
paused in foo4
{
columnNumber : 51
lineNumber : 1
scriptId : <scriptId>
}
debugger; function foo3() { Promise.resolve().then(() => 42) }
function foo4() { Promise.^resolve().then(() => 42) };
foo3();
foo4();
paused in foo4
debugger; function foo3() { Promise.resolve().then(() => 42) }
function foo4() { Promise.resolve().^then(() => 42) };
foo3();
foo4();
paused in foo4
debugger; function foo3() { Promise.resolve().then(() => 42) }
function foo4() { Promise.resolve().then(() => 42) ^};
foo3();
foo4();
paused in
{
columnNumber : 6
lineNumber : 3
scriptId : <scriptId>
}
debugger; function foo3() { Promise.resolve().then(() => 42) }
function foo4() { Promise.resolve().then(() => 42) };
foo3();
foo4()^;
paused in Promise.resolve.then
{
columnNumber : 57
lineNumber : 0
scriptId : <scriptId>
}
debugger; function foo3() { Promise.resolve().then(() => ^42) }
function foo4() { Promise.resolve().then(() => 42) };
foo3();
foo4();
paused in Promise.resolve.then
{
columnNumber : 59
lineNumber : 0
scriptId : <scriptId>
}
debugger; function foo3() { Promise.resolve().then(() => 42^) }
function foo4() { Promise.resolve().then(() => 42) };
foo3();
foo4();
paused in Promise.resolve.then
{
columnNumber : 47
lineNumber : 1
scriptId : <scriptId>
}
debugger; function foo3() { Promise.resolve().then(() => 42) }
function foo4() { Promise.resolve().then(() => ^42) };
foo3();
foo4();
paused in Promise.resolve.then
{
columnNumber : 49
lineNumber : 1
scriptId : <scriptId>
}
debugger; function foo3() { Promise.resolve().then(() => 42) }
function foo4() { Promise.resolve().then(() => 42^) };
foo3();
foo4();
Running test: getPossibleBreakpointsInRangeWithOffset
Test empty range in first line.
{
id : <messageId>
result : {
locations : [
]
}
}
function foo(){ return Promise.resolve(); }
function boo(){ return Promise.resolve().then(() => 42); }
Test one character range in first line.
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 17
lineNumber : 1
scriptId : <scriptId>
}
]
}
}
function foo(){ #return Promise.resolve(); }
function boo(){ return Promise.resolve().then(() => 42); }
Test empty range in not first line.
{
id : <messageId>
result : {
locations : [
]
}
}
function foo(){ return Promise.resolve(); }
function boo(){ return Promise.resolve().then(() => 42); }
Test one character range in not first line.
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 16
lineNumber : 2
scriptId : <scriptId>
}
]
}
}
function foo(){ return Promise.resolve(); }
function boo(){ #return Promise.resolve().then(() => 42); }
Test end is undefined
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 17
lineNumber : 1
scriptId : <scriptId>
}
[1] : {
columnNumber : 43
lineNumber : 1
scriptId : <scriptId>
}
[2] : {
columnNumber : 16
lineNumber : 2
scriptId : <scriptId>
}
[3] : {
columnNumber : 52
lineNumber : 2
scriptId : <scriptId>
}
[4] : {
columnNumber : 54
lineNumber : 2
scriptId : <scriptId>
}
[5] : {
columnNumber : 57
lineNumber : 2
scriptId : <scriptId>
}
[6] : {
columnNumber : 0
lineNumber : 3
scriptId : <scriptId>
}
]
}
}
function foo(){ #return Promise.#resolve(); #}
function boo(){ #return Promise.#resolve().#then(() => #42#); #}
#
Test end.lineNumber > scripts.lineCount()
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 17
lineNumber : 1
scriptId : <scriptId>
}
[1] : {
columnNumber : 43
lineNumber : 1
scriptId : <scriptId>
}
[2] : {
columnNumber : 16
lineNumber : 2
scriptId : <scriptId>
}
[3] : {
columnNumber : 52
lineNumber : 2
scriptId : <scriptId>
}
[4] : {
columnNumber : 54
lineNumber : 2
scriptId : <scriptId>
}
[5] : {
columnNumber : 57
lineNumber : 2
scriptId : <scriptId>
}
[6] : {
columnNumber : 0
lineNumber : 3
scriptId : <scriptId>
}
]
}
}
function foo(){ #return Promise.#resolve(); #}
function boo(){ #return Promise.#resolve().#then(() => #42#); #}
#
Test one string
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 17
lineNumber : 1
scriptId : <scriptId>
}
[1] : {
columnNumber : 43
lineNumber : 1
scriptId : <scriptId>
}
]
}
}
function foo(){ #return Promise.#resolve(); #}
function boo(){ return Promise.resolve().then(() => 42); }
Test end.columnNumber > end.line.length(), should be the same as previous.
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 17
lineNumber : 1
scriptId : <scriptId>
}
[1] : {
columnNumber : 43
lineNumber : 1
scriptId : <scriptId>
}
]
}
}
function foo(){ #return Promise.#resolve(); #}
function boo(){ return Promise.resolve().then(() => 42); }
Running test: withOffset
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 36
lineNumber : 3
scriptId : <scriptId>
}
[1] : {
columnNumber : 65
lineNumber : 3
scriptId : <scriptId>
}
[2] : {
columnNumber : 67
lineNumber : 3
scriptId : <scriptId>
}
[3] : {
columnNumber : 69
lineNumber : 3
scriptId : <scriptId>
}
[4] : {
columnNumber : 18
lineNumber : 4
scriptId : <scriptId>
}
[5] : {
columnNumber : 47
lineNumber : 4
scriptId : <scriptId>
}
[6] : {
columnNumber : 49
lineNumber : 4
scriptId : <scriptId>
}
[7] : {
columnNumber : 51
lineNumber : 4
scriptId : <scriptId>
}
]
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 36
lineNumber : 3
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 65
lineNumber : 3
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 67
lineNumber : 3
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 69
lineNumber : 3
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 18
lineNumber : 4
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 47
lineNumber : 4
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 49
lineNumber : 4
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
{
id : <messageId>
result : {
actualLocation : {
columnNumber : 51
lineNumber : 4
scriptId : <scriptId>
}
breakpointId : <breakpointId>
}
}
function foo5() { #Promise.#resolve().#then(() => #42#) #}
function foo6() { #Promise.#resolve().#then(() => #42#) #}
paused in foo5
{
columnNumber : 36
lineNumber : 3
scriptId : <scriptId>
}
function foo5() { ^Promise.resolve().then(() => 42) }
function foo6() { Promise.resolve().then(() => 42) }
paused in foo5
{
columnNumber : 69
lineNumber : 3
scriptId : <scriptId>
}
function foo5() { Promise.^resolve().then(() => 42) }
function foo6() { Promise.resolve().then(() => 42) }
paused in foo5
function foo5() { Promise.resolve().^then(() => 42) }
function foo6() { Promise.resolve().then(() => 42) }
paused in foo5
function foo5() { Promise.resolve().then(() => 42) ^}
function foo6() { Promise.resolve().then(() => 42) }
paused in foo6
{
columnNumber : 18
lineNumber : 4
scriptId : <scriptId>
}
function foo5() { Promise.resolve().then(() => 42) }
function foo6() { ^Promise.resolve().then(() => 42) }
paused in foo6
{
columnNumber : 51
lineNumber : 4
scriptId : <scriptId>
}
function foo5() { Promise.resolve().then(() => 42) }
function foo6() { Promise.^resolve().then(() => 42) }
paused in foo6
function foo5() { Promise.resolve().then(() => 42) }
function foo6() { Promise.resolve().^then(() => 42) }
paused in foo6
function foo5() { Promise.resolve().then(() => 42) }
function foo6() { Promise.resolve().then(() => 42) ^}
paused in Promise.resolve.then
{
columnNumber : 65
lineNumber : 3
scriptId : <scriptId>
}
function foo5() { Promise.resolve().then(() => ^42) }
function foo6() { Promise.resolve().then(() => 42) }
paused in Promise.resolve.then
{
columnNumber : 67
lineNumber : 3
scriptId : <scriptId>
}
function foo5() { Promise.resolve().then(() => 42^) }
function foo6() { Promise.resolve().then(() => 42) }
paused in Promise.resolve.then
{
columnNumber : 47
lineNumber : 4
scriptId : <scriptId>
}
function foo5() { Promise.resolve().then(() => 42) }
function foo6() { Promise.resolve().then(() => ^42) }
paused in Promise.resolve.then
{
columnNumber : 49
lineNumber : 4
scriptId : <scriptId>
}
function foo5() { Promise.resolve().then(() => 42) }
function foo6() { Promise.resolve().then(() => 42^) }
Running test: arrowFunctionReturn
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
[1] : {
columnNumber : 6
lineNumber : 0
scriptId : <scriptId>
}
[2] : {
columnNumber : 9
lineNumber : 0
scriptId : <scriptId>
}
]
}
}
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 34
lineNumber : 0
scriptId : <scriptId>
}
[1] : {
columnNumber : 45
lineNumber : 0
scriptId : <scriptId>
}
[2] : {
columnNumber : 48
lineNumber : 0
scriptId : <scriptId>
}
[3] : {
columnNumber : 49
lineNumber : 0
scriptId : <scriptId>
}
]
}
}
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
[1] : {
columnNumber : 8
lineNumber : 0
scriptId : <scriptId>
}
[2] : {
columnNumber : 12
lineNumber : 0
scriptId : <scriptId>
}
[3] : {
columnNumber : 13
lineNumber : 0
scriptId : <scriptId>
}
]
}
}
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 17
lineNumber : 0
scriptId : <scriptId>
}
[1] : {
columnNumber : 21
lineNumber : 0
scriptId : <scriptId>
}
[2] : {
columnNumber : 22
lineNumber : 0
scriptId : <scriptId>
}
]
}
}
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
[1] : {
columnNumber : 6
lineNumber : 0
scriptId : <scriptId>
}
[2] : {
columnNumber : 8
lineNumber : 0
scriptId : <scriptId>
}
[3] : {
columnNumber : 9
lineNumber : 0
scriptId : <scriptId>
}
]
}
}
{
id : <messageId>
result : {
locations : [
[0] : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
[1] : {
columnNumber : 8
lineNumber : 0
scriptId : <scriptId>
}
[2] : {
columnNumber : 19
lineNumber : 0
scriptId : <scriptId>
}
]
}
}
#() => #239#
function foo() { function boo() { #return 239 #} #}#
#() => { #239 #}#
function foo() { #239 #}#
#() => #23#9#
#() => { #return 239 #}
Running test: argumentsAsCalls
function foo(){#}
function boo(){#}
function main(f1,f2){#}
#main(#foo(), #boo());#
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
print("Test for Debugger.getPossibleBreakpoints");
print('Test for Debugger.getPossibleBreakpoints');
Protocol.Runtime.enable();
Protocol.Debugger.enable();
......@@ -10,159 +10,149 @@ Protocol.Debugger.enable();
InspectorTest.runTestSuite([
function getPossibleBreakpointsInRange(next) {
var source = "function foo(){ return Promise.resolve(); }\nfunction boo(){ return Promise.resolve().then(() => 42); }\n\n";
var source = 'function foo(){ return Promise.resolve(); }\nfunction boo(){ return Promise.resolve().then(() => 42); }\n\n';
var scriptId;
compileScript(source)
.then(id => scriptId = id)
.then(() => InspectorTest.log("Test start.scriptId != end.scriptId."))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 0, columnNumber: 0, scriptId: scriptId }, end: { lineNumber: 0, columnNumber: 0, scriptId: scriptId + "0" }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test not existing scriptId."))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 0, columnNumber: 0, scriptId: "-1" }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test end < start."))
.then(() => InspectorTest.log('Test start.scriptId != end.scriptId.'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 0, columnNumber: 0, scriptId: scriptId }, end: { lineNumber: 0, columnNumber: 0, scriptId: scriptId + '0' }}))
.then(message => dumpAllLocations(message, source))
.then(() => InspectorTest.log('Test not existing scriptId.'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 0, columnNumber: 0, scriptId: '-1' }}))
.then(message => dumpAllLocations(message, source))
.then(() => InspectorTest.log('Test end < start.'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 1, columnNumber: 0, scriptId: scriptId }, end: { lineNumber: 0, columnNumber: 0, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test empty range in first line."))
.then(message => dumpAllLocations(message, source))
.then(() => InspectorTest.log('Test empty range in first line.'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 0, columnNumber: 16, scriptId: scriptId }, end: { lineNumber: 0, columnNumber: 16, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test one character range in first line."))
.then(message => dumpAllLocations(message, source))
.then(() => InspectorTest.log('Test one character range in first line.'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 0, columnNumber: 16, scriptId: scriptId }, end: { lineNumber: 0, columnNumber: 17, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test empty range in not first line."))
.then(message => dumpAllLocations(message, source))
.then(() => InspectorTest.log('Test empty range in not first line.'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 1, columnNumber: 16, scriptId: scriptId }, end: { lineNumber: 1, columnNumber: 16, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test one character range in not first line."))
.then(message => dumpAllLocations(message, source))
.then(() => InspectorTest.log('Test one character range in not first line.'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 1, columnNumber: 16, scriptId: scriptId }, end: { lineNumber: 1, columnNumber: 17, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test end is undefined"))
.then(message => dumpAllLocations(message, source))
.then(() => InspectorTest.log('Test end is undefined'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 0, columnNumber: 0, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test end.lineNumber > scripts.lineCount()"))
.then(message => dumpAllLocations(message, source))
.then(() => InspectorTest.log('Test end.lineNumber > scripts.lineCount()'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 0, columnNumber: 0, scriptId: scriptId }, end: { lineNumber: 5, columnNumber: 0, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test one string"))
.then(message => dumpAllLocations(message, source))
.then(() => InspectorTest.log('Test one string'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 0, columnNumber: 0, scriptId: scriptId }, end: { lineNumber: 1, columnNumber: 0, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test end.columnNumber > end.line.length(), should be the same as previous."))
.then(message => dumpAllLocations(message, source))
.then(() => InspectorTest.log('Test end.columnNumber > end.line.length(), should be the same as previous.'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 0, columnNumber: 0, scriptId: scriptId }, end: { lineNumber: 0, columnNumber: 256, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(message => dumpAllLocations(message, source))
.then(next);
},
function getPossibleBreakpointsInArrow(next) {
var source = "function foo() { return Promise.resolve().then(() => 239).then(() => 42).then(() => () => 42) }";
var source = 'function foo() { return Promise.resolve().then(() => 239).then(() => 42).then(() => () => 42) }';
var scriptId;
compileScript(source)
.then(id => scriptId = id)
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 0, columnNumber: 0, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(message => dumpAllLocations(message, source))
.then(next);
},
function arrowFunctionFirstLine(next) {
Protocol.Debugger.onPaused(message => {
InspectorTest.log("paused in " + message.params.callFrames[0].functionName);
InspectorTest.logMessage(message.params.callFrames[0].location);
Protocol.Debugger.resume();
});
Protocol.Debugger.onPaused(message => dumpBreakLocationInSourceAndResume(message, source));
var source = `function foo1() { Promise.resolve().then(() => 42) }
function foo2() { Promise.resolve().then(() => 42) }`;
waitForPossibleBreakpoints(source, { lineNumber: 0, columnNumber: 0 }, { lineNumber: 1, columnNumber: 0 })
.then(InspectorTest.logMessage)
.then(message => dumpAllLocations(message, source))
.then(setAllBreakpoints)
.then(() => Protocol.Runtime.evaluate({ expression: "foo1(); foo2()"}))
.then(() => Protocol.Runtime.evaluate({ expression: 'foo1(); foo2()'}))
.then(next);
},
function arrowFunctionOnPause(next) {
function dumpAndResume(message) {
InspectorTest.log("paused in " + message.params.callFrames[0].functionName);
InspectorTest.logMessage(message.params.callFrames[0].location);
Protocol.Debugger.resume();
}
var source = `debugger; function foo3() { Promise.resolve().then(() => 42) }
function foo4() { Promise.resolve().then(() => 42) };\nfoo3();\nfoo4();`;
waitForPossibleBreakpointsOnPause(source, { lineNumber: 0, columnNumber: 0 }, undefined, next)
.then(InspectorTest.logMessage)
.then(message => dumpAllLocations(message, source))
.then(setAllBreakpoints)
.then(() => Protocol.Debugger.onPaused(dumpAndResume))
.then(() => Protocol.Debugger.onPaused(message => dumpBreakLocationInSourceAndResume(message, source)))
.then(() => Protocol.Debugger.resume());
},
function getPossibleBreakpointsInRangeWithOffset(next) {
var source = "function foo(){ return Promise.resolve(); }\nfunction boo(){ return Promise.resolve().then(() => 42); }\n\n";
var source = 'function foo(){ return Promise.resolve(); }\nfunction boo(){ return Promise.resolve().then(() => 42); }\n\n';
var scriptId;
compileScript(source, { name: "with-offset.js", line_offset: 1, column_offset: 1 })
compileScript(source, { name: 'with-offset.js', line_offset: 1, column_offset: 1 })
.then(id => scriptId = id)
.then(() => InspectorTest.log("Test empty range in first line."))
.then(() => InspectorTest.log('Test empty range in first line.'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 1, columnNumber: 17, scriptId: scriptId }, end: { lineNumber: 1, columnNumber: 17, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test one character range in first line."))
.then(message => dumpAllLocations(message, source, 1, 1))
.then(() => InspectorTest.log('Test one character range in first line.'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 1, columnNumber: 17, scriptId: scriptId }, end: { lineNumber: 1, columnNumber: 18, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test empty range in not first line."))
.then(message => dumpAllLocations(message, source, 1, 1))
.then(() => InspectorTest.log('Test empty range in not first line.'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 2, columnNumber: 16, scriptId: scriptId }, end: { lineNumber: 2, columnNumber: 16, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test one character range in not first line."))
.then(message => dumpAllLocations(message, source, 1, 1))
.then(() => InspectorTest.log('Test one character range in not first line.'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 2, columnNumber: 16, scriptId: scriptId }, end: { lineNumber: 2, columnNumber: 17, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test end is undefined"))
.then(message => dumpAllLocations(message, source, 1, 1))
.then(() => InspectorTest.log('Test end is undefined'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 0, columnNumber: 0, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test end.lineNumber > scripts.lineCount()"))
.then(message => dumpAllLocations(message, source, 1, 1))
.then(() => InspectorTest.log('Test end.lineNumber > scripts.lineCount()'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 0, columnNumber: 0, scriptId: scriptId }, end: { lineNumber: 5, columnNumber: 0, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test one string"))
.then(message => dumpAllLocations(message, source, 1, 1))
.then(() => InspectorTest.log('Test one string'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 1, columnNumber: 1, scriptId: scriptId }, end: { lineNumber: 2, columnNumber: 0, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(() => InspectorTest.log("Test end.columnNumber > end.line.length(), should be the same as previous."))
.then(message => dumpAllLocations(message, source, 1, 1))
.then(() => InspectorTest.log('Test end.columnNumber > end.line.length(), should be the same as previous.'))
.then(() => Protocol.Debugger.getPossibleBreakpoints({ start: { lineNumber: 1, columnNumber: 1, scriptId: scriptId }, end: { lineNumber: 1, columnNumber: 256, scriptId: scriptId }}))
.then(InspectorTest.logMessage)
.then(message => dumpAllLocations(message, source, 1, 1))
.then(next);
},
function withOffset(next) {
Protocol.Debugger.onPaused(message => {
InspectorTest.log("paused in " + message.params.callFrames[0].functionName);
InspectorTest.logMessage(message.params.callFrames[0].location);
Protocol.Debugger.resume();
});
Protocol.Debugger.onPaused(message => dumpBreakLocationInSourceAndResume(message, source, 3, 18));
var source = `function foo5() { Promise.resolve().then(() => 42) }
function foo6() { Promise.resolve().then(() => 42) }`;
waitForPossibleBreakpoints(source, { lineNumber: 0, columnNumber: 0 }, undefined, { name: "with-offset.js", line_offset: 3, column_offset: 18 })
.then(InspectorTest.logMessage)
waitForPossibleBreakpoints(source, { lineNumber: 0, columnNumber: 0 }, undefined, { name: 'with-offset.js', line_offset: 3, column_offset: 18 })
.then(message => dumpAllLocations(message, source, 3, 18))
.then(setAllBreakpoints)
.then(() => Protocol.Runtime.evaluate({ expression: "foo5(); foo6()"}))
.then(() => Protocol.Runtime.evaluate({ expression: 'foo5(); foo6()'}))
.then(next);
},
function arrowFunctionReturn(next) {
waitForPossibleBreakpoints("() => 239\n", { lineNumber: 0, columnNumber: 0 })
.then(InspectorTest.logMessage)
.then(() => waitForPossibleBreakpoints("function foo() { function boo() { return 239 } }\n", { lineNumber: 0, columnNumber: 0 }))
.then(InspectorTest.logMessage)
.then(() => waitForPossibleBreakpoints("() => { 239 }\n", { lineNumber: 0, columnNumber: 0 }))
.then(InspectorTest.logMessage)
// TODO(kozyatinskiy): lineNumber for return position should be 21 instead of 22.
.then(() => waitForPossibleBreakpoints("function foo() { 239 }\n", { lineNumber: 0, columnNumber: 0 }))
.then(InspectorTest.logMessage)
function checkSource(source, location) {
return waitForPossibleBreakpoints(source, location)
.then(message => dumpAllLocations(message, source));
}
checkSource('() => 239\n', { lineNumber: 0, columnNumber: 0 })
.then(() => checkSource('function foo() { function boo() { return 239 } }\n', { lineNumber: 0, columnNumber: 0 }))
.then(() => checkSource('() => { 239 }\n', { lineNumber: 0, columnNumber: 0 }))
.then(() => checkSource('function foo() { 239 }\n', { lineNumber: 0, columnNumber: 0 }))
// TODO(kozyatinskiy): lineNumber for return position should be only 9, not 8.
.then(() => waitForPossibleBreakpoints("() => 239", { lineNumber: 0, columnNumber: 0 }))
.then(InspectorTest.logMessage)
// TODO(kozyatinskiy): lineNumber for return position should be only 19, not 20.
.then(() => waitForPossibleBreakpoints("() => { return 239 }", { lineNumber: 0, columnNumber: 0 }))
.then(InspectorTest.logMessage)
.then(next)
.then(() => checkSource('() => 239', { lineNumber: 0, columnNumber: 0 }))
.then(() => checkSource('() => { return 239 }', { lineNumber: 0, columnNumber: 0 }))
.then(next);
},
function argumentsAsCalls(next) {
var source = 'function foo(){}\nfunction boo(){}\nfunction main(f1,f2){}\nmain(foo(), boo());\n';
waitForPossibleBreakpoints(source, { lineNumber: 0, columnNumber: 0 })
.then(message => dumpAllLocations(message, source))
.then(next);
}
]);
function compileScript(source, origin) {
var promise = Protocol.Debugger.onceScriptParsed().then(message => message.params.scriptId);
if (!origin) origin = { name: "", line_offset: 0, column_offset: 0 };
if (!origin) origin = { name: '', line_offset: 0, column_offset: 0 };
compileAndRunWithOrigin(source, origin.name, origin.line_offset, origin.column_offset, false);
return promise;
}
......@@ -184,20 +174,60 @@ function waitForPossibleBreakpointsOnPause(source, start, end, next) {
function setAllBreakpoints(message) {
var promises = [];
for (var location of message.result.locations)
promises.push(Protocol.Debugger.setBreakpoint({ location: location }).then(checkBreakpointAndDump));
promises.push(Protocol.Debugger.setBreakpoint({ location: location }).then(checkBreakpoint));
return Promise.all(promises);
}
function checkBreakpointAndDump(message) {
function checkBreakpoint(message) {
if (message.error) {
InspectorTest.log("FAIL: error in setBreakpoint");
InspectorTest.log('FAIL: error in setBreakpoint');
InspectorTest.logMessage(message);
return;
}
var id_data = message.result.breakpointId.split(":");
var id_data = message.result.breakpointId.split(':');
if (parseInt(id_data[1]) !== message.result.actualLocation.lineNumber || parseInt(id_data[2]) !== message.result.actualLocation.columnNumber) {
InspectorTest.log("FAIL: possible breakpoint was resolved in another location");
InspectorTest.log('FAIL: possible breakpoint was resolved in another location');
}
}
function dumpAllLocations(message, source, lineOffset, columnOffset) {
if (message.error) {
InspectorTest.logMessage(message);
return;
}
lineOffset = lineOffset || 0;
columnOffset = columnOffset || 0;
var sourceLines = source.split('\n')
var lineOffsets = Array(sourceLines.length).fill(0);
for (var location of message.result.locations) {
var lineNumber = location.lineNumber - lineOffset;
var columnNumber = lineNumber !== 0 ? location.columnNumber : location.columnNumber - columnOffset;
var line = sourceLines[lineNumber] || '';
var offset = lineOffsets[lineNumber];
line = line.slice(0, columnNumber + offset) + '#' + line.slice(columnNumber + offset);
++lineOffsets[lineNumber];
sourceLines[lineNumber] = line;
}
InspectorTest.logMessage(message);
InspectorTest.log(sourceLines.join('\n'));
return message;
}
function dumpBreakLocationInSourceAndResume(message, source, lineOffset, columnOffset) {
lineOffset = lineOffset || 0;
columnOffset = columnOffset || 0;
InspectorTest.log('paused in ' + message.params.callFrames[0].functionName);
var location = message.params.callFrames[0].location;
var sourceLines = source.split('\n')
var lineNumber = location.lineNumber - lineOffset;
var columnNumber = lineNumber !== 0 ? location.columnNumber : location.columnNumber - columnOffset;
var line = sourceLines[lineNumber];
line = line.slice(0, columnNumber) + '^' + line.slice(columnNumber);
sourceLines[lineNumber] = line;
InspectorTest.log(sourceLines.join('\n'));
Protocol.Debugger.resume();
}
......@@ -71,7 +71,7 @@ class InspectorProtocolTestSuite(testsuite.TestSuite):
def ExpIterator():
for line in expected_lines:
if line.startswith("#") or not line.strip(): continue
if not line.strip(): continue
yield line.strip()
def ActIterator(lines):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment