Home | History | Annotate | Download | only in foundation
      1 """
      2 Test that objective-c constant strings are generated correctly by the expression
      3 parser.
      4 """
      5 
      6 import os, time
      7 import unittest2
      8 import lldb
      9 from lldbtest import *
     10 import lldbutil
     11 
     12 @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
     13 class ConstStringTestCase(TestBase):
     14 
     15     mydir = os.path.join("lang", "objc", "foundation")
     16     d = {'OBJC_SOURCES': 'const-strings.m'}
     17 
     18     @dsym_test
     19     def test_break_with_dsym(self):
     20         """Test constant string generation amd comparison by the expression parser."""
     21         self.buildDsym(dictionary=self.d)
     22         self.setTearDownCleanup(self.d)
     23         self.objc_const_strings()
     24 
     25     @dwarf_test
     26     def test_break_with_dwarf(self):
     27         """Test constant string generation amd comparison by the expression parser."""
     28         self.buildDwarf(dictionary=self.d)
     29         self.setTearDownCleanup(self.d)
     30         self.objc_const_strings()
     31 
     32     def setUp(self):
     33         # Call super's setUp().
     34         TestBase.setUp(self)
     35         # Find the line number to break inside main().
     36         self.main_source = "const-strings.m"
     37         self.line = line_number(self.main_source, '// Set breakpoint here.')
     38 
     39     def objc_const_strings(self):
     40         """Test constant string generation amd comparison by the expression parser."""
     41         exe = os.path.join(os.getcwd(), "a.out")
     42         self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
     43 
     44         lldbutil.run_break_set_by_file_and_line (self, self.main_source, self.line, num_expected_locations=1, loc_exact=True)
     45 
     46         self.runCmd("run", RUN_SUCCEEDED)
     47         self.expect("process status", STOPPED_DUE_TO_BREAKPOINT,
     48             substrs = [" at %s:%d" % (self.main_source, self.line),
     49                        "stop reason = breakpoint"])
     50 
     51         self.expect('expression (int)[str compare:@"hello"]',
     52             startstr = "(int) $0 = 0")
     53         self.expect('expression (int)[str compare:@"world"]',
     54             startstr = "(int) $1 = -1")
     55 
     56         # Test empty strings, too.
     57         self.expect('expression (int)[@"" length]',
     58             startstr = "(int) $2 = 0")
     59 
     60         self.expect('expression (int)[@"123" length]',
     61             startstr = "(int) $3 = 3")
     62 
     63         
     64 if __name__ == '__main__':
     65     import atexit
     66     lldb.SBDebugger.Initialize()
     67     atexit.register(lambda: lldb.SBDebugger.Terminate())
     68     unittest2.main()
     69