1//===-- PlatformAppleSimulatorTest.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 "Plugins/Platform/MacOSX/PlatformAppleSimulator.h"
12#include "Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h"
13#include "Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h"
14#include "Plugins/Platform/MacOSX/PlatformRemoteiOS.h"
15#include "TestingSupport/SubsystemRAII.h"
16#include "lldb/Host/FileSystem.h"
17#include "lldb/Host/HostInfo.h"
18#include "lldb/Target/Platform.h"
19
20using namespace lldb;
21using namespace lldb_private;
22
23class PlatformAppleSimulatorTest : public ::testing::Test {
24 SubsystemRAII<FileSystem, HostInfo, PlatformAppleSimulator, PlatformRemoteiOS,
25 PlatformRemoteAppleTV, PlatformRemoteAppleWatch>
26 subsystems;
27};
28
29#ifdef __APPLE__
30
31static void testSimPlatformArchHasSimEnvironment(llvm::StringRef name) {
32 auto platform_sp = Platform::Create(name);
33 ASSERT_TRUE(platform_sp);
34 int num_arches = 0;
35
36 for (auto arch : platform_sp->GetSupportedArchitectures({})) {
37 EXPECT_EQ(arch.GetTriple().getEnvironment(), llvm::Triple::Simulator);
38 num_arches++;
39 }
40
41 EXPECT_GT(num_arches, 0);
42}
43
44TEST_F(PlatformAppleSimulatorTest, TestSimHasSimEnvionament) {
45 testSimPlatformArchHasSimEnvironment("ios-simulator");
46 testSimPlatformArchHasSimEnvironment("tvos-simulator");
47 testSimPlatformArchHasSimEnvironment("watchos-simulator");
48}
49
50TEST_F(PlatformAppleSimulatorTest, TestHostPlatformToSim) {
51 static const ArchSpec platform_arch(
52 HostInfo::GetArchitecture(HostInfo::eArchKindDefault));
53
54 const llvm::Triple::OSType sim_platforms[] = {
55 llvm::Triple::IOS,
56 llvm::Triple::TvOS,
57 llvm::Triple::WatchOS,
58 };
59
60 for (auto sim : sim_platforms) {
61 PlatformList list;
62 ArchSpec arch = platform_arch;
63 arch.GetTriple().setOS(sim);
64 arch.GetTriple().setEnvironment(llvm::Triple::Simulator);
65
66 auto platform_sp = list.GetOrCreate(arch, {}, nullptr);
67 EXPECT_TRUE(platform_sp);
68 }
69}
70
71TEST_F(PlatformAppleSimulatorTest, TestPlatformSelectionOrder) {
72 static const ArchSpec platform_arch(
73 HostInfo::GetArchitecture(HostInfo::eArchKindDefault));
74
75 const llvm::Triple::OSType sim_platforms[] = {
76 llvm::Triple::IOS,
77 llvm::Triple::TvOS,
78 llvm::Triple::WatchOS,
79 };
80
81 PlatformList list;
82 list.GetOrCreate("remote-ios");
83 list.GetOrCreate("remote-tvos");
84 list.GetOrCreate("remote-watchos");
85
86 for (auto sim : sim_platforms) {
87 ArchSpec arch = platform_arch;
88 arch.GetTriple().setOS(sim);
89 arch.GetTriple().setEnvironment(llvm::Triple::Simulator);
90
91 Status error;
92 auto platform_sp = list.GetOrCreate(arch, {}, nullptr, error);
93 EXPECT_TRUE(platform_sp);
94 EXPECT_TRUE(platform_sp->GetName().contains("simulator"));
95 }
96}
97
98#endif
99

source code of lldb/unittests/Platform/PlatformAppleSimulatorTest.cpp