summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test')
-rw-r--r--lldb/packages/Python/lldbsuite/test/expression_command/multiline-completion/TestMultilineCompletion.py44
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/format/Makefile5
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/format/TestFormats.py38
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/format/main.c14
-rw-r--r--lldb/packages/Python/lldbsuite/test/iohandler/completion/TestIOHandlerCompletion.py50
-rw-r--r--lldb/packages/Python/lldbsuite/test/lldbpexpect.py97
6 files changed, 56 insertions, 192 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/multiline-completion/TestMultilineCompletion.py b/lldb/packages/Python/lldbsuite/test/expression_command/multiline-completion/TestMultilineCompletion.py
index 2d75fc471d5..261ebd325d0 100644
--- a/lldb/packages/Python/lldbsuite/test/expression_command/multiline-completion/TestMultilineCompletion.py
+++ b/lldb/packages/Python/lldbsuite/test/expression_command/multiline-completion/TestMultilineCompletion.py
@@ -5,48 +5,28 @@ Test completion for multiline expressions.
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
+from lldbsuite.test.lldbpexpect import PExpectTest
-class MultilineCompletionTest(TestBase):
+class MultilineCompletionTest(PExpectTest):
mydir = TestBase.compute_mydir(__file__)
- NO_DEBUG_INFO_TESTCASE = True
-
- def setUp(self):
- TestBase.setUp(self)
- self.source = 'main.c'
-
- 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_basic_completion(self):
"""Test that we can complete a simple multiline expression"""
self.build()
- self.setTearDownCleanup()
- import pexpect
- exe = self.getBuildArtifact("a.out")
prompt = "(lldb) "
- run_commands = ' -o "b main" -o "r"'
- self.child = pexpect.spawn(
- '%s %s %s %s' %
- (lldbtest_config.lldbExec, self.lldbOption, run_commands, exe))
- child = self.child
+ self.launch(executable=self.getBuildArtifact("a.out"))
+ self.expect("b main", substrs=["Breakpoint 1", "address ="])
+ self.expect("run", substrs=["stop reason ="])
- self.expect_string(prompt)
self.child.sendline("expr")
- self.expect_string("terminate with an empty line to evaluate")
+ self.child.expect_exact("terminate with an empty line to evaluate")
self.child.send("to_\t")
- self.expect_string("to_complete")
+ self.child.expect_exact("to_complete")
+
+ self.child.send("\n\n")
+ self.expect_prompt()
- self.deletePexpectChild()
+ self.quit()
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/format/Makefile b/lldb/packages/Python/lldbsuite/test/functionalities/format/Makefile
deleted file mode 100644
index 0d70f259501..00000000000
--- a/lldb/packages/Python/lldbsuite/test/functionalities/format/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-LEVEL = ../../make
-
-C_SOURCES := main.c
-
-include $(LEVEL)/Makefile.rules
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/format/TestFormats.py b/lldb/packages/Python/lldbsuite/test/functionalities/format/TestFormats.py
deleted file mode 100644
index f0ed845e8ae..00000000000
--- a/lldb/packages/Python/lldbsuite/test/functionalities/format/TestFormats.py
+++ /dev/null
@@ -1,38 +0,0 @@
-"""
-Test the command history mechanism
-"""
-
-from __future__ import print_function
-
-
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class TestFormats(TestBase):
-
- mydir = TestBase.compute_mydir(__file__)
-
- @expectedFailureAll(
- hostoslist=["windows"],
- bugnumber="llvm.org/pr22274: need a pexpect replacement for windows")
- def test_formats(self):
- """Test format string functionality."""
- self.build()
- exe = self.getBuildArtifact("a.out")
- import pexpect
- prompt = "(lldb) "
- child = pexpect.spawn(
- '%s %s -x -o "b main" -o r %s' %
- (lldbtest_config.lldbExec, self.lldbOption, exe))
- # So that the spawned lldb session gets shutdown durng teardown.
- self.child = child
-
- # Substitute 'Help!' for 'help' using the 'commands regex' mechanism.
- child.expect_exact(prompt + 'target create "%s"' % exe)
- child.expect_exact(prompt + 'b main')
- child.expect_exact(prompt + 'r')
- child.expect_exact(prompt)
- child.sendline()
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/format/main.c b/lldb/packages/Python/lldbsuite/test/functionalities/format/main.c
deleted file mode 100644
index b37bb22de77..00000000000
--- a/lldb/packages/Python/lldbsuite/test/functionalities/format/main.c
+++ /dev/null
@@ -1,14 +0,0 @@
-//===-- main.c --------------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include <stdio.h>
-int main (int argc, char const *argv[])
-{
- printf("testing\n");
- return 0;
-}
diff --git a/lldb/packages/Python/lldbsuite/test/iohandler/completion/TestIOHandlerCompletion.py b/lldb/packages/Python/lldbsuite/test/iohandler/completion/TestIOHandlerCompletion.py
index a1c07a3b045..d202887902e 100644
--- a/lldb/packages/Python/lldbsuite/test/iohandler/completion/TestIOHandlerCompletion.py
+++ b/lldb/packages/Python/lldbsuite/test/iohandler/completion/TestIOHandlerCompletion.py
@@ -7,70 +7,46 @@ import os
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
+from lldbsuite.test.lldbpexpect import PExpectTest
-class IOHandlerCompletionTest(TestBase):
+class IOHandlerCompletionTest(PExpectTest):
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.launch(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")
+ self.child.expect_exact("register")
# Try tab completing regi to register.
self.child.send("regi\t")
- self.expect_string(prompt + "register")
+ self.child.expect_exact(self.PROMPT + "register")
self.child.send("\n")
+ self.expect_prompt()
# 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/")
+ self.child.expect_exact("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.expect_exact("TestIOHandlerCompletion.py")
self.child.send("\n")
+ self.expect_prompt()
# Start tab completion and abort showing more commands with 'n'.
self.child.send("\t")
- self.expect_string("More (Y/n/a)")
+ self.child.expect_exact("More (Y/n/a)")
self.child.send("n")
- self.expect_string(prompt)
+ self.expect_prompt()
# Shouldn't crash or anything like that.
self.child.send("regoinvalid\t")
- self.expect_string(prompt)
+ self.expect_prompt()
- self.deletePexpectChild()
+ self.quit()
diff --git a/lldb/packages/Python/lldbsuite/test/lldbpexpect.py b/lldb/packages/Python/lldbsuite/test/lldbpexpect.py
index ce73654bdbe..bb50f47e02e 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbpexpect.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbpexpect.py
@@ -13,82 +13,47 @@ from .lldbtest import *
from . import lldbutil
if sys.platform.startswith('win32'):
- class PExpectTest(TestBase):
+ # llvm.org/pr22274: need a pexpect replacement for windows
+ class PExpectTest(object):
pass
else:
import pexpect
class PExpectTest(TestBase):
- mydir = TestBase.compute_mydir(__file__)
-
- def setUp(self):
- TestBase.setUp(self)
+ NO_DEBUG_INFO_TESTCASE = True
+ PROMPT = "(lldb) "
- def launchArgs(self):
- return ""
+ def expect_prompt(self):
+ self.child.expect_exact(self.PROMPT)
- def launch(self, timeout=None):
- if timeout is None:
- timeout = 30
+ def launch(self, executable=None, timeout=30, dimensions=None):
logfile = sys.stdout if self.TraceOn() else None
+ args = ['--no-lldbinit', '--no-use-colors']
+ for cmd in self.setUpCommands():
+ args += ['-O', cmd]
+ if executable is not None:
+ args += ['--file', executable]
self.child = pexpect.spawn(
- '%s --no-use-colors %s' %
- (lldbtest_config.lldbExec, self.launchArgs()), logfile=logfile)
- self.child.timeout = timeout
- self.timeout = timeout
-
- def expect(self, patterns=None, timeout=None, exact=None):
- if patterns is None:
- return None
- if timeout is None:
- timeout = self.timeout
- if exact is None:
- exact = False
- if exact:
- return self.child.expect_exact(patterns, timeout=timeout)
- else:
- return self.child.expect(patterns, timeout=timeout)
-
- def expectall(self, patterns=None, timeout=None, exact=None):
- if patterns is None:
- return None
- if timeout is None:
- timeout = self.timeout
- if exact is None:
- exact = False
- for pattern in patterns:
- self.expect(pattern, timeout=timeout, exact=exact)
-
- def sendimpl(
- self,
- sender,
- command,
- patterns=None,
- timeout=None,
- exact=None):
- sender(command)
- return self.expect(patterns=patterns, timeout=timeout, exact=exact)
-
- def send(self, command, patterns=None, timeout=None, exact=None):
- return self.sendimpl(
- self.child.send,
- command,
- patterns,
- timeout,
- exact)
-
- def sendline(self, command, patterns=None, timeout=None, exact=None):
- return self.sendimpl(
- self.child.sendline,
- command,
- patterns,
- timeout,
- exact)
-
- def quit(self, gracefully=None):
- if gracefully is None:
- gracefully = True
+ lldbtest_config.lldbExec, args=args, logfile=logfile,
+ timeout=timeout, dimensions=dimensions)
+ self.expect_prompt()
+ for cmd in self.setUpCommands():
+ self.child.expect_exact(cmd)
+ self.expect_prompt()
+ if executable is not None:
+ self.child.expect_exact("target create")
+ self.child.expect_exact("Current executable set to")
+ self.expect_prompt()
+
+ def expect(self, cmd, substrs=None):
+ self.child.sendline(cmd)
+ if substrs is not None:
+ for s in substrs:
+ self.child.expect_exact(s)
+ self.expect_prompt()
+
+ def quit(self, gracefully=True):
self.child.sendeof()
self.child.close(force=not gracefully)
self.child = None
OpenPOWER on IntegriCloud