"""
Tests that C++ member and static variables are available where they should be.
"""

import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil


class CPPThisTestCase(TestBase):
    # rdar://problem/9962849
    @expectedFailureAll(
        compiler="gcc",
        bugnumber="llvm.org/pr15439 The 'this' pointer isn't available during expression evaluation when stopped in an inlined member function",
    )
    @expectedFailureAll(
        compiler="icc",
        bugnumber="ICC doesn't emit correct DWARF inline debug info for inlined member functions.",
    )
    @expectedFailureAll(
        oslist=["windows"],
        bugnumber="llvm.org/pr24489: Name lookup not working correctly on Windows",
    )
    def test_with_run_command(self):
        """Test that the appropriate member variables are available when stopped in C++ static, inline, and const methods"""
        self.build()
        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)

        self.set_breakpoint(line_number("main.cpp", "// breakpoint 1"))
        self.set_breakpoint(line_number("main.cpp", "// breakpoint 2"))
        self.set_breakpoint(line_number("main.cpp", "// breakpoint 3"))
        self.set_breakpoint(line_number("main.cpp", "// breakpoint 4"))

        self.runCmd("process launch", RUN_SUCCEEDED)

        self.expect("expression -- m_a = 2", startstr="(int) $0 = 2")

        self.runCmd("process continue")

        self.expect(
            "expression -- m_a = 2",
            error=True,
            substrs=[
                "cannot assign to non-static data member within const member function",
                "Possibly trying to mutate object in a const context. Try running the expression with: expression --c++-ignore-context-qualifiers -- m_a = 2",
            ],
        )

        self.expect("expression -- (int)getpid(); m_a", startstr="(const int) $1 = 3")
        self.expect(
            "expression --c++-ignore-context-qualifiers -- m_a = 2",
            startstr="(int) $2 = 2",
        )

        self.runCmd("process continue")

        self.expect("expression -- s_a", startstr="(int) $3 = 5")

        self.runCmd("process continue")

        self.expect("expression -- m_a", startstr="(int) $4 = 2")

    def set_breakpoint(self, line):
        lldbutil.run_break_set_by_file_and_line(
            self, "main.cpp", line, num_expected_locations=1, loc_exact=False
        )
