134885bffSWalter Erquinigo""" 234885bffSWalter ErquinigoTest lldb-vscode completions request 334885bffSWalter Erquinigo""" 434885bffSWalter Erquinigo 534885bffSWalter Erquinigo 634885bffSWalter Erquinigoimport lldbvscode_testcase 734885bffSWalter Erquinigoimport unittest2 834885bffSWalter Erquinigoimport vscode 934885bffSWalter Erquinigofrom lldbsuite.test import lldbutil 1034885bffSWalter Erquinigofrom lldbsuite.test.decorators import * 1134885bffSWalter Erquinigofrom lldbsuite.test.lldbtest import * 1234885bffSWalter Erquinigo 1334885bffSWalter Erquinigoclass TestVSCode_variables(lldbvscode_testcase.VSCodeTestCaseBase): 1434885bffSWalter Erquinigo 1534885bffSWalter Erquinigo def assertEvaluate(self, expression, regex): 1634885bffSWalter Erquinigo self.assertRegexpMatches( 1734885bffSWalter Erquinigo self.vscode.request_evaluate(expression, context=self.context)['body']['result'], 1834885bffSWalter Erquinigo regex) 1934885bffSWalter Erquinigo 2034885bffSWalter Erquinigo def assertEvaluateFailure(self, expression): 2134885bffSWalter Erquinigo self.assertNotIn('result', 2234885bffSWalter Erquinigo self.vscode.request_evaluate(expression, context=self.context)['body']) 2334885bffSWalter Erquinigo 2434885bffSWalter Erquinigo def isExpressionParsedExpected(self): 2534885bffSWalter Erquinigo return self.context != "hover" 2634885bffSWalter Erquinigo 2734885bffSWalter Erquinigo def run_test_evaluate_expressions(self, context=None): 2834885bffSWalter Erquinigo """ 2934885bffSWalter Erquinigo Tests the evaluate expression request at different breakpoints 3034885bffSWalter Erquinigo """ 3134885bffSWalter Erquinigo self.context = context 3234885bffSWalter Erquinigo program = self.getBuildArtifact("a.out") 3334885bffSWalter Erquinigo self.build_and_launch(program) 3434885bffSWalter Erquinigo source = "main.cpp" 3534885bffSWalter Erquinigo self.set_source_breakpoints( 3634885bffSWalter Erquinigo source, 3734885bffSWalter Erquinigo [ 3834885bffSWalter Erquinigo line_number(source, "// breakpoint 1"), 3934885bffSWalter Erquinigo line_number(source, "// breakpoint 2"), 40*0283abeeSWalter Erquinigo line_number(source, "// breakpoint 3"), 41*0283abeeSWalter Erquinigo line_number(source, "// breakpoint 4"), 42*0283abeeSWalter Erquinigo line_number(source, "// breakpoint 5"), 43*0283abeeSWalter Erquinigo line_number(source, "// breakpoint 6"), 44*0283abeeSWalter Erquinigo line_number(source, "// breakpoint 7"), 4534885bffSWalter Erquinigo ] 4634885bffSWalter Erquinigo ) 4734885bffSWalter Erquinigo self.continue_to_next_stop() 4834885bffSWalter Erquinigo 4934885bffSWalter Erquinigo # Expressions at breakpoint 1, which is in main 5034885bffSWalter Erquinigo self.assertEvaluate("var1", "20") 5134885bffSWalter Erquinigo self.assertEvaluate("var2", "21") 5234885bffSWalter Erquinigo self.assertEvaluate("static_int", "42") 5334885bffSWalter Erquinigo self.assertEvaluate("non_static_int", "43") 5434885bffSWalter Erquinigo self.assertEvaluate("struct1", "my_struct @ 0x.*") 5534885bffSWalter Erquinigo self.assertEvaluate("struct1.foo", "15") 5634885bffSWalter Erquinigo self.assertEvaluate("struct2->foo", "16") 5734885bffSWalter Erquinigo 5834885bffSWalter Erquinigo self.assertEvaluateFailure("var") # local variable of a_function 5934885bffSWalter Erquinigo self.assertEvaluateFailure("my_struct") # type name 6034885bffSWalter Erquinigo self.assertEvaluateFailure("int") # type name 6134885bffSWalter Erquinigo self.assertEvaluateFailure("foo") # member of my_struct 6234885bffSWalter Erquinigo 6334885bffSWalter Erquinigo if self.isExpressionParsedExpected(): 6434885bffSWalter Erquinigo self.assertEvaluate( 6534885bffSWalter Erquinigo "a_function", 66b5657d1fSWalter Erquinigo "0x.*a.out`a_function.*") 6734885bffSWalter Erquinigo self.assertEvaluate("a_function(1)", "1") 6834885bffSWalter Erquinigo self.assertEvaluate("var2 + struct1.foo", "36") 6934885bffSWalter Erquinigo self.assertEvaluate( 7034885bffSWalter Erquinigo "foo_func", 71b5657d1fSWalter Erquinigo "0x.*a.out`foo_func.*") 7234885bffSWalter Erquinigo self.assertEvaluate("foo_var", "44") 7334885bffSWalter Erquinigo else: 7434885bffSWalter Erquinigo self.assertEvaluateFailure("a_function") 7534885bffSWalter Erquinigo self.assertEvaluateFailure("a_function(1)") 7634885bffSWalter Erquinigo self.assertEvaluateFailure("var2 + struct1.foo") 7734885bffSWalter Erquinigo self.assertEvaluateFailure("foo_func") 7834885bffSWalter Erquinigo self.assertEvaluateFailure("foo_var") 7934885bffSWalter Erquinigo 8034885bffSWalter Erquinigo # Expressions at breakpoint 2, which is an anonymous block 8134885bffSWalter Erquinigo self.continue_to_next_stop() 8234885bffSWalter Erquinigo self.assertEvaluate("var1", "20") 8334885bffSWalter Erquinigo self.assertEvaluate("var2", "2") # different variable with the same name 8434885bffSWalter Erquinigo self.assertEvaluate("static_int", "42") 8534885bffSWalter Erquinigo self.assertEvaluate("non_static_int", "10") # different variable with the same name 8634885bffSWalter Erquinigo self.assertEvaluate("struct1", "my_struct @ 0x.*") 8734885bffSWalter Erquinigo self.assertEvaluate("struct1.foo", "15") 8834885bffSWalter Erquinigo self.assertEvaluate("struct2->foo", "16") 8934885bffSWalter Erquinigo 9034885bffSWalter Erquinigo if self.isExpressionParsedExpected(): 9134885bffSWalter Erquinigo self.assertEvaluate( 9234885bffSWalter Erquinigo "a_function", 93b5657d1fSWalter Erquinigo "0x.*a.out`a_function.*") 9434885bffSWalter Erquinigo self.assertEvaluate("a_function(1)", "1") 9534885bffSWalter Erquinigo self.assertEvaluate("var2 + struct1.foo", "17") 9634885bffSWalter Erquinigo self.assertEvaluate( 9734885bffSWalter Erquinigo "foo_func", 98b5657d1fSWalter Erquinigo "0x.*a.out`foo_func.*") 9934885bffSWalter Erquinigo self.assertEvaluate("foo_var", "44") 10034885bffSWalter Erquinigo else: 10134885bffSWalter Erquinigo self.assertEvaluateFailure("a_function") 10234885bffSWalter Erquinigo self.assertEvaluateFailure("a_function(1)") 10334885bffSWalter Erquinigo self.assertEvaluateFailure("var2 + struct1.foo") 10434885bffSWalter Erquinigo self.assertEvaluateFailure("foo_func") 10534885bffSWalter Erquinigo self.assertEvaluateFailure("foo_var") 10634885bffSWalter Erquinigo 10734885bffSWalter Erquinigo # Expressions at breakpoint 3, which is inside a_function 10834885bffSWalter Erquinigo self.continue_to_next_stop() 10934885bffSWalter Erquinigo self.assertEvaluate("var", "42") 11034885bffSWalter Erquinigo self.assertEvaluate("static_int", "42") 11134885bffSWalter Erquinigo self.assertEvaluate("non_static_int", "43") 11234885bffSWalter Erquinigo 11334885bffSWalter Erquinigo self.assertEvaluateFailure("var1") 11434885bffSWalter Erquinigo self.assertEvaluateFailure("var2") 11534885bffSWalter Erquinigo self.assertEvaluateFailure("struct1") 11634885bffSWalter Erquinigo self.assertEvaluateFailure("struct1.foo") 11734885bffSWalter Erquinigo self.assertEvaluateFailure("struct2->foo") 11834885bffSWalter Erquinigo self.assertEvaluateFailure("var2 + struct1.foo") 11934885bffSWalter Erquinigo 12034885bffSWalter Erquinigo if self.isExpressionParsedExpected(): 12134885bffSWalter Erquinigo self.assertEvaluate( 12234885bffSWalter Erquinigo "a_function", 123b5657d1fSWalter Erquinigo "0x.*a.out`a_function.*") 12434885bffSWalter Erquinigo self.assertEvaluate("a_function(1)", "1") 12534885bffSWalter Erquinigo self.assertEvaluate("var + 1", "43") 12634885bffSWalter Erquinigo self.assertEvaluate( 12734885bffSWalter Erquinigo "foo_func", 128b5657d1fSWalter Erquinigo "0x.*a.out`foo_func.*") 12934885bffSWalter Erquinigo self.assertEvaluate("foo_var", "44") 13034885bffSWalter Erquinigo else: 13134885bffSWalter Erquinigo self.assertEvaluateFailure("a_function") 13234885bffSWalter Erquinigo self.assertEvaluateFailure("a_function(1)") 13334885bffSWalter Erquinigo self.assertEvaluateFailure("var + 1") 13434885bffSWalter Erquinigo self.assertEvaluateFailure("foo_func") 13534885bffSWalter Erquinigo self.assertEvaluateFailure("foo_var") 13634885bffSWalter Erquinigo 137*0283abeeSWalter Erquinigo # Now we check that values are updated after stepping 138*0283abeeSWalter Erquinigo self.continue_to_next_stop() 139*0283abeeSWalter Erquinigo self.assertEvaluate("my_vec", "size=2") 140*0283abeeSWalter Erquinigo self.continue_to_next_stop() 141*0283abeeSWalter Erquinigo self.assertEvaluate("my_vec", "size=3") 142*0283abeeSWalter Erquinigo 143*0283abeeSWalter Erquinigo self.assertEvaluate("my_map", "size=2") 144*0283abeeSWalter Erquinigo self.continue_to_next_stop() 145*0283abeeSWalter Erquinigo self.assertEvaluate("my_map", "size=3") 146*0283abeeSWalter Erquinigo 147*0283abeeSWalter Erquinigo self.assertEvaluate("my_bool_vec", "size=1") 148*0283abeeSWalter Erquinigo self.continue_to_next_stop() 149*0283abeeSWalter Erquinigo self.assertEvaluate("my_bool_vec", "size=2") 150*0283abeeSWalter Erquinigo 15134885bffSWalter Erquinigo @skipIfWindows 15234885bffSWalter Erquinigo @skipIfRemote 15334885bffSWalter Erquinigo def test_generic_evaluate_expressions(self): 15434885bffSWalter Erquinigo # Tests context-less expression evaluations 15534885bffSWalter Erquinigo self.run_test_evaluate_expressions() 15634885bffSWalter Erquinigo 15734885bffSWalter Erquinigo @skipIfWindows 15834885bffSWalter Erquinigo @skipIfRemote 15934885bffSWalter Erquinigo def test_repl_evaluate_expressions(self): 16034885bffSWalter Erquinigo # Tests expression evaluations that are triggered from the Debug Console 16134885bffSWalter Erquinigo self.run_test_evaluate_expressions("repl") 16234885bffSWalter Erquinigo 16334885bffSWalter Erquinigo @skipIfWindows 16434885bffSWalter Erquinigo @skipIfRemote 16534885bffSWalter Erquinigo def test_watch_evaluate_expressions(self): 16634885bffSWalter Erquinigo # Tests expression evaluations that are triggered from a watch expression 16734885bffSWalter Erquinigo self.run_test_evaluate_expressions("watch") 16834885bffSWalter Erquinigo 16934885bffSWalter Erquinigo @skipIfWindows 17034885bffSWalter Erquinigo @skipIfRemote 17134885bffSWalter Erquinigo def test_hover_evaluate_expressions(self): 17234885bffSWalter Erquinigo # Tests expression evaluations that are triggered when hovering on the editor 17334885bffSWalter Erquinigo self.run_test_evaluate_expressions("hover") 174