@@ -16,6 +16,7 @@ import { IBreakpointUpdateData, IDebugSessionOptions } from 'vs/workbench/contri
1616import { NullOpenerService } from 'vs/platform/opener/common/opener' ;
1717import { RawDebugSession } from 'vs/workbench/contrib/debug/browser/rawDebugSession' ;
1818import { timeout } from 'vs/base/common/async' ;
19+ import { dispose } from 'vs/base/common/lifecycle' ;
1920
2021function createMockSession ( model : DebugModel , name = 'mockSession' , options ?: IDebugSessionOptions ) : DebugSession {
2122 return new DebugSession ( { resolved : { name, type : 'node' , request : 'launch' } , unresolved : undefined } , undefined ! , model , options , undefined ! , undefined ! , undefined ! , undefined ! , undefined ! , undefined ! , undefined ! , undefined ! , NullOpenerService , undefined ! ) ;
@@ -34,16 +35,40 @@ suite('Debug - Model', () => {
3435
3536 test ( 'breakpoints simple' , ( ) => {
3637 const modelUri = uri . file ( '/myfolder/myfile.js' ) ;
38+ let eventCount = 0 ;
39+
40+ let toDispose = model . onDidChangeBreakpoints ( e => {
41+ eventCount ++ ;
42+ assert . equal ( e ?. added ?. length , 2 ) ;
43+ assert . equal ( e ?. sessionOnly , false ) ;
44+ assert . equal ( e ?. removed , undefined ) ;
45+ assert . equal ( e ?. changed , undefined ) ;
46+
47+ dispose ( toDispose ) ;
48+ } ) ;
3749 model . addBreakpoints ( modelUri , [ { lineNumber : 5 , enabled : true } , { lineNumber : 10 , enabled : false } ] ) ;
50+ assert . equal ( eventCount , 1 ) ;
3851 assert . equal ( model . areBreakpointsActivated ( ) , true ) ;
3952 assert . equal ( model . getBreakpoints ( ) . length , 2 ) ;
4053
54+ toDispose = model . onDidChangeBreakpoints ( e => {
55+ eventCount ++ ;
56+ assert . equal ( e ?. added , undefined ) ;
57+ assert . equal ( e ?. sessionOnly , false ) ;
58+ assert . equal ( e ?. removed ?. length , 2 ) ;
59+ assert . equal ( e ?. changed , undefined ) ;
60+
61+ dispose ( toDispose ) ;
62+ } ) ;
63+
4164 model . removeBreakpoints ( model . getBreakpoints ( ) ) ;
65+ assert . equal ( eventCount , 2 ) ;
4266 assert . equal ( model . getBreakpoints ( ) . length , 0 ) ;
4367 } ) ;
4468
4569 test ( 'breakpoints toggling' , ( ) => {
4670 const modelUri = uri . file ( '/myfolder/myfile.js' ) ;
71+
4772 model . addBreakpoints ( modelUri , [ { lineNumber : 5 , enabled : true } , { lineNumber : 10 , enabled : false } ] ) ;
4873 model . addBreakpoints ( modelUri , [ { lineNumber : 12 , enabled : true , condition : 'fake condition' } ] ) ;
4974 assert . equal ( model . getBreakpoints ( ) . length , 3 ) ;
@@ -66,16 +91,33 @@ suite('Debug - Model', () => {
6691 model . addBreakpoints ( modelUri2 , [ { lineNumber : 1 , enabled : true } , { lineNumber : 2 , enabled : true } , { lineNumber : 3 , enabled : false } ] ) ;
6792
6893 assert . equal ( model . getBreakpoints ( ) . length , 5 ) ;
94+ assert . equal ( model . getBreakpoints ( { uri : modelUri1 } ) . length , 2 ) ;
95+ assert . equal ( model . getBreakpoints ( { uri : modelUri2 } ) . length , 3 ) ;
96+ assert . equal ( model . getBreakpoints ( { lineNumber : 5 } ) . length , 1 ) ;
97+ assert . equal ( model . getBreakpoints ( { column : 5 } ) . length , 0 ) ;
98+
99+
69100 const bp = model . getBreakpoints ( ) [ 0 ] ;
70101 const update = new Map < string , IBreakpointUpdateData > ( ) ;
71102 update . set ( bp . getId ( ) , { lineNumber : 100 } ) ;
103+ let eventFired = false ;
104+ model . onDidChangeBreakpoints ( e => {
105+ eventFired = true ;
106+ assert . equal ( e ?. added , undefined ) ;
107+ assert . equal ( e ?. removed , undefined ) ;
108+ assert . equal ( e ?. changed ?. length , 1 ) ;
109+ } ) ;
72110 model . updateBreakpoints ( update ) ;
111+ assert . equal ( eventFired , true ) ;
73112 assert . equal ( bp . lineNumber , 100 ) ;
74113
114+ assert . equal ( model . getBreakpoints ( { enabledOnly : true } ) . length , 3 ) ;
75115 model . enableOrDisableAllBreakpoints ( false ) ;
76116 model . getBreakpoints ( ) . forEach ( bp => {
77117 assert . equal ( bp . enabled , false ) ;
78118 } ) ;
119+ assert . equal ( model . getBreakpoints ( { enabledOnly : true } ) . length , 0 ) ;
120+
79121 model . setEnablement ( bp , true ) ;
80122 assert . equal ( bp . enabled , true ) ;
81123
@@ -150,6 +192,50 @@ suite('Debug - Model', () => {
150192 assert . equal ( breakpoints [ 0 ] . supported , true ) ;
151193 } ) ;
152194
195+ test ( 'exception breakpoints' , ( ) => {
196+ let eventCount = 0 ;
197+ model . onDidChangeBreakpoints ( ( ) => eventCount ++ ) ;
198+ model . setExceptionBreakpoints ( [ { filter : 'uncaught' , label : 'UNCAUGHT' , default : true } ] ) ;
199+ assert . equal ( eventCount , 1 ) ;
200+ let exceptionBreakpoints = model . getExceptionBreakpoints ( ) ;
201+ assert . equal ( exceptionBreakpoints . length , 1 ) ;
202+ assert . equal ( exceptionBreakpoints [ 0 ] . filter , 'uncaught' ) ;
203+ assert . equal ( exceptionBreakpoints [ 0 ] . enabled , true ) ;
204+
205+ model . setExceptionBreakpoints ( [ { filter : 'uncaught' , label : 'UNCAUGHT' } , { filter : 'caught' , label : 'CAUGHT' } ] ) ;
206+ assert . equal ( eventCount , 2 ) ;
207+ exceptionBreakpoints = model . getExceptionBreakpoints ( ) ;
208+ assert . equal ( exceptionBreakpoints . length , 2 ) ;
209+ assert . equal ( exceptionBreakpoints [ 0 ] . filter , 'uncaught' ) ;
210+ assert . equal ( exceptionBreakpoints [ 0 ] . enabled , true ) ;
211+ assert . equal ( exceptionBreakpoints [ 1 ] . filter , 'caught' ) ;
212+ assert . equal ( exceptionBreakpoints [ 1 ] . label , 'CAUGHT' ) ;
213+ assert . equal ( exceptionBreakpoints [ 1 ] . enabled , false ) ;
214+ } ) ;
215+
216+ test ( 'data breakpoints' , ( ) => {
217+ let eventCount = 0 ;
218+ model . onDidChangeBreakpoints ( ( ) => eventCount ++ ) ;
219+
220+ model . addDataBreakpoint ( 'label' , 'id' , true , [ 'read' ] ) ;
221+ model . addDataBreakpoint ( 'second' , 'secondId' , false , [ 'readWrite' ] ) ;
222+ const dataBreakpoints = model . getDataBreakpoints ( ) ;
223+ assert . equal ( dataBreakpoints [ 0 ] . canPersist , true ) ;
224+ assert . equal ( dataBreakpoints [ 0 ] . dataId , 'id' ) ;
225+ assert . equal ( dataBreakpoints [ 1 ] . canPersist , false ) ;
226+ assert . equal ( dataBreakpoints [ 1 ] . description , 'second' ) ;
227+
228+ assert . equal ( eventCount , 2 ) ;
229+
230+ model . removeDataBreakpoints ( dataBreakpoints [ 0 ] . getId ( ) ) ;
231+ assert . equal ( eventCount , 3 ) ;
232+ assert . equal ( model . getDataBreakpoints ( ) . length , 1 ) ;
233+
234+ model . removeDataBreakpoints ( ) ;
235+ assert . equal ( model . getDataBreakpoints ( ) . length , 0 ) ;
236+ assert . equal ( eventCount , 4 ) ;
237+ } ) ;
238+
153239 // Threads
154240
155241 test ( 'threads simple' , ( ) => {
0 commit comments