[Lldb-commits] [lldb] 5a85582 - [lldb/Reproducers] Make the type tests work with reproducers
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Fri May 22 13:07:18 PDT 2020
Author: Jonas Devlieghere
Date: 2020-05-22T13:07:10-07:00
New Revision: 5a85582eb26f0c8f6b8ef5a14385d608ef10385c
URL: https://github.com/llvm/llvm-project/commit/5a85582eb26f0c8f6b8ef5a14385d608ef10385c
DIFF: https://github.com/llvm/llvm-project/commit/5a85582eb26f0c8f6b8ef5a14385d608ef10385c.diff
LOG: [lldb/Reproducers] Make the type tests work with reproducers
Added:
Modified:
lldb/packages/Python/lldbsuite/test/lldbtest.py
lldb/test/API/types/AbstractBase.py
Removed:
################################################################################
diff --git a/lldb/packages/Python/lldbsuite/test/lldbtest.py b/lldb/packages/Python/lldbsuite/test/lldbtest.py
index 9d119e08b6c3..b02181ae1ffc 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbtest.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbtest.py
@@ -667,6 +667,13 @@ def getBuildDir(self):
return os.path.join(os.environ["LLDB_BUILD"], self.mydir,
self.getBuildDirBasename())
+ def getReproducerDir(self):
+ """Return the full path to the reproducer if enabled."""
+ if configuration.capture_path:
+ return configuration.capture_path
+ if configuration.replay_path:
+ return configuration.replay_path
+ return None
def makeBuildDir(self):
"""Create the test-specific working directory, deleting any previous
@@ -685,6 +692,9 @@ def getSourcePath(self, name):
"""Return absolute path to a file in the test's source directory."""
return os.path.join(self.getSourceDir(), name)
+ def getReproducerArtifact(self, name):
+ return os.path.join(self.getReproducerDir(), name)
+
@classmethod
def setUpCommands(cls):
commands = [
diff --git a/lldb/test/API/types/AbstractBase.py b/lldb/test/API/types/AbstractBase.py
index f2abfa092a7e..df8416b9c41f 100644
--- a/lldb/test/API/types/AbstractBase.py
+++ b/lldb/test/API/types/AbstractBase.py
@@ -33,12 +33,15 @@ def setUp(self):
# module cacheing subsystem to be confused with executable name "a.out"
# used for all the test cases.
self.exe_name = self.testMethodName
- self.golden_filename = self.getBuildArtifact("golden-output.txt")
+ golden = "{}-golden-output.txt".format(self.testMethodName)
+ if configuration.is_reproducer():
+ self.golden_filename = self.getReproducerArtifact(golden)
+ else:
+ self.golden_filename = self.getBuildArtifact(golden)
def tearDown(self):
"""Cleanup the test byproducts."""
- #print("Removing golden-output.txt...")
- if os.path.exists(self.golden_filename):
+ if os.path.exists(self.golden_filename) and not configuration.is_reproducer():
os.remove(self.golden_filename)
TestBase.tearDown(self)
@@ -88,7 +91,7 @@ def build_and_run_with_source_atoms_expr(
blockCaptured=bc,
quotedDisplay=qd)
- def process_launch_o(self, localPath):
+ def process_launch_o(self):
# process launch command output redirect always goes to host the
# process is running on
if lldb.remote_platform:
@@ -101,10 +104,32 @@ def process_launch_o(self, localPath):
# copy remote_path to local host
self.runCmd('platform get-file {remote} "{local}"'.format(
remote=remote_path, local=self.golden_filename))
+ elif configuration.is_reproducer_replay():
+ # Don't overwrite the golden file generated at capture time.
+ self.runCmd('process launch')
else:
self.runCmd(
'process launch -o "{local}"'.format(local=self.golden_filename))
+ def get_golden_list(self, blockCaptured=False):
+ with open(self.golden_filename, 'r') as f:
+ go = f.read()
+
+ golden_list = []
+ # Scan the golden output line by line, looking for the pattern:
+ #
+ # variable = 'value'
+ #
+ for line in go.split(os.linesep):
+ # We'll ignore variables of array types from inside a block.
+ if blockCaptured and '[' in line:
+ continue
+ match = self.pattern.search(line)
+ if match:
+ var, val = match.group(1), match.group(2)
+ golden_list.append((var, val))
+ return golden_list
+
def generic_type_tester(
self,
exe_name,
@@ -117,29 +142,11 @@ def generic_type_tester(
# First, capture the golden output emitted by the oracle, i.e., the
# series of printf statements.
-
- self.process_launch_o(self.golden_filename)
-
- with open(self.golden_filename) as f:
- go = f.read()
+ self.process_launch_o()
# This golden list contains a list of (variable, value) pairs extracted
# from the golden output.
- gl = []
-
- # Scan the golden output line by line, looking for the pattern:
- #
- # variable = 'value'
- #
- for line in go.split(os.linesep):
- # We'll ignore variables of array types from inside a block.
- if blockCaptured and '[' in line:
- continue
- match = self.pattern.search(line)
- if match:
- var, val = match.group(1), match.group(2)
- gl.append((var, val))
- #print("golden list:", gl)
+ gl = self.get_golden_list(blockCaptured)
# This test uses a #include of "basic_type.cpp" so we need to enable
# always setting inlined breakpoints.
@@ -213,29 +220,11 @@ def generic_type_expr_tester(
# First, capture the golden output emitted by the oracle, i.e., the
# series of printf statements.
-
- self.process_launch_o(self.golden_filename)
-
- with open(self.golden_filename) as f:
- go = f.read()
+ self.process_launch_o()
# This golden list contains a list of (variable, value) pairs extracted
# from the golden output.
- gl = []
-
- # Scan the golden output line by line, looking for the pattern:
- #
- # variable = 'value'
- #
- for line in go.split(os.linesep):
- # We'll ignore variables of array types from inside a block.
- if blockCaptured and '[' in line:
- continue
- match = self.pattern.search(line)
- if match:
- var, val = match.group(1), match.group(2)
- gl.append((var, val))
- #print("golden list:", gl)
+ gl = self.get_golden_list(blockCaptured)
# This test uses a #include of "basic_type.cpp" so we need to enable
# always setting inlined breakpoints.
More information about the lldb-commits
mailing list