1""" 2Tests target.expr-error-limit. 3""" 4 5import lldb 6from lldbsuite.test.decorators import * 7from lldbsuite.test.lldbtest import * 8from lldbsuite.test import lldbutil 9 10 11class TestCase(TestBase): 12 @no_debug_info_test 13 def test(self): 14 # FIXME: The only reason this test needs to create a real target is because 15 # the settings of the dummy target can't be changed with `settings set`. 16 self.build() 17 target = self.createTestTarget() 18 19 # Our test expression that is just several lines of malformed 20 # integer literals (with a 'yerror' integer suffix). Every error 21 # has its own unique string (1, 2, 3, 4) and is on its own line 22 # that we can later find it when Clang prints the respective source 23 # code for each error to the error output. 24 # For example, in the error output below we would look for the 25 # unique `1yerror` string: 26 # error: <expr>:1:2: invalid suffix 'yerror' on integer constant 27 # 1yerror 28 # ^ 29 expr = "1yerror;\n2yerror;\n3yerror;\n4yerror;" 30 31 options = lldb.SBExpressionOptions() 32 options.SetAutoApplyFixIts(False) 33 34 # Evaluate the expression and check that only the first 2 errors are 35 # emitted. 36 self.runCmd("settings set target.expr-error-limit 2") 37 eval_result = target.EvaluateExpression(expr, options) 38 self.assertIn("1yerror", str(eval_result.GetError())) 39 self.assertIn("2yerror", str(eval_result.GetError())) 40 self.assertNotIn("3yerror", str(eval_result.GetError())) 41 self.assertNotIn("4yerror", str(eval_result.GetError())) 42 43 # Change to a 3 errors and check again which errors are emitted. 44 self.runCmd("settings set target.expr-error-limit 3") 45 eval_result = target.EvaluateExpression(expr, options) 46 self.assertIn("1yerror", str(eval_result.GetError())) 47 self.assertIn("2yerror", str(eval_result.GetError())) 48 self.assertIn("3yerror", str(eval_result.GetError())) 49 self.assertNotIn("4yerror", str(eval_result.GetError())) 50 51 # Disable the error limit and make sure all errors are emitted. 52 self.runCmd("settings set target.expr-error-limit 0") 53 eval_result = target.EvaluateExpression(expr, options) 54 self.assertIn("1yerror", str(eval_result.GetError())) 55 self.assertIn("2yerror", str(eval_result.GetError())) 56 self.assertIn("3yerror", str(eval_result.GetError())) 57 self.assertIn("4yerror", str(eval_result.GetError())) 58