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