Skip to content

Commit

Permalink
[Test Suite] Pull generateSource into lldbtest
Browse files Browse the repository at this point in the history
Summary:
Convert tests using LLDB headers to use generateSource to put the right include paths in place regardless of whether or not you're building a framework.

This also abstracted generateSource out of TestPublicAPIHeaders.py into lldbtest.py.

Reviewers: tfiala, zturner

Subscribers: lldb-commits

Differential Revision: https://reviews.llvm.org/D25887

llvm-svn: 285542
  • Loading branch information
Chris Bieneman committed Oct 31, 2016
1 parent bd6d699 commit f8ac2da
Show file tree
Hide file tree
Showing 12 changed files with 48 additions and 58 deletions.
Expand Up @@ -19,9 +19,9 @@ class SBDirCheckerCase(TestBase):

def setUp(self):
TestBase.setUp(self)
self.template = 'main.cpp.template'
self.source = 'main.cpp'
self.exe_name = 'a.out'
self.generateSource(self.source)

@skipIfNoSBHeaders
def test_sb_api_directory(self):
Expand All @@ -34,40 +34,9 @@ def test_sb_api_directory(self):
self.skipTest(
"LLDB is 64-bit and cannot be linked to 32-bit test program.")

# Generate main.cpp, build it, and execute.
self.generate_main_cpp()
self.buildDriver(self.source, self.exe_name)
self.sanity_check_executable(self.exe_name)

def generate_main_cpp(self):
"""Generate main.cpp from main.cpp.template."""
temp = os.path.join(os.getcwd(), self.template)
with open(temp, 'r') as f:
content = f.read()

public_api_dir = os.path.join(
os.environ["LLDB_SRC"], "include", "lldb", "API")

# Look under the include/lldb/API directory and add #include statements
# for all the SB API headers.
public_headers = os.listdir(public_api_dir)
# For different platforms, the include statement can vary.
if self.platformIsDarwin():
include_stmt = "'#include <%s>' % os.path.join('LLDB', header)"
if self.getPlatform() == "freebsd" or self.getPlatform(
) == "linux" or os.environ.get('LLDB_BUILD_TYPE') == 'Makefile':
include_stmt = "'#include <%s>' % os.path.join(public_api_dir, header)"
list = [eval(include_stmt) for header in public_headers if (
header.startswith("SB") and header.endswith(".h"))]
includes = '\n'.join(list)
new_content = content.replace('%include_SB_APIs%', includes)
src = os.path.join(os.getcwd(), self.source)
with open(src, 'w') as f:
f.write(new_content)

# The main.cpp has been generated, add a teardown hook to remove it.
self.addTearDownHook(lambda: os.remove(src))

def sanity_check_executable(self, exe_name):
"""Sanity check executable compiled from the auto-generated program."""
exe = os.path.join(os.getcwd(), exe_name)
Expand Down
Expand Up @@ -15,6 +15,15 @@

class SBBreakpointCallbackCase(TestBase):

def setUp(self):
TestBase.setUp(self)
self.generateSource('driver.cpp')
self.generateSource('listener_test.cpp')
self.generateSource('test_breakpoint_callback.cpp')
self.generateSource('test_listener_event_description.cpp')
self.generateSource('test_listener_event_process_state.cpp')
self.generateSource('test_listener_resume.cpp')

mydir = TestBase.compute_mydir(__file__)

@skipIfRemote
Expand Down
Expand Up @@ -7,7 +7,7 @@
#include <string>
#include <vector>

#include "lldb-headers.h"
%include_SB_APIs%

#include "common.h"

Expand Down
Expand Up @@ -7,7 +7,7 @@
#include <thread>
#include <vector>

#include "lldb-headers.h"
%include_SB_APIs%
#include "common.h"

using namespace lldb;
Expand Down

This file was deleted.

Expand Up @@ -7,7 +7,7 @@
#include <vector>
#include <string>

#include "lldb-headers.h"
%include_SB_APIs%

#include "common.h"

Expand Down
Expand Up @@ -8,7 +8,7 @@
#include <string>
#include <thread>

#include "lldb-headers.h"
%include_SB_APIs%

#include "common.h"

Expand Down
Expand Up @@ -8,7 +8,7 @@
#include <string>
#include <thread>

#include "lldb-headers.h"
%include_SB_APIs%

#include "common.h"

Expand Down
Expand Up @@ -8,7 +8,7 @@
#include <string>
#include <thread>

#include "lldb-headers.h"
%include_SB_APIs%

#include "common.h"

Expand Down
Expand Up @@ -18,6 +18,10 @@ class PluginCommandTestCase(TestBase):

mydir = TestBase.compute_mydir(__file__)

def setUp(self):
TestBase.setUp(self)
self.generateSource('plugin.cpp')

@skipIfNoSBHeaders
# Requires a compatible arch and platform to link against the host's built
# lldb lib.
Expand Down
Expand Up @@ -13,15 +13,7 @@ Compile this into a dylib foo.dylib and load by placing in appropriate locations
by typing plugin load foo.dylib at the LLDB command line
*/

#if defined (__APPLE__)
#include <LLDB/SBCommandInterpreter.h>
#include <LLDB/SBCommandReturnObject.h>
#include <LLDB/SBDebugger.h>
#else
#include <lldb/API/SBCommandInterpreter.h>
#include <lldb/API/SBCommandReturnObject.h>
#include <lldb/API/SBDebugger.h>
#endif
%include_SB_APIs%

namespace lldb {
bool
Expand Down
27 changes: 27 additions & 0 deletions lldb/packages/Python/lldbsuite/test/lldbtest.py
Expand Up @@ -1848,6 +1848,33 @@ def getCategories(self):
folder = os.path.dirname(folder)
continue

def generateSource(self, source):
template = source + '.template'
temp = os.path.join(os.getcwd(), template)
with open(temp, 'r') as f:
content = f.read()

public_api_dir = os.path.join(
os.environ["LLDB_SRC"], "include", "lldb", "API")

# Look under the include/lldb/API directory and add #include statements
# for all the SB API headers.
public_headers = os.listdir(public_api_dir)
# For different platforms, the include statement can vary.
if self.hasDarwinFramework():
include_stmt = "'#include <%s>' % os.path.join('LLDB', header)"
else:
include_stmt = "'#include <%s>' % os.path.join(public_api_dir, header)"
list = [eval(include_stmt) for header in public_headers if (
header.startswith("SB") and header.endswith(".h"))]
includes = '\n'.join(list)
new_content = content.replace('%include_SB_APIs%', includes)
src = os.path.join(os.getcwd(), source)
with open(src, 'w') as f:
f.write(new_content)

self.addTearDownHook(lambda: os.remove(src))

def setUp(self):
#import traceback
# traceback.print_stack()
Expand Down

0 comments on commit f8ac2da

Please sign in to comment.