mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-22 13:05:52 -04:00

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
77 lines
2.5 KiB
Python
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()
|