Add support for unittest inputs.

Occasionally it is useful to have unittest which take inputs.
While we normally try to have this test be more of a lit test
we occasionally don't have tools that can exercise the code
in the right way to test certain things.  LLDB has been using
this style of unit test for a while, particularly with regards
to how it tests core dump and minidump file parsing.  Recently
i needed this as well for the case where we want to test that
some of the PDB reading code works correctly.  It needs to
exercise the code in a way that is not covered by any dumper
and would be impractical to implement in one of the dumpers,
but requires a valid PDB file.  Since this is now needed by
more than one project, it makes sense to have this be a
generally supported thing that unit tests can do, and we just
encourage people to use this sparingly.

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

llvm-svn: 341502
This commit is contained in:
Zachary Turner 2018-09-05 23:30:17 +00:00
parent b29d42ee31
commit e9f1df84af
5 changed files with 51 additions and 1 deletions

View File

@ -1113,6 +1113,11 @@ function(add_unittest test_suite test_name)
# API for all shared libaries loaded by this executable.
target_link_libraries(${test_name} PRIVATE gtest_main gtest ${LLVM_PTHREAD_LIB})
set(LLVM_UNITTEST_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
configure_file(
${LLVM_MAIN_SRC_DIR}/unittests/unittest.cfg.in
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llvm.srcdir.txt)
add_dependencies(${test_suite} ${test_name})
get_target_property(test_suite_folder ${test_suite} FOLDER)
if (NOT ${test_suite_folder} STREQUAL "NOTFOUND")
@ -1120,6 +1125,7 @@ function(add_unittest test_suite test_name)
endif ()
endfunction()
# Generic support for adding a benchmark.
function(add_benchmark benchmark_name)
if( NOT LLVM_BUILD_BENCHMARKS )

View File

@ -10,10 +10,12 @@
#ifndef LLVM_TESTING_SUPPORT_SUPPORTHELPERS_H
#define LLVM_TESTING_SUPPORT_SUPPORTHELPERS_H
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/Support/Error.h"
#include "gtest/gtest-printers.h"
#include <string>
namespace llvm {
namespace detail {
struct ErrorHolder {
@ -52,6 +54,10 @@ void PrintTo(const ExpectedHolder<T> &Item, std::ostream *Out) {
}
}
} // namespace detail
namespace unittest {
SmallString<128> getInputFileDirectory();
}
} // namespace llvm
#endif

View File

@ -3,6 +3,7 @@ add_definitions(-DGTEST_HAS_TR1_TUPLE=0)
add_llvm_library(LLVMTestingSupport
Error.cpp
SupportHelpers.cpp
BUILDTREE_ONLY

View File

@ -0,0 +1,36 @@
#include "llvm/Testing/Support/SupportHelpers.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Path.h"
#include "gtest/gtest.h"
using namespace llvm;
using namespace llvm::unittest;
extern const char *TestMainArgv0;
SmallString<128> llvm::unittest::getInputFileDirectory() {
llvm::SmallString<128> Result = llvm::sys::path::parent_path(TestMainArgv0);
llvm::sys::fs::make_absolute(Result);
llvm::sys::path::append(Result, "llvm.srcdir.txt");
EXPECT_TRUE(llvm::sys::fs::is_directory(Result))
<< "Unit test source directory file does not exist.";
auto File = MemoryBuffer::getFile(Result);
EXPECT_TRUE(static_cast<bool>(File))
<< "Could not open unit test source directory file.";
Result.clear();
Result.append((*File)->getBuffer().trim());
llvm::sys::path::append(Result, "Inputs");
llvm::sys::path::native(Result);
return std::move(Result);
}

View File

@ -0,0 +1 @@
@LLVM_UNITTEST_SOURCE_DIR@