199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest that objective-c constant strings are generated correctly by the expression 399451b44SJordan Rupprechtparser. 499451b44SJordan Rupprecht""" 599451b44SJordan Rupprecht 699451b44SJordan Rupprecht 799451b44SJordan Rupprechtimport lldb 899451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 999451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 1099451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprecht 1399451b44SJordan Rupprechtclass ConstStringTestCase(TestBase): 14*2238dcc3SJonas Devlieghere d = {"OBJC_SOURCES": "const-strings.m"} 1599451b44SJordan Rupprecht 1699451b44SJordan Rupprecht def setUp(self): 1799451b44SJordan Rupprecht # Call super's setUp(). 1899451b44SJordan Rupprecht TestBase.setUp(self) 1999451b44SJordan Rupprecht # Find the line number to break inside main(). 2099451b44SJordan Rupprecht self.main_source = "const-strings.m" 21*2238dcc3SJonas Devlieghere self.line = line_number(self.main_source, "// Set breakpoint here.") 2299451b44SJordan Rupprecht 2399451b44SJordan Rupprecht def test_break(self): 2499451b44SJordan Rupprecht """Test constant string generation amd comparison by the expression parser.""" 2599451b44SJordan Rupprecht self.build(dictionary=self.d) 2699451b44SJordan Rupprecht self.setTearDownCleanup(self.d) 2799451b44SJordan Rupprecht 2899451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 2999451b44SJordan Rupprecht self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) 3099451b44SJordan Rupprecht 3199451b44SJordan Rupprecht lldbutil.run_break_set_by_file_and_line( 32*2238dcc3SJonas Devlieghere self, self.main_source, self.line, num_expected_locations=1, loc_exact=True 33*2238dcc3SJonas Devlieghere ) 3499451b44SJordan Rupprecht 3599451b44SJordan Rupprecht self.runCmd("run", RUN_SUCCEEDED) 36*2238dcc3SJonas Devlieghere self.expect( 37*2238dcc3SJonas Devlieghere "process status", 38*2238dcc3SJonas Devlieghere STOPPED_DUE_TO_BREAKPOINT, 39*2238dcc3SJonas Devlieghere substrs=[ 40*2238dcc3SJonas Devlieghere "stop reason = breakpoint", 41*2238dcc3SJonas Devlieghere " at %s:%d" % (self.main_source, self.line), 42*2238dcc3SJonas Devlieghere ], 43*2238dcc3SJonas Devlieghere ) 4499451b44SJordan Rupprecht 45*2238dcc3SJonas Devlieghere self.expect('expression (int)[str compare:@"hello"]', startstr="(int) $0 = 0") 46*2238dcc3SJonas Devlieghere self.expect('expression (int)[str compare:@"world"]', startstr="(int) $1 = -1") 4799451b44SJordan Rupprecht 4899451b44SJordan Rupprecht # Test empty strings, too. 49*2238dcc3SJonas Devlieghere self.expect('expression (int)[@"" length]', startstr="(int) $2 = 0") 5099451b44SJordan Rupprecht 51*2238dcc3SJonas Devlieghere self.expect('expression (int)[@"123" length]', startstr="(int) $3 = 3") 52