199451b44SJordan Rupprecht"""
299451b44SJordan RupprechtTest lldb-vscode setBreakpoints request
399451b44SJordan Rupprecht"""
499451b44SJordan Rupprecht
599451b44SJordan Rupprecht
699451b44SJordan Rupprechtimport unittest2
799451b44SJordan Rupprechtimport vscode
899451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
999451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
1099451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
1199451b44SJordan Rupprechtimport lldbvscode_testcase
1299451b44SJordan Rupprecht
1399451b44SJordan Rupprecht
1499451b44SJordan Rupprechtclass TestVSCode_setExceptionBreakpoints(
1599451b44SJordan Rupprecht        lldbvscode_testcase.VSCodeTestCaseBase):
1699451b44SJordan Rupprecht
1799451b44SJordan Rupprecht    @skipIfWindows
1814fb3179SJonas Devlieghere    @skipIfRemote
1999451b44SJordan Rupprecht    def test_functionality(self):
2099451b44SJordan Rupprecht        '''Tests setting and clearing exception breakpoints.
2199451b44SJordan Rupprecht           This packet is a bit tricky on the debug adaptor side since there
2299451b44SJordan Rupprecht           is no "clear exception breakpoints" packet. Exception breakpoints
2399451b44SJordan Rupprecht           are set by sending a "setExceptionBreakpoints" packet with zero or
2499451b44SJordan Rupprecht           more exception filters. If exception breakpoints have been set
25*e9264b74SKazuaki Ishizaki           before, any existing breakpoints must remain set, and any new
2699451b44SJordan Rupprecht           breakpoints must be created, and any breakpoints that were in
2799451b44SJordan Rupprecht           previous requests and are not in the current request must be
2899451b44SJordan Rupprecht           removed. This exception tests this setting and clearing and makes
2999451b44SJordan Rupprecht           sure things happen correctly. It doesn't test hitting breakpoints
3099451b44SJordan Rupprecht           and the functionality of each breakpoint, like 'conditions' and
3199451b44SJordan Rupprecht           x'hitCondition' settings.
3299451b44SJordan Rupprecht        '''
3399451b44SJordan Rupprecht        # Visual Studio Code Debug Adaptors have no way to specify the file
3499451b44SJordan Rupprecht        # without launching or attaching to a process, so we must start a
3599451b44SJordan Rupprecht        # process in order to be able to set breakpoints.
3699451b44SJordan Rupprecht        program = self.getBuildArtifact("a.out")
3799451b44SJordan Rupprecht        self.build_and_launch(program)
3899451b44SJordan Rupprecht
3999451b44SJordan Rupprecht        filters = ['cpp_throw', 'cpp_catch']
4099451b44SJordan Rupprecht        response = self.vscode.request_setExceptionBreakpoints(filters)
4199451b44SJordan Rupprecht        if response:
4299451b44SJordan Rupprecht            self.assertTrue(response['success'])
4399451b44SJordan Rupprecht
4499451b44SJordan Rupprecht        self.continue_to_exception_breakpoint('C++ Throw')
4599451b44SJordan Rupprecht        self.continue_to_exception_breakpoint('C++ Catch')
46