xref: /llvm-project/lldb/test/API/tools/lldb-server/TestGdbRemoteCompletion.py (revision 34f33babc28d240d4ceee69f9afe7d6f5e8ac29b)
13cd8d7b1SGongyu Dengimport tempfile
23cd8d7b1SGongyu Dengimport gdbremote_testcase
33cd8d7b1SGongyu Dengfrom lldbsuite.test.lldbtest import *
43cd8d7b1SGongyu Dengfrom lldbsuite.test.decorators import *
53cd8d7b1SGongyu Dengfrom lldbgdbserverutils import *
63cd8d7b1SGongyu Deng
73cd8d7b1SGongyu Deng
82238dcc3SJonas Devlieghereclass GdbRemoteCompletionTestCase(gdbremote_testcase.GdbRemoteTestCaseBase):
93cd8d7b1SGongyu Deng    def init_lldb_server(self):
103cd8d7b1SGongyu Deng        self.debug_monitor_exe = get_lldb_server_exe()
113cd8d7b1SGongyu Deng        if not self.debug_monitor_exe:
123cd8d7b1SGongyu Deng            self.skipTest("lldb-server exe not found")
133cd8d7b1SGongyu Deng        port_file = tempfile.NamedTemporaryFile().name
142238dcc3SJonas Devlieghere        commandline_args = ["platform", "--listen", "*:0", "--socket-file", port_file]
153cd8d7b1SGongyu Deng        server = self.spawnSubprocess(
162238dcc3SJonas Devlieghere            get_lldb_server_exe(), commandline_args, install_remote=False
172238dcc3SJonas Devlieghere        )
183cd8d7b1SGongyu Deng        self.assertIsNotNone(server)
193cd8d7b1SGongyu Deng        self.stub_hostname = "localhost"
203cd8d7b1SGongyu Deng        self.port = int(lldbutil.wait_for_file_on_target(self, port_file))
213cd8d7b1SGongyu Deng        self.sock = self.create_socket()
22a2f4f7daSPavel Labath        self._server = Server(self.sock, server)
233cd8d7b1SGongyu Deng
24872b1da6SPavel Labath        self.do_handshake()
253cd8d7b1SGongyu Deng
263cd8d7b1SGongyu Deng    def generate_hex_path(self, target):
273cd8d7b1SGongyu Deng        return str(os.path.join(self.getBuildDir(), target)).encode().hex()
283cd8d7b1SGongyu Deng
29*34f33babSDmitry Vasilyev    @skipIfRemote
3076a718eeSPavel Labath    @add_test_categories(["llgs"])
313cd8d7b1SGongyu Deng    def test_autocomplete_path(self):
323cd8d7b1SGongyu Deng        self.build()
333cd8d7b1SGongyu Deng        self.init_lldb_server()
343cd8d7b1SGongyu Deng
353cd8d7b1SGongyu Deng        # Test file-included completion when flag is set to 0.
363cd8d7b1SGongyu Deng        self.test_sequence.add_log_lines(
372238dcc3SJonas Devlieghere            [
382238dcc3SJonas Devlieghere                "read packet: $qPathComplete:0,{}#00".format(
392238dcc3SJonas Devlieghere                    self.generate_hex_path("main")
402238dcc3SJonas Devlieghere                ),
413cd8d7b1SGongyu Deng                "send packet: $M{},{}#00".format(
422238dcc3SJonas Devlieghere                    self.generate_hex_path("main.d"), self.generate_hex_path("main.o")
432238dcc3SJonas Devlieghere                ),
443cd8d7b1SGongyu Deng            ],
452238dcc3SJonas Devlieghere            True,
462238dcc3SJonas Devlieghere        )
473cd8d7b1SGongyu Deng
483cd8d7b1SGongyu Deng        # Test directory-only completion when flag is set to 1.
493cd8d7b1SGongyu Deng        os.makedirs(os.path.join(self.getBuildDir(), "test"))
503cd8d7b1SGongyu Deng        self.test_sequence.add_log_lines(
512238dcc3SJonas Devlieghere            [
522238dcc3SJonas Devlieghere                "read packet: $qPathComplete:1,{}#00".format(
532238dcc3SJonas Devlieghere                    self.generate_hex_path("tes")
542238dcc3SJonas Devlieghere                ),
553cd8d7b1SGongyu Deng                "send packet: $M{}{}#00".format(
562238dcc3SJonas Devlieghere                    self.generate_hex_path("test"), os.path.sep.encode().hex()
572238dcc3SJonas Devlieghere                ),  # "test/" or "test\".
583cd8d7b1SGongyu Deng            ],
592238dcc3SJonas Devlieghere            True,
602238dcc3SJonas Devlieghere        )
613cd8d7b1SGongyu Deng
623cd8d7b1SGongyu Deng        self.expect_gdbremote_sequence()
63