Include optional breakpoint info in setBreakpoints responses to reliably populate the UI (#2347)

Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
This commit is contained in:
polinasok 2021-02-21 08:02:42 -08:00 committed by GitHub
parent 98728d8fe1
commit 540e63a55e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 9 deletions

@ -599,7 +599,9 @@ func (s *Server) onSetBreakpointsRequest(request *dap.SetBreakpointsRequest) {
response.Body.Breakpoints[i].Line = want.Line
response.Body.Breakpoints[i].Message = err.Error()
} else {
response.Body.Breakpoints[i].Id = got.ID
response.Body.Breakpoints[i].Line = got.Line
response.Body.Breakpoints[i].Source = dap.Source{Name: request.Arguments.Source.Name, Path: request.Arguments.Source.Path}
}
}
s.send(response)

@ -419,8 +419,8 @@ func TestPreSetBreakpoint(t *testing.T) {
t.Errorf("got %#v, want len(Breakpoints)=1", sResp)
}
bkpt0 := sResp.Body.Breakpoints[0]
if !bkpt0.Verified || bkpt0.Line != 8 {
t.Errorf("got breakpoints[0] = %#v, want Verified=true, Line=8", bkpt0)
if !bkpt0.Verified || bkpt0.Line != 8 || bkpt0.Id != 1 || bkpt0.Source.Name != filepath.Base(fixture.Source) || bkpt0.Source.Path != fixture.Source {
t.Errorf("got breakpoints[0] = %#v, want Verified=true, Line=8, Id=1, Path=%q", bkpt0, fixture.Source)
}
client.SetExceptionBreakpointsRequest()
@ -1456,6 +1456,7 @@ func TestSetBreakpoint(t *testing.T) {
type Breakpoint struct {
line int
path string
verified bool
msgPrefix string
}
@ -1467,7 +1468,7 @@ func TestSetBreakpoint(t *testing.T) {
return
}
for i, bp := range got.Body.Breakpoints {
if bp.Line != bps[i].line || bp.Verified != bps[i].verified ||
if bp.Line != bps[i].line || bp.Verified != bps[i].verified || bp.Source.Path != bps[i].path ||
!strings.HasPrefix(bp.Message, bps[i].msgPrefix) {
t.Errorf("got breakpoints[%d] = %#v, \nwant %#v", i, bp, bps[i])
}
@ -1476,11 +1477,11 @@ func TestSetBreakpoint(t *testing.T) {
// Set two breakpoints at the next two lines in main
client.SetBreakpointsRequest(fixture.Source, []int{17, 18})
expectSetBreakpointsResponse([]Breakpoint{{17, true, ""}, {18, true, ""}})
expectSetBreakpointsResponse([]Breakpoint{{17, fixture.Source, true, ""}, {18, fixture.Source, true, ""}})
// Clear 17, reset 18
client.SetBreakpointsRequest(fixture.Source, []int{18})
expectSetBreakpointsResponse([]Breakpoint{{18, true, ""}})
expectSetBreakpointsResponse([]Breakpoint{{18, fixture.Source, true, ""}})
// Skip 17, continue to 18
client.ContinueRequest(1)
@ -1490,7 +1491,7 @@ func TestSetBreakpoint(t *testing.T) {
// Set another breakpoint inside the loop in loop(), twice to trigger error
client.SetBreakpointsRequest(fixture.Source, []int{8, 8})
expectSetBreakpointsResponse([]Breakpoint{{8, true, ""}, {8, false, "Breakpoint exists"}})
expectSetBreakpointsResponse([]Breakpoint{{8, fixture.Source, true, ""}, {8, "", false, "Breakpoint exists"}})
// Continue into the loop
client.ContinueRequest(1)
@ -1503,7 +1504,7 @@ func TestSetBreakpoint(t *testing.T) {
// Edit the breakpoint to add a condition
client.SetConditionalBreakpointsRequest(fixture.Source, []int{8}, map[int]string{8: "i == 3"})
expectSetBreakpointsResponse([]Breakpoint{{8, true, ""}})
expectSetBreakpointsResponse([]Breakpoint{{8, fixture.Source, true, ""}})
// Continue until condition is hit
client.ContinueRequest(1)
@ -1516,7 +1517,7 @@ func TestSetBreakpoint(t *testing.T) {
// Edit the breakpoint to remove a condition
client.SetConditionalBreakpointsRequest(fixture.Source, []int{8}, map[int]string{8: ""})
expectSetBreakpointsResponse([]Breakpoint{{8, true, ""}})
expectSetBreakpointsResponse([]Breakpoint{{8, fixture.Source, true, ""}})
// Continue for one more loop iteration
client.ContinueRequest(1)
@ -1529,7 +1530,7 @@ func TestSetBreakpoint(t *testing.T) {
// Set at a line without a statement
client.SetBreakpointsRequest(fixture.Source, []int{1000})
expectSetBreakpointsResponse([]Breakpoint{{1000, false, "could not find statement"}}) // all cleared, none set
expectSetBreakpointsResponse([]Breakpoint{{1000, "", false, "could not find statement"}}) // all cleared, none set
},
// The program has an infinite loop, so we must kill it by disconnecting.
disconnect: true,