"""
Test lldb-dap stack trace when module is missing
"""

import re

from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import line_number
from lldbsuite.test.tools.lldb_dap.types import LaunchArgs, StoppedReason
from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase


class TestDAP_stackTraceMissingModule(DAPTestCaseBase):
    @skipUnlessPlatform(["linux"])
    def test_missingModule(self):
        """Test that the stack frame without a module still has assembly source."""
        program = self.getBuildArtifact("a.out")
        session = self.build_and_create_session()

        with session.configure(LaunchArgs(program, commandEscapePrefix="")) as ctx:
            source = "main.c"
            session.set_source_breakpoints(
                source, [line_number(source, "// Break here")]
            )
        stop_event = session.verify_stopped_on_breakpoint(after=ctx.process_event)

        # Evaluate expr -- func.
        expr_result = session.evaluate("expr -f pointer -- func", context="repl")
        expr_result_address = re.search(r"0x[0-9a-fA-F]+", expr_result.result)

        expr_address = self.expect_not_none(
            expr_result_address, "Failed to get address of dynamic allocated func"
        )
        func_address = expr_address.group(0)

        session.evaluate(f"breakpoint set --address {func_address}", context="repl")
        session.continue_to_next_stop(exp_reason=StoppedReason.BREAKPOINT)

        frame_without_module = session.top_frame_from(stop_event).frame

        self.assertIsNotNone(frame_without_module.line, "Line number missing.")
        self.assertIsNotNone(frame_without_module.column, "Column number missing.")
        frame_source = self.expect_not_none(
            frame_without_module.source, "Source location missing."
        )
        self.assertIsNotNone(frame_source.sourceReference, "Source reference missing.")

        session.continue_to_exit()
