"""
Test lldb-dap launch request.
"""

from lldbsuite.test.tools.lldb_dap.types import ExitedEvent, LaunchArgs, StoppedEvent
from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase


class TestDAP_launch_stopOnEntry(DAPTestCaseBase):
    """
    Tests the default launch of a simple program that stops at the
    entry point instead of continuing.
    """

    def test(self):
        program = self.getBuildArtifact("a.out")
        session = self.build_and_create_session()
        process_event = session.launch(LaunchArgs(program, stopOnEntry=True))
        stop_event = session.verify_stopped_on_entry(after=process_event)
        exit_event = session.continue_to_exit()

        seen_stop_events = []

        def matches_exit_event(evt):
            if isinstance(evt, StoppedEvent):
                seen_stop_events.append(evt)
            return evt.seq == exit_event.seq

        # Collect stopped events until the ExitEvent.
        session.wait_for_any_event(
            (StoppedEvent, ExitedEvent), after=stop_event, until=matches_exit_event
        )
        # Verify we did not receive any other stop event.
        self.assertEqual(
            len(seen_stop_events),
            0,
            f"expected no new stopped events. seen events: {seen_stop_events}",
        )
