199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest expression command options. 399451b44SJordan Rupprecht 499451b44SJordan RupprechtTest cases: 599451b44SJordan Rupprecht 699451b44SJordan Rupprechto test_expr_options: 799451b44SJordan Rupprecht Test expression command options. 899451b44SJordan Rupprecht""" 999451b44SJordan Rupprecht 1099451b44SJordan Rupprecht 1199451b44SJordan Rupprechtimport lldb 1299451b44SJordan Rupprechtimport lldbsuite.test.lldbutil as lldbutil 1399451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 1499451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 1599451b44SJordan Rupprecht 1699451b44SJordan Rupprecht 1799451b44SJordan Rupprechtclass ExprOptionsTestCase(TestBase): 1899451b44SJordan Rupprecht def setUp(self): 1999451b44SJordan Rupprecht # Call super's setUp(). 2099451b44SJordan Rupprecht TestBase.setUp(self) 2199451b44SJordan Rupprecht 2299451b44SJordan Rupprecht self.main_source = "main.cpp" 2399451b44SJordan Rupprecht self.main_source_spec = lldb.SBFileSpec(self.main_source) 24*2238dcc3SJonas Devlieghere self.line = line_number("main.cpp", "// breakpoint_in_main") 2599451b44SJordan Rupprecht self.exe = self.getBuildArtifact("a.out") 2699451b44SJordan Rupprecht 2799451b44SJordan Rupprecht def test_expr_options(self): 2899451b44SJordan Rupprecht """These expression command options should work as expected.""" 2999451b44SJordan Rupprecht self.build() 3099451b44SJordan Rupprecht 3199451b44SJordan Rupprecht # Set debugger into synchronous mode 3299451b44SJordan Rupprecht self.dbg.SetAsync(False) 3399451b44SJordan Rupprecht 3499451b44SJordan Rupprecht (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( 35*2238dcc3SJonas Devlieghere self, "// breakpoint_in_main", self.main_source_spec 36*2238dcc3SJonas Devlieghere ) 3799451b44SJordan Rupprecht 3899451b44SJordan Rupprecht frame = thread.GetFrameAtIndex(0) 3999451b44SJordan Rupprecht options = lldb.SBExpressionOptions() 4099451b44SJordan Rupprecht 4199451b44SJordan Rupprecht # test --language on C++ expression using the SB API's 4299451b44SJordan Rupprecht 4399451b44SJordan Rupprecht # Make sure we can evaluate a C++11 expression. 44*2238dcc3SJonas Devlieghere val = frame.EvaluateExpression("foo != nullptr") 4599451b44SJordan Rupprecht self.assertTrue(val.IsValid()) 4635674976SPavel Labath self.assertSuccess(val.GetError()) 4799451b44SJordan Rupprecht self.DebugSBValue(val) 4899451b44SJordan Rupprecht 4999451b44SJordan Rupprecht # Make sure it still works if language is set to C++11: 5099451b44SJordan Rupprecht options.SetLanguage(lldb.eLanguageTypeC_plus_plus_11) 51*2238dcc3SJonas Devlieghere val = frame.EvaluateExpression("foo != nullptr", options) 5299451b44SJordan Rupprecht self.assertTrue(val.IsValid()) 5335674976SPavel Labath self.assertSuccess(val.GetError()) 5499451b44SJordan Rupprecht self.DebugSBValue(val) 5599451b44SJordan Rupprecht 5699451b44SJordan Rupprecht # Make sure it fails if language is set to C: 5799451b44SJordan Rupprecht options.SetLanguage(lldb.eLanguageTypeC) 58*2238dcc3SJonas Devlieghere val = frame.EvaluateExpression("foo != nullptr", options) 5999451b44SJordan Rupprecht self.assertTrue(val.IsValid()) 6099451b44SJordan Rupprecht self.assertFalse(val.GetError().Success()) 6199451b44SJordan Rupprecht 6299451b44SJordan Rupprecht def test_expr_options_lang(self): 6399451b44SJordan Rupprecht """These expression language options should work as expected.""" 6499451b44SJordan Rupprecht self.build() 6599451b44SJordan Rupprecht 6699451b44SJordan Rupprecht # Set debugger into synchronous mode 6799451b44SJordan Rupprecht self.dbg.SetAsync(False) 6899451b44SJordan Rupprecht 6999451b44SJordan Rupprecht (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( 70*2238dcc3SJonas Devlieghere self, "// breakpoint_in_main", self.main_source_spec 71*2238dcc3SJonas Devlieghere ) 7299451b44SJordan Rupprecht 7399451b44SJordan Rupprecht frame = thread.GetFrameAtIndex(0) 7499451b44SJordan Rupprecht options = lldb.SBExpressionOptions() 7599451b44SJordan Rupprecht 7699451b44SJordan Rupprecht # Make sure we can retrieve `id` variable if language is set to C++11: 7799451b44SJordan Rupprecht options.SetLanguage(lldb.eLanguageTypeC_plus_plus_11) 78*2238dcc3SJonas Devlieghere val = frame.EvaluateExpression("id == 0", options) 7999451b44SJordan Rupprecht self.assertTrue(val.IsValid()) 8035674976SPavel Labath self.assertSuccess(val.GetError()) 8199451b44SJordan Rupprecht self.DebugSBValue(val) 8299451b44SJordan Rupprecht 8399451b44SJordan Rupprecht # Make sure we can't retrieve `id` variable if language is set to ObjC: 8499451b44SJordan Rupprecht options.SetLanguage(lldb.eLanguageTypeObjC) 85*2238dcc3SJonas Devlieghere val = frame.EvaluateExpression("id == 0", options) 8699451b44SJordan Rupprecht self.assertTrue(val.IsValid()) 8799451b44SJordan Rupprecht self.assertFalse(val.GetError().Success()) 88