1import tempfile
2import gdbremote_testcase
3from lldbsuite.test.lldbtest import *
4from lldbsuite.test.decorators import *
5from lldbgdbserverutils import *
6
7class GdbRemoteCompletionTestCase(gdbremote_testcase.GdbRemoteTestCaseBase):
8    mydir = TestBase.compute_mydir(__file__)
9
10    def init_lldb_server(self):
11        self.debug_monitor_exe = get_lldb_server_exe()
12        if not self.debug_monitor_exe:
13            self.skipTest("lldb-server exe not found")
14        port_file = tempfile.NamedTemporaryFile().name
15        commandline_args = [
16            "platform",
17            "--listen",
18            "*:0",
19            "--socket-file",
20            port_file
21        ]
22        server = self.spawnSubprocess(
23            get_lldb_server_exe(),
24            commandline_args,
25            install_remote=False)
26        self.assertIsNotNone(server)
27        self.stub_hostname = "localhost"
28        self.port = int(lldbutil.wait_for_file_on_target(self, port_file))
29        self.sock = self.create_socket()
30        self._server = Server(self.sock, server)
31
32        self.add_no_ack_remote_stream()
33
34    def generate_hex_path(self, target):
35        return str(os.path.join(self.getBuildDir(), target)).encode().hex()
36
37    @skipIfDarwinEmbedded # <rdar://problem/34539270> lldb-server tests not updated to work on ios etc yet
38    @llgs_test
39    def test_autocomplete_path(self):
40        self.build()
41        self.init_lldb_server()
42
43        # Test file-included completion when flag is set to 0.
44        self.test_sequence.add_log_lines(
45            ["read packet: $qPathComplete:0,{}#00".format(
46                self.generate_hex_path("main")),
47             "send packet: $M{},{}#00".format(
48                self.generate_hex_path("main.d"),
49                self.generate_hex_path("main.o"))
50            ],
51            True)
52
53        # Test directory-only completion when flag is set to 1.
54        os.makedirs(os.path.join(self.getBuildDir(), "test"))
55        self.test_sequence.add_log_lines(
56            ["read packet: $qPathComplete:1,{}#00".format(
57                self.generate_hex_path("tes")),
58             "send packet: $M{}{}#00".format(
59                self.generate_hex_path("test"),
60                os.path.sep.encode().hex()) # "test/" or "test\".
61            ],
62            True)
63
64        self.expect_gdbremote_sequence()
65