forked from OSchip/llvm-project
242 lines
10 KiB
C++
242 lines
10 KiB
C++
//===-- XcodeSDKTest.cpp --------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
#include "lldb/Utility/FileSpec.h"
|
|
#include "lldb/Utility/XcodeSDK.h"
|
|
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/ADT/Triple.h"
|
|
|
|
#include <tuple>
|
|
|
|
using namespace lldb_private;
|
|
|
|
TEST(XcodeSDKTest, ParseTest) {
|
|
EXPECT_EQ(XcodeSDK::GetAnyMacOS().GetType(), XcodeSDK::MacOSX);
|
|
EXPECT_EQ(XcodeSDK("MacOSX.sdk").GetType(), XcodeSDK::MacOSX);
|
|
EXPECT_EQ(XcodeSDK("iPhoneSimulator.sdk").GetType(), XcodeSDK::iPhoneSimulator);
|
|
EXPECT_EQ(XcodeSDK("iPhoneOS.sdk").GetType(), XcodeSDK::iPhoneOS);
|
|
EXPECT_EQ(XcodeSDK("AppleTVSimulator.sdk").GetType(), XcodeSDK::AppleTVSimulator);
|
|
EXPECT_EQ(XcodeSDK("AppleTVOS.sdk").GetType(), XcodeSDK::AppleTVOS);
|
|
EXPECT_EQ(XcodeSDK("WatchSimulator.sdk").GetType(), XcodeSDK::WatchSimulator);
|
|
EXPECT_EQ(XcodeSDK("WatchOS.sdk").GetType(), XcodeSDK::watchOS);
|
|
EXPECT_EQ(XcodeSDK("Linux.sdk").GetType(), XcodeSDK::Linux);
|
|
EXPECT_EQ(XcodeSDK("MacOSX.sdk").GetVersion(), llvm::VersionTuple());
|
|
EXPECT_EQ(XcodeSDK("MacOSX10.9.sdk").GetVersion(), llvm::VersionTuple(10, 9));
|
|
EXPECT_EQ(XcodeSDK("MacOSX10.15.4.sdk").GetVersion(), llvm::VersionTuple(10, 15));
|
|
EXPECT_EQ(XcodeSDK("MacOSX.sdk").IsAppleInternalSDK(), false);
|
|
EXPECT_EQ(XcodeSDK("MacOSX10.15.Internal.sdk").GetType(), XcodeSDK::MacOSX);
|
|
EXPECT_EQ(XcodeSDK("MacOSX10.15.Internal.sdk").GetVersion(),
|
|
llvm::VersionTuple(10, 15));
|
|
EXPECT_EQ(XcodeSDK("MacOSX10.15.Internal.sdk").IsAppleInternalSDK(), true);
|
|
EXPECT_EQ(XcodeSDK().GetType(), XcodeSDK::unknown);
|
|
EXPECT_EQ(XcodeSDK().GetVersion(), llvm::VersionTuple());
|
|
}
|
|
|
|
TEST(XcodeSDKTest, MergeTest) {
|
|
XcodeSDK sdk("MacOSX.sdk");
|
|
sdk.Merge(XcodeSDK("WatchOS.sdk"));
|
|
// This doesn't make any particular sense and shouldn't happen in practice, we
|
|
// just want to guarantee a well-defined behavior when choosing one
|
|
// SDK to fit all CUs in an lldb::Module.
|
|
// -> The higher number wins.
|
|
EXPECT_EQ(sdk.GetType(), XcodeSDK::watchOS);
|
|
sdk.Merge(XcodeSDK("WatchOS1.1.sdk"));
|
|
EXPECT_EQ(sdk.GetVersion(), llvm::VersionTuple(1, 1));
|
|
sdk.Merge(XcodeSDK("WatchOS2.0.sdk"));
|
|
EXPECT_EQ(sdk.GetVersion(), llvm::VersionTuple(2, 0));
|
|
sdk.Merge(XcodeSDK("WatchOS1.1.Internal.sdk"));
|
|
EXPECT_EQ(sdk.GetVersion(), llvm::VersionTuple(2, 0));
|
|
EXPECT_EQ(sdk.IsAppleInternalSDK(), true);
|
|
XcodeSDK empty;
|
|
empty.Merge(XcodeSDK("MacOSX10.14.Internal.sdk"));
|
|
EXPECT_EQ(empty.GetString(), llvm::StringRef("MacOSX10.14.Internal.sdk"));
|
|
}
|
|
|
|
#ifndef _WIN32
|
|
TEST(XcodeSDKTest, SDKSupportsModules) {
|
|
std::string base = "/Applications/Xcode.app/Contents/Developer/Platforms/";
|
|
EXPECT_TRUE(XcodeSDK::SDKSupportsModules(
|
|
XcodeSDK::Type::iPhoneSimulator,
|
|
FileSpec(
|
|
base +
|
|
"iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.0.sdk")));
|
|
EXPECT_TRUE(XcodeSDK::SDKSupportsModules(
|
|
XcodeSDK::Type::iPhoneSimulator,
|
|
FileSpec(base + "iPhoneSimulator.platform/Developer/SDKs/"
|
|
"iPhoneSimulator12.0.Internal.sdk")));
|
|
EXPECT_FALSE(XcodeSDK::SDKSupportsModules(
|
|
XcodeSDK::Type::iPhoneSimulator,
|
|
FileSpec(
|
|
base +
|
|
"iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.2.sdk")));
|
|
EXPECT_TRUE(XcodeSDK::SDKSupportsModules(
|
|
XcodeSDK::Type::MacOSX,
|
|
FileSpec(base + "MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk")));
|
|
EXPECT_FALSE(XcodeSDK::SDKSupportsModules(
|
|
XcodeSDK::Type::MacOSX,
|
|
FileSpec(base + "MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk")));
|
|
}
|
|
#endif
|
|
|
|
TEST(XcodeSDKTest, SDKSupportsSwift) {
|
|
EXPECT_TRUE(XcodeSDK("iPhoneSimulator12.0.sdk").SupportsSwift());
|
|
EXPECT_TRUE(XcodeSDK("iPhoneSimulator12.0.Internal.sdk").SupportsSwift());
|
|
EXPECT_FALSE(XcodeSDK("iPhoneSimulator7.2.sdk").SupportsSwift());
|
|
EXPECT_TRUE(XcodeSDK("MacOSX10.10.sdk").SupportsSwift());
|
|
EXPECT_FALSE(XcodeSDK("MacOSX10.9.sdk").SupportsSwift());
|
|
EXPECT_TRUE(XcodeSDK("Linux.sdk").SupportsSwift());
|
|
EXPECT_TRUE(XcodeSDK("MacOSX.sdk").SupportsSwift());
|
|
EXPECT_FALSE(XcodeSDK("EverythingElse.sdk").SupportsSwift());
|
|
}
|
|
|
|
TEST(XcodeSDKTest, GetCanonicalNameAndConstruct) {
|
|
XcodeSDK::Info info;
|
|
info.type = XcodeSDK::Type::MacOSX;
|
|
EXPECT_EQ("macosx", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::iPhoneSimulator;
|
|
EXPECT_EQ("iphonesimulator", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::iPhoneOS;
|
|
EXPECT_EQ("iphoneos", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::AppleTVSimulator;
|
|
EXPECT_EQ("appletvsimulator", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::AppleTVOS;
|
|
EXPECT_EQ("appletvos", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::WatchSimulator;
|
|
EXPECT_EQ("watchsimulator", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::watchOS;
|
|
EXPECT_EQ("watchos", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::Linux;
|
|
EXPECT_EQ("linux", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::unknown;
|
|
EXPECT_EQ("", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.internal = true;
|
|
info.type = XcodeSDK::Type::MacOSX;
|
|
EXPECT_EQ("macosx.internal", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::iPhoneSimulator;
|
|
EXPECT_EQ("iphonesimulator.internal", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::iPhoneOS;
|
|
EXPECT_EQ("iphoneos.internal", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::AppleTVSimulator;
|
|
EXPECT_EQ("appletvsimulator.internal", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::AppleTVOS;
|
|
EXPECT_EQ("appletvos.internal", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::WatchSimulator;
|
|
EXPECT_EQ("watchsimulator.internal", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::watchOS;
|
|
EXPECT_EQ("watchos.internal", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::MacOSX;
|
|
info.version = llvm::VersionTuple(10, 9);
|
|
EXPECT_EQ("macosx10.9.internal", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
|
|
info.type = XcodeSDK::Type::iPhoneOS;
|
|
info.version = llvm::VersionTuple(7, 0);
|
|
EXPECT_EQ("iphoneos7.0.internal", XcodeSDK::GetCanonicalName(info));
|
|
EXPECT_EQ(XcodeSDK(info).Parse(), info);
|
|
}
|
|
|
|
TEST(XcodeSDKTest, GetSDKTypeForTriple) {
|
|
EXPECT_EQ(
|
|
XcodeSDK::GetSDKTypeForTriple(llvm::Triple("x86_64-apple-macosx10.14")),
|
|
XcodeSDK::Type::MacOSX);
|
|
EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("x86_64-apple-darwin")),
|
|
XcodeSDK::Type::MacOSX);
|
|
EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(
|
|
llvm::Triple("x86_64-apple-ios13.4-simulator")),
|
|
XcodeSDK::Type::iPhoneSimulator);
|
|
EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("arm64-apple-ios13.4")),
|
|
XcodeSDK::Type::iPhoneOS);
|
|
EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(
|
|
llvm::Triple("x86_64-apple-ios13.4-macabi")),
|
|
XcodeSDK::Type::MacOSX);
|
|
EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(
|
|
llvm::Triple("x86_64-apple-tvos-simulator")),
|
|
XcodeSDK::Type::AppleTVSimulator);
|
|
EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("arm64-apple-tvos")),
|
|
XcodeSDK::Type::AppleTVOS);
|
|
EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(
|
|
llvm::Triple("x86_64-apple-watchos-simulator")),
|
|
XcodeSDK::Type::WatchSimulator);
|
|
EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("arm64-apple-watchos")),
|
|
XcodeSDK::Type::watchOS);
|
|
EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("x86_64-unknown-linux")),
|
|
XcodeSDK::Type::Linux);
|
|
EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("i386-unknown-netbsd")),
|
|
XcodeSDK::Type::unknown);
|
|
}
|
|
|
|
TEST(XcodeSDKTest, FindXcodeContentsDirectoryInPath) {
|
|
std::string standard =
|
|
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/"
|
|
"Developer/SDKs/MacOSX.sdk";
|
|
EXPECT_EQ("/Applications/Xcode.app/Contents",
|
|
XcodeSDK::FindXcodeContentsDirectoryInPath(standard));
|
|
|
|
std::string standard_version =
|
|
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/"
|
|
"Developer/SDKs/MacOSX10.15.sdk";
|
|
EXPECT_EQ("/Applications/Xcode.app/Contents",
|
|
XcodeSDK::FindXcodeContentsDirectoryInPath(standard_version));
|
|
|
|
std::string beta = "/Applications/Xcode-beta.app/Contents/Developer/"
|
|
"Platforms/MacOSX.platform/"
|
|
"Developer/SDKs/MacOSX10.15.sdk";
|
|
EXPECT_EQ("/Applications/Xcode-beta.app/Contents",
|
|
XcodeSDK::FindXcodeContentsDirectoryInPath(beta));
|
|
|
|
std::string no_app =
|
|
"/Applications/Xcode/Contents/Developer/Platforms/MacOSX.platform/"
|
|
"Developer/SDKs/MacOSX10.15.sdk";
|
|
EXPECT_EQ("", XcodeSDK::FindXcodeContentsDirectoryInPath(no_app));
|
|
|
|
std::string no_contents =
|
|
"/Applications/Xcode.app/Developer/Platforms/MacOSX.platform/"
|
|
"Developer/SDKs/MacOSX10.15.sdk";
|
|
EXPECT_EQ("", XcodeSDK::FindXcodeContentsDirectoryInPath(no_contents));
|
|
|
|
std::string no_capitalization =
|
|
"/Applications/Xcode.app/contents/Developer/Platforms/MacOSX.platform/"
|
|
"Developer/SDKs/MacOSX10.15.sdk";
|
|
EXPECT_EQ("", XcodeSDK::FindXcodeContentsDirectoryInPath(no_capitalization));
|
|
}
|