199451b44SJordan Rupprecht"""Test that SBFrame::FindValue finds things but does not duplicate the entire variables list"""
299451b44SJordan Rupprecht
399451b44SJordan Rupprecht
499451b44SJordan Rupprecht
599451b44SJordan Rupprechtimport lldb
699451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
799451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
899451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
999451b44SJordan Rupprecht
1099451b44SJordan Rupprecht
1199451b44SJordan Rupprechtclass SBFrameFindValueTestCase(TestBase):
1299451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
1399451b44SJordan Rupprecht
1499451b44SJordan Rupprecht    def test_formatters_api(self):
1599451b44SJordan Rupprecht        """Test that SBFrame::FindValue finds things but does not duplicate the entire variables list"""
1699451b44SJordan Rupprecht        self.build()
1799451b44SJordan Rupprecht        self.setTearDownCleanup()
1899451b44SJordan Rupprecht
1999451b44SJordan Rupprecht        exe = self.getBuildArtifact("a.out")
2099451b44SJordan Rupprecht
2199451b44SJordan Rupprecht        # Create the target
2299451b44SJordan Rupprecht        target = self.dbg.CreateTarget(exe)
2399451b44SJordan Rupprecht        self.assertTrue(target, VALID_TARGET)
2499451b44SJordan Rupprecht
2599451b44SJordan Rupprecht        # Set the breakpoints
2699451b44SJordan Rupprecht        breakpoint = target.BreakpointCreateBySourceRegex(
2799451b44SJordan Rupprecht            'Set breakpoint here', lldb.SBFileSpec("main.cpp"))
2899451b44SJordan Rupprecht        self.assertTrue(breakpoint.GetNumLocations() > 0, VALID_BREAKPOINT)
2999451b44SJordan Rupprecht
3099451b44SJordan Rupprecht        # Launch the process, and do not stop at the entry point.
3199451b44SJordan Rupprecht        process = target.LaunchSimple(
3299451b44SJordan Rupprecht            None, None, self.get_process_working_directory())
3399451b44SJordan Rupprecht
3499451b44SJordan Rupprecht        self.assertTrue(process, PROCESS_IS_VALID)
3599451b44SJordan Rupprecht
3699451b44SJordan Rupprecht        # Frame #0 should be at our breakpoint.
3799451b44SJordan Rupprecht        threads = lldbutil.get_threads_stopped_at_breakpoint(
3899451b44SJordan Rupprecht            process, breakpoint)
3999451b44SJordan Rupprecht
40*b3a0c4d7SRaphael Isemann        self.assertEquals(len(threads), 1)
4199451b44SJordan Rupprecht        self.thread = threads[0]
4299451b44SJordan Rupprecht        self.frame = self.thread.frames[0]
4399451b44SJordan Rupprecht        self.assertTrue(self.frame, "Frame 0 is valid.")
4499451b44SJordan Rupprecht
4599451b44SJordan Rupprecht        self.assertTrue(
4699451b44SJordan Rupprecht            self.frame.GetVariables(
4799451b44SJordan Rupprecht                True,
4899451b44SJordan Rupprecht                True,
4999451b44SJordan Rupprecht                False,
5099451b44SJordan Rupprecht                True).GetSize() == 2,
5199451b44SJordan Rupprecht            "variable count is off")
5299451b44SJordan Rupprecht        self.assertFalse(
5399451b44SJordan Rupprecht            self.frame.FindValue(
5499451b44SJordan Rupprecht                "NoSuchThing",
5599451b44SJordan Rupprecht                lldb.eValueTypeVariableArgument,
5699451b44SJordan Rupprecht                lldb.eDynamicCanRunTarget).IsValid(),
5799451b44SJordan Rupprecht            "found something that should not be here")
5899451b44SJordan Rupprecht        self.assertTrue(
5999451b44SJordan Rupprecht            self.frame.GetVariables(
6099451b44SJordan Rupprecht                True,
6199451b44SJordan Rupprecht                True,
6299451b44SJordan Rupprecht                False,
6399451b44SJordan Rupprecht                True).GetSize() == 2,
6499451b44SJordan Rupprecht            "variable count is off after failed FindValue()")
6599451b44SJordan Rupprecht        self.assertTrue(
6699451b44SJordan Rupprecht            self.frame.FindValue(
6799451b44SJordan Rupprecht                "a",
6899451b44SJordan Rupprecht                lldb.eValueTypeVariableArgument,
6999451b44SJordan Rupprecht                lldb.eDynamicCanRunTarget).IsValid(),
7099451b44SJordan Rupprecht            "FindValue() didn't find an argument")
7199451b44SJordan Rupprecht        self.assertTrue(
7299451b44SJordan Rupprecht            self.frame.GetVariables(
7399451b44SJordan Rupprecht                True,
7499451b44SJordan Rupprecht                True,
7599451b44SJordan Rupprecht                False,
7699451b44SJordan Rupprecht                True).GetSize() == 2,
7799451b44SJordan Rupprecht            "variable count is off after successful FindValue()")
78