1*b5893f02SDimitry Andric 2*b5893f02SDimitry Andric #include "llvm/Testing/Support/SupportHelpers.h" 3*b5893f02SDimitry Andric 4*b5893f02SDimitry Andric #include "llvm/ADT/SmallString.h" 5*b5893f02SDimitry Andric #include "llvm/ADT/Twine.h" 6*b5893f02SDimitry Andric #include "llvm/Support/Error.h" 7*b5893f02SDimitry Andric #include "llvm/Support/FileSystem.h" 8*b5893f02SDimitry Andric #include "llvm/Support/MemoryBuffer.h" 9*b5893f02SDimitry Andric #include "llvm/Support/Path.h" 10*b5893f02SDimitry Andric 11*b5893f02SDimitry Andric #include "gtest/gtest.h" 12*b5893f02SDimitry Andric 13*b5893f02SDimitry Andric using namespace llvm; 14*b5893f02SDimitry Andric using namespace llvm::unittest; 15*b5893f02SDimitry Andric findSrcDirMap(StringRef Argv0)16*b5893f02SDimitry Andricstatic std::pair<bool, SmallString<128>> findSrcDirMap(StringRef Argv0) { 17*b5893f02SDimitry Andric SmallString<128> BaseDir = llvm::sys::path::parent_path(Argv0); 18*b5893f02SDimitry Andric 19*b5893f02SDimitry Andric llvm::sys::fs::make_absolute(BaseDir); 20*b5893f02SDimitry Andric 21*b5893f02SDimitry Andric SmallString<128> PathInSameDir = BaseDir; 22*b5893f02SDimitry Andric llvm::sys::path::append(PathInSameDir, "llvm.srcdir.txt"); 23*b5893f02SDimitry Andric 24*b5893f02SDimitry Andric if (llvm::sys::fs::is_regular_file(PathInSameDir)) 25*b5893f02SDimitry Andric return std::make_pair(true, std::move(PathInSameDir)); 26*b5893f02SDimitry Andric 27*b5893f02SDimitry Andric SmallString<128> PathInParentDir = llvm::sys::path::parent_path(BaseDir); 28*b5893f02SDimitry Andric 29*b5893f02SDimitry Andric llvm::sys::path::append(PathInParentDir, "llvm.srcdir.txt"); 30*b5893f02SDimitry Andric if (llvm::sys::fs::is_regular_file(PathInParentDir)) 31*b5893f02SDimitry Andric return std::make_pair(true, std::move(PathInParentDir)); 32*b5893f02SDimitry Andric 33*b5893f02SDimitry Andric return std::pair<bool, SmallString<128>>(false, {}); 34*b5893f02SDimitry Andric } 35*b5893f02SDimitry Andric getInputFileDirectory(const char * Argv0)36*b5893f02SDimitry AndricSmallString<128> llvm::unittest::getInputFileDirectory(const char *Argv0) { 37*b5893f02SDimitry Andric bool Found = false; 38*b5893f02SDimitry Andric SmallString<128> InputFilePath; 39*b5893f02SDimitry Andric std::tie(Found, InputFilePath) = findSrcDirMap(Argv0); 40*b5893f02SDimitry Andric 41*b5893f02SDimitry Andric EXPECT_TRUE(Found) << "Unit test source directory file does not exist."; 42*b5893f02SDimitry Andric 43*b5893f02SDimitry Andric auto File = MemoryBuffer::getFile(InputFilePath); 44*b5893f02SDimitry Andric 45*b5893f02SDimitry Andric EXPECT_TRUE(static_cast<bool>(File)) 46*b5893f02SDimitry Andric << "Could not open unit test source directory file."; 47*b5893f02SDimitry Andric 48*b5893f02SDimitry Andric InputFilePath.clear(); 49*b5893f02SDimitry Andric InputFilePath.append((*File)->getBuffer().trim()); 50*b5893f02SDimitry Andric llvm::sys::path::append(InputFilePath, "Inputs"); 51*b5893f02SDimitry Andric llvm::sys::path::native(InputFilePath); 52*b5893f02SDimitry Andric return InputFilePath; 53*b5893f02SDimitry Andric } 54