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 9 def init_lldb_server(self): 10 self.debug_monitor_exe = get_lldb_server_exe() 11 if not self.debug_monitor_exe: 12 self.skipTest("lldb-server exe not found") 13 port_file = tempfile.NamedTemporaryFile().name 14 commandline_args = [ 15 "platform", 16 "--listen", 17 "*:0", 18 "--socket-file", 19 port_file 20 ] 21 server = self.spawnSubprocess( 22 get_lldb_server_exe(), 23 commandline_args, 24 install_remote=False) 25 self.assertIsNotNone(server) 26 self.stub_hostname = "localhost" 27 self.port = int(lldbutil.wait_for_file_on_target(self, port_file)) 28 self.sock = self.create_socket() 29 self._server = Server(self.sock, server) 30 31 self.do_handshake() 32 33 def generate_hex_path(self, target): 34 return str(os.path.join(self.getBuildDir(), target)).encode().hex() 35 36 @add_test_categories(["llgs"]) 37 def test_autocomplete_path(self): 38 self.build() 39 self.init_lldb_server() 40 41 # Test file-included completion when flag is set to 0. 42 self.test_sequence.add_log_lines( 43 ["read packet: $qPathComplete:0,{}#00".format( 44 self.generate_hex_path("main")), 45 "send packet: $M{},{}#00".format( 46 self.generate_hex_path("main.d"), 47 self.generate_hex_path("main.o")) 48 ], 49 True) 50 51 # Test directory-only completion when flag is set to 1. 52 os.makedirs(os.path.join(self.getBuildDir(), "test")) 53 self.test_sequence.add_log_lines( 54 ["read packet: $qPathComplete:1,{}#00".format( 55 self.generate_hex_path("tes")), 56 "send packet: $M{}{}#00".format( 57 self.generate_hex_path("test"), 58 os.path.sep.encode().hex()) # "test/" or "test\". 59 ], 60 True) 61 62 self.expect_gdbremote_sequence() 63