aboutsummaryrefslogtreecommitdiff
path: root/lldb/test/API/tools/lldb-dap/send-event/TestDAP_sendEvent.py
blob: a01845669666ff61b7984b5f2d11a9e779dccfc7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"""
Test lldb-dap send-event integration.
"""

import json

from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
import lldbdap_testcase


class TestDAP_sendEvent(lldbdap_testcase.DAPTestCaseBase):
    @skipIfWindows
    def test_send_event(self):
        """
        Test sending a custom event.
        """
        program = self.getBuildArtifact("a.out")
        source = "main.c"
        breakpoint_line = line_number(source, "// breakpoint")
        custom_event_body = {
            "key": 321,
            "arr": [True],
        }
        self.build_and_launch(
            program,
            stopCommands=[
                "lldb-dap send-event my-custom-event-no-body",
                "lldb-dap send-event my-custom-event '{}'".format(
                    json.dumps(custom_event_body)
                ),
            ],
        )
        self.set_source_breakpoints(source, [breakpoint_line])
        self.continue_to_next_stop()

        custom_event = self.dap_server.wait_for_event(
            filter=["my-custom-event-no-body"]
        )
        self.assertEqual(custom_event["event"], "my-custom-event-no-body")
        self.assertIsNone(custom_event.get("body", None))

        custom_event = self.dap_server.wait_for_event(filter=["my-custom-event"])
        self.assertEqual(custom_event["event"], "my-custom-event")
        self.assertEqual(custom_event["body"], custom_event_body)

    @skipIfWindows
    def test_send_internal_event(self):
        """
        Test sending an internal event produces an error.
        """
        program = self.getBuildArtifact("a.out")
        source = "main.c"
        self.build_and_launch(program)

        breakpoint_line = line_number(source, "// breakpoint")

        self.set_source_breakpoints(source, [breakpoint_line])
        self.continue_to_next_stop()

        resp = self.dap_server.request_evaluate(
            "`lldb-dap send-event stopped", context="repl"
        )
        self.assertRegex(
            resp["body"]["result"],
            r"Invalid use of lldb-dap send-event, event \"stopped\" should be handled by lldb-dap internally.",
        )