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.do_handshake() 33 34 def generate_hex_path(self, target): 35 return str(os.path.join(self.getBuildDir(), target)).encode().hex() 36 37 @add_test_categories(["llgs"]) 38 def test_autocomplete_path(self): 39 self.build() 40 self.init_lldb_server() 41 42 # Test file-included completion when flag is set to 0. 43 self.test_sequence.add_log_lines( 44 ["read packet: $qPathComplete:0,{}#00".format( 45 self.generate_hex_path("main")), 46 "send packet: $M{},{}#00".format( 47 self.generate_hex_path("main.d"), 48 self.generate_hex_path("main.o")) 49 ], 50 True) 51 52 # Test directory-only completion when flag is set to 1. 53 os.makedirs(os.path.join(self.getBuildDir(), "test")) 54 self.test_sequence.add_log_lines( 55 ["read packet: $qPathComplete:1,{}#00".format( 56 self.generate_hex_path("tes")), 57 "send packet: $M{}{}#00".format( 58 self.generate_hex_path("test"), 59 os.path.sep.encode().hex()) # "test/" or "test\". 60 ], 61 True) 62 63 self.expect_gdbremote_sequence() 64