102114e15SRaphael Isemann""" 202114e15SRaphael IsemannTests target.expr-error-limit. 302114e15SRaphael Isemann""" 402114e15SRaphael Isemann 502114e15SRaphael Isemannimport lldb 602114e15SRaphael Isemannfrom lldbsuite.test.decorators import * 702114e15SRaphael Isemannfrom lldbsuite.test.lldbtest import * 802114e15SRaphael Isemannfrom lldbsuite.test import lldbutil 902114e15SRaphael Isemann 1002114e15SRaphael Isemann 1102114e15SRaphael Isemannclass TestCase(TestBase): 1202114e15SRaphael Isemann 1302114e15SRaphael Isemann @no_debug_info_test 1402114e15SRaphael Isemann def test(self): 1502114e15SRaphael Isemann # FIXME: The only reason this test needs to create a real target is because 1602114e15SRaphael Isemann # the settings of the dummy target can't be changed with `settings set`. 1702114e15SRaphael Isemann self.build() 18*54c26872SRaphael Isemann target = self.createTestTarget() 1902114e15SRaphael Isemann 2002114e15SRaphael Isemann # Our test expression that is just several lines of malformed 2102114e15SRaphael Isemann # integer literals (with a 'yerror' integer suffix). Every error 2202114e15SRaphael Isemann # has its own unique string (1, 2, 3, 4) and is on its own line 2302114e15SRaphael Isemann # that we can later find it when Clang prints the respective source 2402114e15SRaphael Isemann # code for each error to the error output. 2502114e15SRaphael Isemann # For example, in the error output below we would look for the 2602114e15SRaphael Isemann # unique `1yerror` string: 2702114e15SRaphael Isemann # error: <expr>:1:2: invalid suffix 'yerror' on integer constant 2802114e15SRaphael Isemann # 1yerror 2902114e15SRaphael Isemann # ^ 3002114e15SRaphael Isemann expr = "1yerror;\n2yerror;\n3yerror;\n4yerror;" 3102114e15SRaphael Isemann 3202114e15SRaphael Isemann options = lldb.SBExpressionOptions() 3302114e15SRaphael Isemann options.SetAutoApplyFixIts(False) 3402114e15SRaphael Isemann 3502114e15SRaphael Isemann # Evaluate the expression and check that only the first 2 errors are 3602114e15SRaphael Isemann # emitted. 3702114e15SRaphael Isemann self.runCmd("settings set target.expr-error-limit 2") 3802114e15SRaphael Isemann eval_result = target.EvaluateExpression(expr, options) 3902114e15SRaphael Isemann self.assertIn("1yerror", str(eval_result.GetError())) 4002114e15SRaphael Isemann self.assertIn("2yerror", str(eval_result.GetError())) 4102114e15SRaphael Isemann self.assertNotIn("3yerror", str(eval_result.GetError())) 4202114e15SRaphael Isemann self.assertNotIn("4yerror", str(eval_result.GetError())) 4302114e15SRaphael Isemann 4402114e15SRaphael Isemann # Change to a 3 errors and check again which errors are emitted. 4502114e15SRaphael Isemann self.runCmd("settings set target.expr-error-limit 3") 4602114e15SRaphael Isemann eval_result = target.EvaluateExpression(expr, options) 4702114e15SRaphael Isemann self.assertIn("1yerror", str(eval_result.GetError())) 4802114e15SRaphael Isemann self.assertIn("2yerror", str(eval_result.GetError())) 4902114e15SRaphael Isemann self.assertIn("3yerror", str(eval_result.GetError())) 5002114e15SRaphael Isemann self.assertNotIn("4yerror", str(eval_result.GetError())) 5102114e15SRaphael Isemann 5202114e15SRaphael Isemann # Disable the error limit and make sure all errors are emitted. 5302114e15SRaphael Isemann self.runCmd("settings set target.expr-error-limit 0") 5402114e15SRaphael Isemann eval_result = target.EvaluateExpression(expr, options) 5502114e15SRaphael Isemann self.assertIn("1yerror", str(eval_result.GetError())) 5602114e15SRaphael Isemann self.assertIn("2yerror", str(eval_result.GetError())) 5702114e15SRaphael Isemann self.assertIn("3yerror", str(eval_result.GetError())) 5802114e15SRaphael Isemann self.assertIn("4yerror", str(eval_result.GetError())) 59