teak-llvm/lldb/packages/Python/lldbsuite/test/iohandler/completion/TestIOHandlerCompletion.py
Pavel Labath 4f91faa965 Stabilize TestIOHandlerCompletion
pexpect gives as raw data going to a terminal. This means that if the
completed line does not fit the emulated line, the returned data will
contain line breaks. On my machine these line breaks happened to be
inside the "iohandler/completion" string that the test was searching
for.

Work around this by telling pexpect to emulate a very wide terminal.

llvm-svn: 370054
2019-08-27 13:09:40 +00:00

77 lines
2.5 KiB
Python

"""
Test completion in our IOHandlers.
"""
import os
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
class IOHandlerCompletionTest(TestBase):
mydir = TestBase.compute_mydir(__file__)
NO_DEBUG_INFO_TESTCASE = True
def setUp(self):
TestBase.setUp(self)
def expect_string(self, string):
import pexpect
"""This expects for "string", with timeout & EOF being test fails."""
try:
self.child.expect_exact(string)
except pexpect.EOF:
self.fail("Got EOF waiting for '%s'" % (string))
except pexpect.TIMEOUT:
self.fail("Timed out waiting for '%s'" % (string))
@expectedFailureAll(
oslist=["windows"],
bugnumber="llvm.org/pr22274: need a pexpect replacement for windows")
def test_completion(self):
self.setTearDownCleanup()
import pexpect
exe = self.getBuildArtifact("a.out")
prompt = "(lldb) "
self.child = pexpect.spawn(
'%s %s %s %s' %
(lldbtest_config.lldbExec, self.lldbOption, "", exe),
dimensions=(100, 500))
self.expect_string(prompt)
# Start tab completion, go to the next page and then display all with 'a'.
self.child.send("\t\ta")
self.expect_string("register")
# Try tab completing regi to register.
self.child.send("regi\t")
self.expect_string(prompt + "register")
self.child.send("\n")
# Try tab completing directories and files. Also tests the partial
# completion where LLDB shouldn't print a space after the directory
# completion (as it didn't completed the full token).
dir_without_slashes = os.path.realpath(os.path.dirname(__file__)).rstrip("/")
self.child.send("file " + dir_without_slashes + "\t")
self.expect_string("iohandler/completion/")
# If we get a correct partial completion without a trailing space, then this
# should complete the current test file.
self.child.send("TestIOHandler\t")
self.expect_string("TestIOHandlerCompletion.py")
self.child.send("\n")
# Start tab completion and abort showing more commands with 'n'.
self.child.send("\t")
self.expect_string("More (Y/n/a)")
self.child.send("n")
self.expect_string(prompt)
# Shouldn't crash or anything like that.
self.child.send("regoinvalid\t")
self.expect_string(prompt)
self.deletePexpectChild()