brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.3 KiB · a8a597b Raw
268 lines · cpp
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-exception6//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#include "llvm/TargetParser/Triple.h"16 17#include <tuple>18 19using namespace lldb_private;20 21TEST(XcodeSDKTest, ParseTest) {22  EXPECT_EQ(XcodeSDK::GetAnyMacOS().GetType(), XcodeSDK::MacOSX);23  EXPECT_EQ(XcodeSDK("MacOSX.sdk").GetType(), XcodeSDK::MacOSX);24  EXPECT_EQ(XcodeSDK("iPhoneSimulator.sdk").GetType(), XcodeSDK::iPhoneSimulator);25  EXPECT_EQ(XcodeSDK("iPhoneOS.sdk").GetType(), XcodeSDK::iPhoneOS);26  EXPECT_EQ(XcodeSDK("AppleTVSimulator.sdk").GetType(), XcodeSDK::AppleTVSimulator);27  EXPECT_EQ(XcodeSDK("AppleTVOS.sdk").GetType(), XcodeSDK::AppleTVOS);28  EXPECT_EQ(XcodeSDK("WatchSimulator.sdk").GetType(), XcodeSDK::WatchSimulator);29  EXPECT_EQ(XcodeSDK("WatchOS.sdk").GetType(), XcodeSDK::watchOS);30  EXPECT_EQ(XcodeSDK("BridgeOS.sdk").GetType(), XcodeSDK::BridgeOS);31  EXPECT_EQ(XcodeSDK("XRSimulator.sdk").GetType(), XcodeSDK::XRSimulator);32  EXPECT_EQ(XcodeSDK("XROS.sdk").GetType(), XcodeSDK::XROS);33  EXPECT_EQ(XcodeSDK("Linux.sdk").GetType(), XcodeSDK::Linux);34  EXPECT_EQ(XcodeSDK("MacOSX.sdk").GetVersion(), llvm::VersionTuple());35  EXPECT_EQ(XcodeSDK("MacOSX10.9.sdk").GetVersion(), llvm::VersionTuple(10, 9));36  EXPECT_EQ(XcodeSDK("MacOSX10.15.4.sdk").GetVersion(), llvm::VersionTuple(10, 15));37  EXPECT_EQ(XcodeSDK("MacOSX.sdk").IsAppleInternalSDK(), false);38  EXPECT_EQ(39      XcodeSDK("MacOSX.sdk", FileSpec{"/Path/To/MacOSX.sdk"}).GetSysroot(),40      FileSpec("/Path/To/MacOSX.sdk"));41  EXPECT_EQ(XcodeSDK("MacOSX10.15.Internal.sdk").GetType(), XcodeSDK::MacOSX);42  EXPECT_EQ(XcodeSDK("MacOSX10.15.Internal.sdk").GetVersion(),43            llvm::VersionTuple(10, 15));44  EXPECT_EQ(XcodeSDK("MacOSX10.15.Internal.sdk").IsAppleInternalSDK(), true);45  EXPECT_FALSE(XcodeSDK("MacOSX10.15.Internal.sdk").GetSysroot());46  EXPECT_EQ(XcodeSDK().GetType(), XcodeSDK::unknown);47  EXPECT_EQ(XcodeSDK().GetVersion(), llvm::VersionTuple());48  EXPECT_FALSE(XcodeSDK().GetSysroot());49}50 51TEST(XcodeSDKTest, MergeTest) {52  XcodeSDK sdk("MacOSX.sdk");53  sdk.Merge(XcodeSDK("WatchOS.sdk"));54  // This doesn't make any particular sense and shouldn't happen in practice, we55  // just want to guarantee a well-defined behavior when choosing one56  // SDK to fit all CUs in an lldb::Module.57  // -> The higher number wins.58  EXPECT_EQ(sdk.GetType(), XcodeSDK::watchOS);59  sdk.Merge(XcodeSDK("WatchOS1.1.sdk"));60  EXPECT_EQ(sdk.GetVersion(), llvm::VersionTuple(1, 1));61  sdk.Merge(XcodeSDK("WatchOS2.0.sdk"));62  EXPECT_EQ(sdk.GetVersion(), llvm::VersionTuple(2, 0));63  sdk.Merge(XcodeSDK("WatchOS1.1.Internal.sdk"));64  EXPECT_EQ(sdk.GetVersion(), llvm::VersionTuple(2, 0));65  EXPECT_EQ(sdk.IsAppleInternalSDK(), true);66  XcodeSDK empty;67  empty.Merge(XcodeSDK("MacOSX10.14.Internal.sdk"));68  EXPECT_EQ(empty.GetString(), llvm::StringRef("MacOSX10.14.Internal.sdk"));69  EXPECT_FALSE(empty.GetSysroot());70  empty.Merge(XcodeSDK("MacOSX9.5.Internal.sdk",71                       FileSpec{"/Path/To/MacOSX9.5.Internal.sdk"}));72  EXPECT_FALSE(empty.GetSysroot());73  empty.Merge(XcodeSDK("MacOSX12.5.sdk", FileSpec{"/Path/To/MacOSX12.5.sdk"}));74  EXPECT_EQ(empty.GetSysroot(), FileSpec{"/Path/To/MacOSX12.5.sdk"});75  empty.Merge(XcodeSDK("MacOSX11.5.Internal.sdk",76                       FileSpec{"/Path/To/MacOSX11.5.Internal.sdk"}));77  EXPECT_EQ(empty.GetSysroot(), FileSpec{"/Path/To/MacOSX12.5.Internal.sdk"});78}79 80#ifndef _WIN3281TEST(XcodeSDKTest, SDKSupportsModules) {82  std::string base = "/Applications/Xcode.app/Contents/Developer/Platforms/";83  EXPECT_TRUE(XcodeSDK::SDKSupportsModules(84      XcodeSDK::Type::iPhoneSimulator,85      FileSpec(86          base +87          "iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.0.sdk")));88  EXPECT_TRUE(XcodeSDK::SDKSupportsModules(89      XcodeSDK::Type::iPhoneSimulator,90      FileSpec(base + "iPhoneSimulator.platform/Developer/SDKs/"91                      "iPhoneSimulator12.0.Internal.sdk")));92  EXPECT_FALSE(XcodeSDK::SDKSupportsModules(93      XcodeSDK::Type::iPhoneSimulator,94      FileSpec(95          base +96          "iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.2.sdk")));97  EXPECT_TRUE(XcodeSDK::SDKSupportsModules(98      XcodeSDK::Type::MacOSX,99      FileSpec(base + "MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk")));100  EXPECT_FALSE(XcodeSDK::SDKSupportsModules(101      XcodeSDK::Type::MacOSX,102      FileSpec(base + "MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk")));103}104#endif105 106TEST(XcodeSDKTest, GetCanonicalNameAndConstruct) {107  XcodeSDK::Info info;108  info.type = XcodeSDK::Type::MacOSX;109  EXPECT_EQ("macosx", XcodeSDK::GetCanonicalName(info));110  EXPECT_EQ(XcodeSDK(info).Parse(), info);111 112  info.type = XcodeSDK::Type::iPhoneSimulator;113  EXPECT_EQ("iphonesimulator", XcodeSDK::GetCanonicalName(info));114  EXPECT_EQ(XcodeSDK(info).Parse(), info);115 116  info.type = XcodeSDK::Type::iPhoneOS;117  EXPECT_EQ("iphoneos", XcodeSDK::GetCanonicalName(info));118  EXPECT_EQ(XcodeSDK(info).Parse(), info);119 120  info.type = XcodeSDK::Type::AppleTVSimulator;121  EXPECT_EQ("appletvsimulator", XcodeSDK::GetCanonicalName(info));122  EXPECT_EQ(XcodeSDK(info).Parse(), info);123 124  info.type = XcodeSDK::Type::AppleTVOS;125  EXPECT_EQ("appletvos", XcodeSDK::GetCanonicalName(info));126  EXPECT_EQ(XcodeSDK(info).Parse(), info);127 128  info.type = XcodeSDK::Type::WatchSimulator;129  EXPECT_EQ("watchsimulator", XcodeSDK::GetCanonicalName(info));130  EXPECT_EQ(XcodeSDK(info).Parse(), info);131 132  info.type = XcodeSDK::Type::watchOS;133  EXPECT_EQ("watchos", XcodeSDK::GetCanonicalName(info));134  EXPECT_EQ(XcodeSDK(info).Parse(), info);135 136  info.type = XcodeSDK::Type::XRSimulator;137  EXPECT_EQ("xrsimulator", XcodeSDK::GetCanonicalName(info));138  EXPECT_EQ(XcodeSDK(info).Parse(), info);139 140  info.type = XcodeSDK::Type::XROS;141  EXPECT_EQ("xros", XcodeSDK::GetCanonicalName(info));142  EXPECT_EQ(XcodeSDK(info).Parse(), info);143 144  info.type = XcodeSDK::Type::Linux;145  EXPECT_EQ("linux", XcodeSDK::GetCanonicalName(info));146  EXPECT_EQ(XcodeSDK(info).Parse(), info);147 148  info.type = XcodeSDK::Type::unknown;149  EXPECT_EQ("", XcodeSDK::GetCanonicalName(info));150  EXPECT_EQ(XcodeSDK(info).Parse(), info);151 152  info.internal = true;153  info.type = XcodeSDK::Type::MacOSX;154  EXPECT_EQ("macosx.internal", XcodeSDK::GetCanonicalName(info));155  EXPECT_EQ(XcodeSDK(info).Parse(), info);156 157  info.type = XcodeSDK::Type::iPhoneSimulator;158  EXPECT_EQ("iphonesimulator.internal", XcodeSDK::GetCanonicalName(info));159  EXPECT_EQ(XcodeSDK(info).Parse(), info);160 161  info.type = XcodeSDK::Type::iPhoneOS;162  EXPECT_EQ("iphoneos.internal", XcodeSDK::GetCanonicalName(info));163  EXPECT_EQ(XcodeSDK(info).Parse(), info);164 165  info.type = XcodeSDK::Type::AppleTVSimulator;166  EXPECT_EQ("appletvsimulator.internal", XcodeSDK::GetCanonicalName(info));167  EXPECT_EQ(XcodeSDK(info).Parse(), info);168 169  info.type = XcodeSDK::Type::AppleTVOS;170  EXPECT_EQ("appletvos.internal", XcodeSDK::GetCanonicalName(info));171  EXPECT_EQ(XcodeSDK(info).Parse(), info);172 173  info.type = XcodeSDK::Type::WatchSimulator;174  EXPECT_EQ("watchsimulator.internal", XcodeSDK::GetCanonicalName(info));175  EXPECT_EQ(XcodeSDK(info).Parse(), info);176 177  info.type = XcodeSDK::Type::watchOS;178  EXPECT_EQ("watchos.internal", XcodeSDK::GetCanonicalName(info));179  EXPECT_EQ(XcodeSDK(info).Parse(), info);180 181  info.type = XcodeSDK::Type::XRSimulator;182  EXPECT_EQ("xrsimulator.internal", XcodeSDK::GetCanonicalName(info));183  EXPECT_EQ(XcodeSDK(info).Parse(), info);184 185  info.type = XcodeSDK::Type::XROS;186  EXPECT_EQ("xros.internal", XcodeSDK::GetCanonicalName(info));187  EXPECT_EQ(XcodeSDK(info).Parse(), info);188  info.type = XcodeSDK::Type::MacOSX;189  info.version = llvm::VersionTuple(10, 9);190  EXPECT_EQ("macosx10.9.internal", XcodeSDK::GetCanonicalName(info));191  EXPECT_EQ(XcodeSDK(info).Parse(), info);192 193  info.type = XcodeSDK::Type::iPhoneOS;194  info.version = llvm::VersionTuple(7, 0);195  EXPECT_EQ("iphoneos7.0.internal", XcodeSDK::GetCanonicalName(info));196  EXPECT_EQ(XcodeSDK(info).Parse(), info);197}198 199TEST(XcodeSDKTest, GetSDKTypeForTriple) {200  EXPECT_EQ(201      XcodeSDK::GetSDKTypeForTriple(llvm::Triple("x86_64-apple-macosx10.14")),202      XcodeSDK::Type::MacOSX);203  EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("x86_64-apple-darwin")),204            XcodeSDK::Type::MacOSX);205  EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(206                llvm::Triple("x86_64-apple-ios13.4-simulator")),207            XcodeSDK::Type::iPhoneSimulator);208  EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("arm64-apple-ios13.4")),209            XcodeSDK::Type::iPhoneOS);210  EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(211                llvm::Triple("x86_64-apple-ios13.4-macabi")),212            XcodeSDK::Type::MacOSX);213  EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(214                llvm::Triple("x86_64-apple-tvos-simulator")),215            XcodeSDK::Type::AppleTVSimulator);216  EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("arm64-apple-tvos")),217            XcodeSDK::Type::AppleTVOS);218  EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(219                llvm::Triple("x86_64-apple-watchos-simulator")),220            XcodeSDK::Type::WatchSimulator);221  EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("arm64-apple-watchos")),222            XcodeSDK::Type::watchOS);223  EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(224                llvm::Triple("arm64e-apple-xros-simulator")),225            XcodeSDK::Type::XRSimulator);226  EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("arm64e-apple-xros")),227            XcodeSDK::Type::XROS);228  EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("x86_64-unknown-linux")),229            XcodeSDK::Type::Linux);230  EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("i386-unknown-netbsd")),231            XcodeSDK::Type::unknown);232}233 234TEST(XcodeSDKTest, FindXcodeContentsDirectoryInPath) {235  std::string standard =236      "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/"237      "Developer/SDKs/MacOSX.sdk";238  EXPECT_EQ("/Applications/Xcode.app/Contents",239            XcodeSDK::FindXcodeContentsDirectoryInPath(standard));240 241  std::string standard_version =242      "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/"243      "Developer/SDKs/MacOSX10.15.sdk";244  EXPECT_EQ("/Applications/Xcode.app/Contents",245            XcodeSDK::FindXcodeContentsDirectoryInPath(standard_version));246 247  std::string beta = "/Applications/Xcode-beta.app/Contents/Developer/"248                     "Platforms/MacOSX.platform/"249                     "Developer/SDKs/MacOSX10.15.sdk";250  EXPECT_EQ("/Applications/Xcode-beta.app/Contents",251            XcodeSDK::FindXcodeContentsDirectoryInPath(beta));252 253  std::string no_app =254      "/Applications/Xcode/Contents/Developer/Platforms/MacOSX.platform/"255      "Developer/SDKs/MacOSX10.15.sdk";256  EXPECT_EQ("", XcodeSDK::FindXcodeContentsDirectoryInPath(no_app));257 258  std::string no_contents =259      "/Applications/Xcode.app/Developer/Platforms/MacOSX.platform/"260      "Developer/SDKs/MacOSX10.15.sdk";261  EXPECT_EQ("", XcodeSDK::FindXcodeContentsDirectoryInPath(no_contents));262 263  std::string no_capitalization =264      "/Applications/Xcode.app/contents/Developer/Platforms/MacOSX.platform/"265      "Developer/SDKs/MacOSX10.15.sdk";266  EXPECT_EQ("", XcodeSDK::FindXcodeContentsDirectoryInPath(no_capitalization));267}268