1 //===-- XcodeSDKTest.cpp --------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "gtest/gtest.h"
10 
11 #include "lldb/Utility/FileSpec.h"
12 #include "lldb/Utility/XcodeSDK.h"
13 
14 #include "llvm/ADT/StringRef.h"
15 
16 #include <tuple>
17 
18 using namespace lldb_private;
19 
20 TEST(XcodeSDKTest, ParseTest) {
21   EXPECT_EQ(XcodeSDK::GetAnyMacOS().GetType(), XcodeSDK::MacOSX);
22   EXPECT_EQ(XcodeSDK("MacOSX.sdk").GetType(), XcodeSDK::MacOSX);
23   EXPECT_EQ(XcodeSDK("iPhoneSimulator.sdk").GetType(), XcodeSDK::iPhoneSimulator);
24   EXPECT_EQ(XcodeSDK("iPhoneOS.sdk").GetType(), XcodeSDK::iPhoneOS);
25   EXPECT_EQ(XcodeSDK("AppleTVSimulator.sdk").GetType(), XcodeSDK::AppleTVSimulator);
26   EXPECT_EQ(XcodeSDK("AppleTVOS.sdk").GetType(), XcodeSDK::AppleTVOS);
27   EXPECT_EQ(XcodeSDK("WatchSimulator.sdk").GetType(), XcodeSDK::WatchSimulator);
28   EXPECT_EQ(XcodeSDK("WatchOS.sdk").GetType(), XcodeSDK::watchOS);
29   EXPECT_EQ(XcodeSDK("Linux.sdk").GetType(), XcodeSDK::Linux);
30   EXPECT_EQ(XcodeSDK("MacOSX.sdk").GetVersion(), llvm::VersionTuple());
31   EXPECT_EQ(XcodeSDK("MacOSX10.9.sdk").GetVersion(), llvm::VersionTuple(10, 9));
32   EXPECT_EQ(XcodeSDK("MacOSX10.15.4.sdk").GetVersion(), llvm::VersionTuple(10, 15));
33   EXPECT_EQ(XcodeSDK().GetType(), XcodeSDK::unknown);
34   EXPECT_EQ(XcodeSDK().GetVersion(), llvm::VersionTuple());
35 }
36 
37 TEST(XcodeSDKTest, MergeTest) {
38   XcodeSDK sdk("MacOSX.sdk");
39   sdk.Merge(XcodeSDK("WatchOS.sdk"));
40   // This doesn't make any particular sense and shouldn't happen in practice, we
41   // just want to guarantee a well-defined behavior when choosing one
42   // SDK to fit all CUs in an lldb::Module.
43   // -> The higher number wins.
44   EXPECT_EQ(sdk.GetType(), XcodeSDK::watchOS);
45   sdk.Merge(XcodeSDK("WatchOS1.1.sdk"));
46   EXPECT_EQ(sdk.GetVersion(), llvm::VersionTuple(1, 1));
47   sdk.Merge(XcodeSDK("WatchOS2.0.sdk"));
48   EXPECT_EQ(sdk.GetVersion(), llvm::VersionTuple(2, 0));
49 }
50 
51 TEST(XcodeSDKTest, SDKSupportsModules) {
52   std::string base = "/Applications/Xcode.app/Contents/Developer/Platforms/";
53   EXPECT_TRUE(XcodeSDK::SDKSupportsModules(
54       XcodeSDK::Type::iPhoneSimulator,
55       FileSpec(
56           base +
57           "iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.0.sdk")));
58   EXPECT_FALSE(XcodeSDK::SDKSupportsModules(
59       XcodeSDK::Type::iPhoneSimulator,
60       FileSpec(
61           base +
62           "iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.2.sdk")));
63   EXPECT_TRUE(XcodeSDK::SDKSupportsModules(
64       XcodeSDK::Type::MacOSX,
65       FileSpec(base + "MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk")));
66   EXPECT_FALSE(XcodeSDK::SDKSupportsModules(
67       XcodeSDK::Type::MacOSX,
68       FileSpec(base + "MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk")));
69 }
70 
71 TEST(XcodeSDKTest, GetSDKNameForType) {
72   EXPECT_EQ("macosx", XcodeSDK::GetSDKNameForType(XcodeSDK::Type::MacOSX));
73   EXPECT_EQ("iphonesimulator",
74             XcodeSDK::GetSDKNameForType(XcodeSDK::Type::iPhoneSimulator));
75   EXPECT_EQ("iphoneos", XcodeSDK::GetSDKNameForType(XcodeSDK::Type::iPhoneOS));
76   EXPECT_EQ("appletvsimulator",
77             XcodeSDK::GetSDKNameForType(XcodeSDK::Type::AppleTVSimulator));
78   EXPECT_EQ("appletvos",
79             XcodeSDK::GetSDKNameForType(XcodeSDK::Type::AppleTVOS));
80   EXPECT_EQ("watchsimulator",
81             XcodeSDK::GetSDKNameForType(XcodeSDK::Type::WatchSimulator));
82   EXPECT_EQ("watchos", XcodeSDK::GetSDKNameForType(XcodeSDK::Type::watchOS));
83   EXPECT_EQ("linux", XcodeSDK::GetSDKNameForType(XcodeSDK::Type::Linux));
84   EXPECT_EQ("", XcodeSDK::GetSDKNameForType(XcodeSDK::Type::numSDKTypes));
85   EXPECT_EQ("", XcodeSDK::GetSDKNameForType(XcodeSDK::Type::unknown));
86 }
87