Printing of types has changed slightly. Also improve the error messages the test gives when it fails.
189 lines
5.7 KiB
Python
189 lines
5.7 KiB
Python
"""
|
|
Test lldb-vscode completions request
|
|
"""
|
|
|
|
|
|
import lldbvscode_testcase
|
|
import unittest2
|
|
import vscode
|
|
from lldbsuite.test import lldbutil
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
|
|
|
|
class TestVSCode_variables(lldbvscode_testcase.VSCodeTestCaseBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
def verify_completions(self, actual_list, expected_list, not_expected_list=[]):
|
|
for expected_item in expected_list:
|
|
self.assertIn(expected_item, actual_list)
|
|
|
|
for not_expected_item in not_expected_list:
|
|
self.assertNotIn(not_expected_item, actual_list)
|
|
|
|
@skipIfWindows
|
|
@skipIfDarwin # Skip this test for now until we can figure out why tings aren't working on build bots
|
|
def test_completions(self):
|
|
"""
|
|
Tests the completion request at different breakpoints
|
|
"""
|
|
program = self.getBuildArtifact("a.out")
|
|
self.build_and_launch(program)
|
|
source = "main.cpp"
|
|
breakpoint1_line = line_number(source, "// breakpoint 1")
|
|
breakpoint2_line = line_number(source, "// breakpoint 2")
|
|
breakpoint_ids = self.set_source_breakpoints(
|
|
source, [breakpoint1_line, breakpoint2_line]
|
|
)
|
|
self.continue_to_next_stop()
|
|
|
|
# shouldn't see variables inside main
|
|
self.verify_completions(
|
|
self.vscode.get_completions("var"),
|
|
[
|
|
{
|
|
"text": "var",
|
|
"label": "var -- vector<basic_string<char, char_traits<char>, allocator<char>>, allocator<basic_string<char, char_traits<char>, allocator<char>>>> &",
|
|
}
|
|
],
|
|
[{"text": "var1", "label": "var1 -- int &"}],
|
|
)
|
|
|
|
# should see global keywords but not variables inside main
|
|
self.verify_completions(
|
|
self.vscode.get_completions("str"),
|
|
[{"text": "struct", "label": "struct"}],
|
|
[{"text": "str1", "label": "str1 -- std::string &"}],
|
|
)
|
|
|
|
self.continue_to_next_stop()
|
|
|
|
# should see variables from main but not from the other function
|
|
self.verify_completions(
|
|
self.vscode.get_completions("var"),
|
|
[
|
|
{"text": "var1", "label": "var1 -- int &"},
|
|
{"text": "var2", "label": "var2 -- int &"},
|
|
],
|
|
[
|
|
{
|
|
"text": "var",
|
|
"label": "var -- vector<basic_string<char, char_traits<char>, allocator<char> >, allocator<basic_string<char, char_traits<char>, allocator<char> > > > &",
|
|
}
|
|
],
|
|
)
|
|
|
|
self.verify_completions(
|
|
self.vscode.get_completions("str"),
|
|
[
|
|
{"text": "struct", "label": "struct"},
|
|
{"text": "str1", "label": "str1 -- string &"},
|
|
],
|
|
)
|
|
|
|
# should complete arbitrary commands including word starts
|
|
self.verify_completions(
|
|
self.vscode.get_completions("`log enable "),
|
|
[{"text": "gdb-remote", "label": "gdb-remote"}],
|
|
)
|
|
|
|
# should complete expressions with quotes inside
|
|
self.verify_completions(
|
|
self.vscode.get_completions('`expr " "; typed'),
|
|
[{"text": "typedef", "label": "typedef"}],
|
|
)
|
|
|
|
# should complete an incomplete quoted token
|
|
self.verify_completions(
|
|
self.vscode.get_completions('`setting "se'),
|
|
[
|
|
{
|
|
"text": "set",
|
|
"label": "set -- Set the value of the specified debugger setting.",
|
|
}
|
|
],
|
|
)
|
|
self.verify_completions(
|
|
self.vscode.get_completions("`'comm"),
|
|
[
|
|
{
|
|
"text": "command",
|
|
"label": "command -- Commands for managing custom LLDB commands.",
|
|
}
|
|
],
|
|
)
|
|
|
|
self.verify_completions(
|
|
self.vscode.get_completions("foo1.v"),
|
|
[
|
|
{
|
|
"text": "var1",
|
|
"label": "foo1.var1 -- int"
|
|
}
|
|
]
|
|
)
|
|
|
|
self.verify_completions(
|
|
self.vscode.get_completions("foo1.my_bar_object.v"),
|
|
[
|
|
{
|
|
"text": "var1",
|
|
"label": "foo1.my_bar_object.var1 -- int"
|
|
}
|
|
]
|
|
)
|
|
|
|
self.verify_completions(
|
|
self.vscode.get_completions("foo1.var1 + foo1.v"),
|
|
[
|
|
{
|
|
"text": "var1",
|
|
"label": "foo1.var1 -- int"
|
|
}
|
|
]
|
|
)
|
|
|
|
self.verify_completions(
|
|
self.vscode.get_completions("foo1.var1 + v"),
|
|
[
|
|
{
|
|
"text": "var1",
|
|
"label": "var1 -- int &"
|
|
}
|
|
]
|
|
)
|
|
|
|
#should correctly handle spaces between objects and member operators
|
|
self.verify_completions(
|
|
self.vscode.get_completions("foo1 .v"),
|
|
[
|
|
{
|
|
"text": "var1",
|
|
"label": ".var1 -- int"
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"text": "var2",
|
|
"label": ".var2 -- int"
|
|
}
|
|
]
|
|
)
|
|
|
|
self.verify_completions(
|
|
self.vscode.get_completions("foo1 . v"),
|
|
[
|
|
{
|
|
"text": "var1",
|
|
"label": "var1 -- int"
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"text": "var2",
|
|
"label": "var2 -- int"
|
|
}
|
|
]
|
|
)
|