1""" 2Test top-level expressions. 3""" 4 5 6 7import unittest2 8 9import lldb 10from lldbsuite.test.decorators import * 11from lldbsuite.test.lldbtest import * 12from lldbsuite.test import lldbutil 13 14 15class TopLevelExpressionsTestCase(TestBase): 16 17 mydir = TestBase.compute_mydir(__file__) 18 19 def setUp(self): 20 # Call super's setUp(). 21 TestBase.setUp(self) 22 # Find the line number to break for main.c. 23 self.line = line_number('main.cpp', 24 '// Set breakpoint here') 25 self.dummy_line = line_number('dummy.cpp', 26 '// Set breakpoint here') 27 28 # Disable confirmation prompt to avoid infinite wait 29 self.runCmd("settings set auto-confirm true") 30 self.addTearDownHook( 31 lambda: self.runCmd("settings clear auto-confirm")) 32 33 def build_and_run(self): 34 """Test top-level expressions.""" 35 self.build() 36 37 self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET) 38 39 lldbutil.run_break_set_by_file_and_line( 40 self, "main.cpp", self.line, num_expected_locations=1, loc_exact=False) 41 42 self.runCmd("run", RUN_SUCCEEDED) 43 44 def run_dummy(self): 45 self.runCmd("file " + self.getBuildArtifact("dummy"), 46 CURRENT_EXECUTABLE_SET) 47 48 lldbutil.run_break_set_by_file_and_line( 49 self, 50 "dummy.cpp", 51 self.dummy_line, 52 num_expected_locations=1, 53 loc_exact=False) 54 55 self.runCmd("run", RUN_SUCCEEDED) 56 57 @add_test_categories(['pyapi']) 58 @skipIf(debug_info="gmodules") # not relevant 59 @skipIf(oslist=["windows"]) # Error in record layout on Windows 60 def test_top_level_expressions(self): 61 self.build_and_run() 62 63 resultFromCode = self.frame().EvaluateExpression("doTest()").GetValueAsUnsigned() 64 65 self.runCmd("kill") 66 67 self.run_dummy() 68 69 codeFile = open('test.cpp', 'r') 70 71 expressions = [] 72 current_expression = "" 73 74 for line in codeFile: 75 if line.startswith("// --"): 76 expressions.append(current_expression) 77 current_expression = "" 78 else: 79 current_expression += line 80 81 options = lldb.SBExpressionOptions() 82 options.SetLanguage(lldb.eLanguageTypeC_plus_plus) 83 options.SetTopLevel(True) 84 85 for expression in expressions: 86 self.frame().EvaluateExpression(expression, options) 87 88 resultFromTopLevel = self.frame().EvaluateExpression("doTest()") 89 90 self.assertTrue(resultFromTopLevel.IsValid()) 91 self.assertEqual( 92 resultFromCode, 93 resultFromTopLevel.GetValueAsUnsigned()) 94