1"""
2Tests that ObjC member variables are available where they should be.
3"""
4import lldb
5from lldbtest import *
6import lldbutil
7
8class ObjCSelfTestCase(TestBase):
9
10    mydir = os.path.join("lang", "objc", "self")
11
12    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
13    @dsym_test
14    def test_with_dsym_and_run_command(self):
15        """Test that the appropriate member variables are available when stopped in Objective-C class and instance methods"""
16        self.buildDsym()
17        self.self_commands()
18
19    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
20    @dwarf_test
21    def test_with_dwarf_and_run_command(self):
22        """Test that the appropriate member variables are available when stopped in Objective-C class and instance methods"""
23        self.buildDwarf()
24        self.self_commands()
25
26    def setUp(self):
27        TestBase.setUp(self)
28
29    def set_breakpoint(self, line):
30        lldbutil.run_break_set_by_file_and_line (self, "main.m", line, num_expected_locations=1, loc_exact=True)
31
32    def self_commands(self):
33        """Test that the appropriate member variables are available when stopped in Objective-C class and instance methods"""
34        self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
35
36        self.set_breakpoint(line_number('main.m', '// breakpoint 1'))
37        self.set_breakpoint(line_number('main.m', '// breakpoint 2'))
38
39        self.runCmd("process launch", RUN_SUCCEEDED)
40
41        self.expect("expression -- m_a = 2",
42                    startstr = "(int) $0 = 2")
43
44        self.runCmd("process continue")
45
46        # This would be disallowed if we enforced const.  But we don't.
47        self.expect("expression -- m_a = 2",
48                    error=True)
49
50        self.expect("expression -- s_a",
51                    startstr = "(int) $1 = 5")
52
53if __name__ == '__main__':
54    import atexit
55    lldb.SBDebugger.Initialize()
56    atexit.register(lambda: lldb.SBDebugger.Terminate())
57    unittest2.main()
58