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