""" Tests target.expr-error-limit. """ import lldb from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil class TestCase(TestBase): mydir = TestBase.compute_mydir(__file__) @no_debug_info_test def test(self): # FIXME: The only reason this test needs to create a real target is because # the settings of the dummy target can't be changed with `settings set`. self.build() target = self.dbg.CreateTarget(self.getBuildArtifact("a.out")) # Our test expression that is just several lines of malformed # integer literals (with a 'yerror' integer suffix). Every error # has its own unique string (1, 2, 3, 4) and is on its own line # that we can later find it when Clang prints the respective source # code for each error to the error output. # For example, in the error output below we would look for the # unique `1yerror` string: # error: :1:2: invalid suffix 'yerror' on integer constant # 1yerror # ^ expr = "1yerror;\n2yerror;\n3yerror;\n4yerror;" options = lldb.SBExpressionOptions() options.SetAutoApplyFixIts(False) # Evaluate the expression and check that only the first 2 errors are # emitted. self.runCmd("settings set target.expr-error-limit 2") eval_result = target.EvaluateExpression(expr, options) self.assertIn("1yerror", str(eval_result.GetError())) self.assertIn("2yerror", str(eval_result.GetError())) self.assertNotIn("3yerror", str(eval_result.GetError())) self.assertNotIn("4yerror", str(eval_result.GetError())) # Change to a 3 errors and check again which errors are emitted. self.runCmd("settings set target.expr-error-limit 3") eval_result = target.EvaluateExpression(expr, options) self.assertIn("1yerror", str(eval_result.GetError())) self.assertIn("2yerror", str(eval_result.GetError())) self.assertIn("3yerror", str(eval_result.GetError())) self.assertNotIn("4yerror", str(eval_result.GetError())) # Disable the error limit and make sure all errors are emitted. self.runCmd("settings set target.expr-error-limit 0") eval_result = target.EvaluateExpression(expr, options) self.assertIn("1yerror", str(eval_result.GetError())) self.assertIn("2yerror", str(eval_result.GetError())) self.assertIn("3yerror", str(eval_result.GetError())) self.assertIn("4yerror", str(eval_result.GetError()))