""" Test the lldb command line takes a filename with single quote chars. """ from __future__ import print_function import os import lldb from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil import six class SingleQuoteInCommandLineTestCase(TestBase): mydir = TestBase.compute_mydir(__file__) myexe = "path with '09/a.out" @classmethod def classCleanup(cls): """Cleanup the test byproducts.""" try: os.remove("child_send.txt") os.remove("child_read.txt") os.remove(cls.myexe) except: pass @expectedFailureAll( hostoslist=["windows"], bugnumber="llvm.org/pr22274: need a pexpect replacement for windows") @no_debug_info_test def test_lldb_invocation_with_single_quote_in_filename(self): """Test that 'lldb my_file_name' works where my_file_name is a string with a single quote char in it.""" import pexpect self.buildDefault() lldbutil.mkdir_p(self.getBuildArtifact("path with '09")) system([["cp", self.getBuildArtifact("a.out"), "\"%s\"" % self.getBuildArtifact(self.myexe)]]) # The default lldb prompt. prompt = "(lldb) " # So that the child gets torn down after the test. self.child = pexpect.spawn( '%s %s "%s"' % (lldbtest_config.lldbExec, self.lldbOption, self.getBuildArtifact(self.myexe))) child = self.child child.setecho(True) child.logfile_send = send = six.StringIO() child.logfile_read = read = six.StringIO() child.expect_exact(prompt) child.send("help watchpoint") child.sendline('') child.expect_exact(prompt) # Now that the necessary logging is done, restore logfile to None to # stop further logging. child.logfile_send = None child.logfile_read = None if self.TraceOn(): print("\n\nContents of send") print(send.getvalue()) print("\n\nContents of read") print(read.getvalue()) self.expect(read.getvalue(), exe=False, substrs=["Current executable set to"])