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