Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / lldb / unittests / Host / HostInfoTest.cpp
blob5c53b96b853c8dc0d4685a3abbf03d7fd9c7a3a6
1 //===-- HostInfoTest.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 //===----------------------------------------------------------------------===//
9 #include "lldb/Host/HostInfo.h"
10 #include "TestingSupport/SubsystemRAII.h"
11 #include "TestingSupport/TestUtilities.h"
12 #include "lldb/Host/FileSystem.h"
13 #include "lldb/lldb-defines.h"
14 #include "llvm/TargetParser/Host.h"
15 #include "gtest/gtest.h"
17 using namespace lldb_private;
18 using namespace llvm;
20 namespace {
21 class HostInfoTest : public ::testing::Test {
22 SubsystemRAII<FileSystem, HostInfo> subsystems;
24 } // namespace
26 TEST_F(HostInfoTest, GetAugmentedArchSpec) {
27 // Fully specified triple should not be changed.
28 ArchSpec spec = HostInfo::GetAugmentedArchSpec("x86_64-pc-linux-gnu");
29 EXPECT_EQ(spec.GetTriple().getTriple(), "x86_64-pc-linux-gnu");
31 // Same goes if we specify at least one of (os, vendor, env).
32 spec = HostInfo::GetAugmentedArchSpec("x86_64-pc");
33 EXPECT_EQ(spec.GetTriple().getTriple(), "x86_64-pc");
35 // But if we specify only an arch, we should fill in the rest from the host.
36 spec = HostInfo::GetAugmentedArchSpec("x86_64");
37 Triple triple(sys::getDefaultTargetTriple());
38 EXPECT_EQ(spec.GetTriple().getArch(), Triple::x86_64);
39 EXPECT_EQ(spec.GetTriple().getOS(), triple.getOS());
40 EXPECT_EQ(spec.GetTriple().getVendor(), triple.getVendor());
41 EXPECT_EQ(spec.GetTriple().getEnvironment(), triple.getEnvironment());
43 // Test LLDB_ARCH_DEFAULT
44 EXPECT_EQ(HostInfo::GetAugmentedArchSpec(LLDB_ARCH_DEFAULT).GetTriple(),
45 HostInfo::GetArchitecture(HostInfo::eArchKindDefault).GetTriple());
46 EXPECT_NE(
47 HostInfo::GetAugmentedArchSpec("armv7k").GetTriple().getEnvironmentName(),
48 "unknown");
51 TEST_F(HostInfoTest, GetHostname) {
52 // Check non-empty string input works correctly.
53 std::string s("abc");
54 EXPECT_TRUE(HostInfo::GetHostname(s));
57 #if defined(__APPLE__)
58 TEST_F(HostInfoTest, GetXcodeSDK) {
59 auto get_sdk = [](std::string sdk, bool error = false) -> llvm::StringRef {
60 auto sdk_path_or_err =
61 HostInfo::GetSDKRoot(HostInfo::SDKOptions{XcodeSDK(std::move(sdk))});
62 if (!error) {
63 EXPECT_TRUE((bool)sdk_path_or_err);
64 return *sdk_path_or_err;
66 EXPECT_FALSE((bool)sdk_path_or_err);
67 llvm::consumeError(sdk_path_or_err.takeError());
68 return {};
70 EXPECT_FALSE(get_sdk("MacOSX.sdk").empty());
71 // These are expected to fall back to an available version.
72 EXPECT_FALSE(get_sdk("MacOSX9999.sdk").empty());
73 // This is expected to fail.
74 EXPECT_TRUE(get_sdk("CeciNestPasUnOS.sdk", true).empty());
77 TEST_F(HostInfoTest, FindSDKTool) {
78 auto find_tool = [](std::string sdk, llvm::StringRef tool,
79 bool error = false) -> llvm::StringRef {
80 auto sdk_path_or_err =
81 HostInfo::FindSDKTool(XcodeSDK(std::move(sdk)), tool);
82 if (!error) {
83 EXPECT_TRUE((bool)sdk_path_or_err);
84 return *sdk_path_or_err;
86 EXPECT_FALSE((bool)sdk_path_or_err);
87 llvm::consumeError(sdk_path_or_err.takeError());
88 return {};
90 EXPECT_FALSE(find_tool("MacOSX.sdk", "clang").empty());
91 EXPECT_TRUE(find_tool("MacOSX.sdk", "CeciNestPasUnOutil").empty());
93 #endif
95 TEST(HostInfoTestInitialization, InitTwice) {
96 llvm::VersionTuple Version;
98 SubsystemRAII<FileSystem, HostInfo> subsystems;
99 Version = HostInfo::GetOSVersion();
103 SubsystemRAII<FileSystem, HostInfo> subsystems;
104 EXPECT_EQ(Version, HostInfo::GetOSVersion());