1 //===-- ClangParserTest.cpp --------------------------------------*- C++-*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "Plugins/ExpressionParser/Clang/ClangHost.h" 11 #include "TestingSupport/TestUtilities.h" 12 #include "lldb/Host/HostInfo.h" 13 #include "lldb/Utility/FileSpec.h" 14 #include "lldb/lldb-defines.h" 15 #include "gtest/gtest.h" 16 17 using namespace lldb_private; 18 19 namespace { 20 struct ClangHostTest : public testing::Test { 21 static void SetUpTestCase() { HostInfo::Initialize(); } 22 static void TearDownTestCase() { HostInfo::Terminate(); } 23 }; 24 } // namespace 25 26 #ifdef __APPLE__ 27 static std::string ComputeClangDir(std::string lldb_shlib_path, 28 bool verify = false) { 29 FileSpec clang_dir; 30 FileSpec lldb_shlib_spec(lldb_shlib_path, false); 31 ComputeClangDirectory(lldb_shlib_spec, clang_dir, verify); 32 return clang_dir.GetPath(); 33 } 34 35 TEST_F(ClangHostTest, MacOSX) { 36 // This returns whatever the POSIX fallback returns. 37 std::string posix = "/usr/lib/liblldb.dylib"; 38 EXPECT_FALSE(ComputeClangDir(posix).empty()); 39 40 std::string build = 41 "/lldb-macosx-x86_64/Library/Frameworks/LLDB.framework/Versions/A"; 42 std::string build_clang = 43 "/lldb-macosx-x86_64/Library/Frameworks/LLDB.framework/Resources/Clang"; 44 EXPECT_EQ(ComputeClangDir(build), build_clang); 45 46 std::string xcode = "/Applications/Xcode.app/Contents/SharedFrameworks/" 47 "LLDB.framework/Versions/A"; 48 std::string xcode_clang = 49 "/Applications/Xcode.app/Contents/Developer/Toolchains/" 50 "XcodeDefault.xctoolchain/usr/lib/swift/clang"; 51 EXPECT_EQ(ComputeClangDir(xcode), xcode_clang); 52 53 std::string toolchain = 54 "/Applications/Xcode.app/Contents/Developer/Toolchains/" 55 "Swift-4.1-development-snapshot.xctoolchain/System/Library/" 56 "PrivateFrameworks/LLDB.framework"; 57 std::string toolchain_clang = 58 "/Applications/Xcode.app/Contents/Developer/Toolchains/" 59 "Swift-4.1-development-snapshot.xctoolchain/usr/lib/swift/clang"; 60 EXPECT_EQ(ComputeClangDir(toolchain), toolchain_clang); 61 62 std::string cltools = "/Library/Developer/CommandLineTools/Library/" 63 "PrivateFrameworks/LLDB.framework"; 64 std::string cltools_clang = 65 "/Library/Developer/CommandLineTools/Library/PrivateFrameworks/" 66 "LLDB.framework/Resources/Clang"; 67 EXPECT_EQ(ComputeClangDir(cltools), cltools_clang); 68 69 // Test that a bogus path is detected. 70 EXPECT_NE(ComputeClangDir(GetInputFilePath(xcode), true), 71 ComputeClangDir(GetInputFilePath(xcode))); 72 } 73 #endif 74