From 0bc587a1280558028cca2fe97a0aae38cbe98383 Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Mon, 10 Dec 2018 22:57:47 +0000 Subject: [PATCH] Rewrite pexpect-based test in LIT/FileCheck. pexecpt-based tests are flakey because they involve timeouts and this test is eprfectly serializable. llvm-svn: 348808 --- lldb/lit/Driver/Inputs/convenience.in | 9 ++ lldb/lit/Driver/Inputs/hello.c | 5 + lldb/lit/Driver/TestConvenienceVariables.test | 22 ++++ .../embedded_interpreter/Makefile | 5 - .../TestConvenienceVariables.py | 108 ------------------ .../embedded_interpreter/main.c | 6 - 6 files changed, 36 insertions(+), 119 deletions(-) create mode 100644 lldb/lit/Driver/Inputs/convenience.in create mode 100644 lldb/lit/Driver/Inputs/hello.c create mode 100644 lldb/lit/Driver/TestConvenienceVariables.test delete mode 100644 lldb/packages/Python/lldbsuite/test/functionalities/embedded_interpreter/Makefile delete mode 100644 lldb/packages/Python/lldbsuite/test/functionalities/embedded_interpreter/TestConvenienceVariables.py delete mode 100644 lldb/packages/Python/lldbsuite/test/functionalities/embedded_interpreter/main.c diff --git a/lldb/lit/Driver/Inputs/convenience.in b/lldb/lit/Driver/Inputs/convenience.in new file mode 100644 index 000000000000..dbbe2f7978d6 --- /dev/null +++ b/lldb/lit/Driver/Inputs/convenience.in @@ -0,0 +1,9 @@ +breakpoint set -f hello.c -p Hello +run +script print(lldb.debugger) +script print(lldb.target) +script print(lldb.process) +script print(lldb.thread.GetStopDescription(100)) +script lldb.frame.GetLineEntry().GetLine() +script lldb.frame.GetLineEntry().GetFileSpec().GetFilename() +script lldb.frame.GetFunctionName() diff --git a/lldb/lit/Driver/Inputs/hello.c b/lldb/lit/Driver/Inputs/hello.c new file mode 100644 index 000000000000..fb9be9a12675 --- /dev/null +++ b/lldb/lit/Driver/Inputs/hello.c @@ -0,0 +1,5 @@ +int puts(const char*); +int main(int argc, char **argv) { + puts("Hello World\n"); + return 0; +} diff --git a/lldb/lit/Driver/TestConvenienceVariables.test b/lldb/lit/Driver/TestConvenienceVariables.test new file mode 100644 index 000000000000..ea0931fdf788 --- /dev/null +++ b/lldb/lit/Driver/TestConvenienceVariables.test @@ -0,0 +1,22 @@ +RUN: %clang %p/Inputs/hello.c -g -o %t +RUN: %lldb %t -s %p/Inputs/convenience.in -o quit | FileCheck %s + +script print(lldb.debugger) + +CHECK: stop reason = breakpoint 1.1 +CHECK: Debugger (instance: {{.*}}, id: {{[0-9]+}}) +CHECK: script print(lldb.target) +CHECK: TestConvenienceVariables.test +CHECK: script print(lldb.process) +CHECK: SBProcess: pid = {{[0-9]+}}, +CHECK-SAME: state = stopped, +CHECK-SAME: threads = {{[0-9]+}}, +CHECK-SAME: executable = TestConvenienceVariables.test +CHECK: script print(lldb.thread.GetStopDescription(100)) +CHECK: breakpoint 1.1 +CHECK: script lldb.frame.GetLineEntry().GetLine() +CHECK: 3 +CHECK: script lldb.frame.GetLineEntry().GetFileSpec().GetFilename() +CHECK: hello.c +CHECK: script lldb.frame.GetFunctionName() +CHECK: main \ No newline at end of file diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/embedded_interpreter/Makefile b/lldb/packages/Python/lldbsuite/test/functionalities/embedded_interpreter/Makefile deleted file mode 100644 index 0d70f2595019..000000000000 --- a/lldb/packages/Python/lldbsuite/test/functionalities/embedded_interpreter/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/embedded_interpreter/TestConvenienceVariables.py b/lldb/packages/Python/lldbsuite/test/functionalities/embedded_interpreter/TestConvenienceVariables.py deleted file mode 100644 index 0f130b3ecbab..000000000000 --- a/lldb/packages/Python/lldbsuite/test/functionalities/embedded_interpreter/TestConvenienceVariables.py +++ /dev/null @@ -1,108 +0,0 @@ -"""Test convenience variables when you drop in from lldb prompt into an embedded interpreter.""" - -from __future__ import print_function - - -import os -import lldb -from lldbsuite.test.decorators import * -from lldbsuite.test.lldbtest import * -from lldbsuite.test import lldbutil - - -class ConvenienceVariablesCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - # Find the line number to break on inside main.cpp. - self.line = line_number('main.c', 'Hello world.') - - @skipIfFreeBSD # llvm.org/pr17228 - @skipIfRemote - @expectedFailureAll( - oslist=["windows"], - bugnumber="llvm.org/pr22274: need a pexpect replacement for windows") - def test_with_run_commands(self): - """Test convenience variables lldb.debugger, lldb.target, lldb.process, lldb.thread, and lldb.frame.""" - self.build() - import pexpect - exe = self.getBuildArtifact("a.out") - prompt = "(lldb) " - python_prompt = ">>> " - - # So that the child gets torn down after the test. - self.child = pexpect.spawn( - '%s %s %s' % - (lldbtest_config.lldbExec, self.lldbOption, exe)) - child = self.child - # Turn on logging for what the child sends back. - if self.TraceOn(): - child.logfile_read = sys.stdout - - # Set the breakpoint, run the inferior, when it breaks, issue print on - # the various convenience variables. - child.expect_exact(prompt) - child.sendline('breakpoint set -f main.c -l %d' % self.line) - child.expect_exact(prompt) - child.sendline('run') - child.expect_exact("stop reason = breakpoint 1.1") - child.expect_exact(prompt) - child.sendline('script') - child.expect_exact(python_prompt) - - # Set a flag so that we know during teardown time, we need to exit the - # Python interpreter, then the lldb interpreter. - self.child_in_script_interpreter = True - - child.sendline('print(lldb.debugger)') - child.expect_exact(python_prompt) - self.expect(child.before, exe=False, - patterns=['Debugger \(instance: .*, id: \d\)']) - - child.sendline('print(lldb.target)') - child.expect_exact(python_prompt) - self.expect(child.before, exe=False, - substrs=['a.out']) - - child.sendline('print(lldb.process)') - child.expect_exact(python_prompt) - self.expect(child.before, exe=False, patterns=[ - 'SBProcess: pid = \d+, state = stopped, threads = \d, executable = a.out']) - - child.sendline('print(lldb.thread.GetStopDescription(100))') - child.expect_exact(python_prompt) - self.expect( - child.before, - exe=False, - patterns=[ - 'breakpoint 1\.1']) - - child.sendline('lldb.frame.GetLineEntry().GetLine()') - child.expect_exact(python_prompt) - line_number = "%d"%(self.line) - self.expect( - child.before, - exe=False, - substrs=[ - line_number]) - - child.sendline('lldb.frame.GetLineEntry().GetFileSpec().GetFilename()') - child.expect_exact(python_prompt) - line_number = "%d"%(self.line) - self.expect( - child.before, - exe=False, - substrs=[ - "main.c"]) - - child.sendline('lldb.frame.GetFunctionName()') - child.expect_exact(python_prompt) - line_number = "%d"%(self.line) - self.expect( - child.before, - exe=False, - substrs=[ - "main"]) diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/embedded_interpreter/main.c b/lldb/packages/Python/lldbsuite/test/functionalities/embedded_interpreter/main.c deleted file mode 100644 index 277aa54a4eea..000000000000 --- a/lldb/packages/Python/lldbsuite/test/functionalities/embedded_interpreter/main.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int main(int argc, char const *argv[]) { - printf("Hello world.\n"); - return 0; -}