1*cf521e78SRaphael Isemann //===-- TestTypeSystem.cpp -------------------------------------------===//
2*cf521e78SRaphael Isemann //
3*cf521e78SRaphael Isemann // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*cf521e78SRaphael Isemann // See https://llvm.org/LICENSE.txt for license information.
5*cf521e78SRaphael Isemann // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*cf521e78SRaphael Isemann //
7*cf521e78SRaphael Isemann //===----------------------------------------------------------------------===//
8*cf521e78SRaphael Isemann
9*cf521e78SRaphael Isemann #include "TestingSupport/SubsystemRAII.h"
10*cf521e78SRaphael Isemann #include "lldb/Core/Module.h"
11*cf521e78SRaphael Isemann #include "lldb/Host/FileSystem.h"
12*cf521e78SRaphael Isemann #include "lldb/Host/HostInfo.h"
13*cf521e78SRaphael Isemann #include "lldb/Symbol/TypeSystem.h"
14*cf521e78SRaphael Isemann #include "gtest/gtest.h"
15*cf521e78SRaphael Isemann
16*cf521e78SRaphael Isemann using namespace lldb;
17*cf521e78SRaphael Isemann using namespace lldb_private;
18*cf521e78SRaphael Isemann
19*cf521e78SRaphael Isemann class TestTypeSystemMap : public testing::Test {
20*cf521e78SRaphael Isemann public:
21*cf521e78SRaphael Isemann SubsystemRAII<FileSystem, HostInfo> subsystems;
22*cf521e78SRaphael Isemann };
23*cf521e78SRaphael Isemann
TEST_F(TestTypeSystemMap,GetTypeSystemForLanguageWithInvalidModule)24*cf521e78SRaphael Isemann TEST_F(TestTypeSystemMap, GetTypeSystemForLanguageWithInvalidModule) {
25*cf521e78SRaphael Isemann // GetTypeSystemForLanguage called with an invalid Module.
26*cf521e78SRaphael Isemann TypeSystemMap map;
27*cf521e78SRaphael Isemann Module module{ModuleSpec()};
28*cf521e78SRaphael Isemann EXPECT_THAT_EXPECTED(
29*cf521e78SRaphael Isemann map.GetTypeSystemForLanguage(eLanguageTypeUnknown, &module,
30*cf521e78SRaphael Isemann /*can_create=*/true),
31*cf521e78SRaphael Isemann llvm::FailedWithMessage("TypeSystem for language unknown doesn't exist"));
32*cf521e78SRaphael Isemann
33*cf521e78SRaphael Isemann EXPECT_THAT_EXPECTED(
34*cf521e78SRaphael Isemann map.GetTypeSystemForLanguage(eLanguageTypeUnknown, &module,
35*cf521e78SRaphael Isemann /*can_create=*/false),
36*cf521e78SRaphael Isemann llvm::FailedWithMessage("TypeSystem for language unknown doesn't exist"));
37*cf521e78SRaphael Isemann
38*cf521e78SRaphael Isemann EXPECT_THAT_EXPECTED(
39*cf521e78SRaphael Isemann map.GetTypeSystemForLanguage(eLanguageTypeC, &module,
40*cf521e78SRaphael Isemann /*can_create=*/true),
41*cf521e78SRaphael Isemann llvm::FailedWithMessage("TypeSystem for language c doesn't exist"));
42*cf521e78SRaphael Isemann EXPECT_THAT_EXPECTED(
43*cf521e78SRaphael Isemann map.GetTypeSystemForLanguage(eLanguageTypeC, &module,
44*cf521e78SRaphael Isemann /*can_create=*/false),
45*cf521e78SRaphael Isemann llvm::FailedWithMessage("TypeSystem for language c doesn't exist"));
46*cf521e78SRaphael Isemann }
47*cf521e78SRaphael Isemann
TEST_F(TestTypeSystemMap,GetTypeSystemForLanguageWithNoModule)48*cf521e78SRaphael Isemann TEST_F(TestTypeSystemMap, GetTypeSystemForLanguageWithNoModule) {
49*cf521e78SRaphael Isemann // GetTypeSystemForLanguage called with no Module.
50*cf521e78SRaphael Isemann TypeSystemMap map;
51*cf521e78SRaphael Isemann Module *module = nullptr;
52*cf521e78SRaphael Isemann EXPECT_THAT_EXPECTED(
53*cf521e78SRaphael Isemann map.GetTypeSystemForLanguage(eLanguageTypeUnknown, module,
54*cf521e78SRaphael Isemann /*can_create=*/true),
55*cf521e78SRaphael Isemann llvm::FailedWithMessage("TypeSystem for language unknown doesn't exist"));
56*cf521e78SRaphael Isemann
57*cf521e78SRaphael Isemann EXPECT_THAT_EXPECTED(
58*cf521e78SRaphael Isemann map.GetTypeSystemForLanguage(eLanguageTypeUnknown, module,
59*cf521e78SRaphael Isemann /*can_create=*/false),
60*cf521e78SRaphael Isemann llvm::FailedWithMessage("TypeSystem for language unknown doesn't exist"));
61*cf521e78SRaphael Isemann
62*cf521e78SRaphael Isemann EXPECT_THAT_EXPECTED(
63*cf521e78SRaphael Isemann map.GetTypeSystemForLanguage(eLanguageTypeC, module, /*can_create=*/true),
64*cf521e78SRaphael Isemann llvm::FailedWithMessage("TypeSystem for language c doesn't exist"));
65*cf521e78SRaphael Isemann EXPECT_THAT_EXPECTED(
66*cf521e78SRaphael Isemann map.GetTypeSystemForLanguage(eLanguageTypeC, module,
67*cf521e78SRaphael Isemann /*can_create=*/false),
68*cf521e78SRaphael Isemann llvm::FailedWithMessage("TypeSystem for language c doesn't exist"));
69*cf521e78SRaphael Isemann }
70*cf521e78SRaphael Isemann
TEST_F(TestTypeSystemMap,GetTypeSystemForLanguageWithNoTarget)71*cf521e78SRaphael Isemann TEST_F(TestTypeSystemMap, GetTypeSystemForLanguageWithNoTarget) {
72*cf521e78SRaphael Isemann // GetTypeSystemForLanguage called with no Target.
73*cf521e78SRaphael Isemann TypeSystemMap map;
74*cf521e78SRaphael Isemann Target *target = nullptr;
75*cf521e78SRaphael Isemann EXPECT_THAT_EXPECTED(
76*cf521e78SRaphael Isemann map.GetTypeSystemForLanguage(eLanguageTypeUnknown, target,
77*cf521e78SRaphael Isemann /*can_create=*/true),
78*cf521e78SRaphael Isemann llvm::FailedWithMessage("TypeSystem for language unknown doesn't exist"));
79*cf521e78SRaphael Isemann
80*cf521e78SRaphael Isemann EXPECT_THAT_EXPECTED(
81*cf521e78SRaphael Isemann map.GetTypeSystemForLanguage(eLanguageTypeUnknown, target,
82*cf521e78SRaphael Isemann /*can_create=*/false),
83*cf521e78SRaphael Isemann llvm::FailedWithMessage("TypeSystem for language unknown doesn't exist"));
84*cf521e78SRaphael Isemann
85*cf521e78SRaphael Isemann EXPECT_THAT_EXPECTED(
86*cf521e78SRaphael Isemann map.GetTypeSystemForLanguage(eLanguageTypeC, target, /*can_create=*/true),
87*cf521e78SRaphael Isemann llvm::FailedWithMessage("TypeSystem for language c doesn't exist"));
88*cf521e78SRaphael Isemann EXPECT_THAT_EXPECTED(
89*cf521e78SRaphael Isemann map.GetTypeSystemForLanguage(eLanguageTypeC, target,
90*cf521e78SRaphael Isemann /*can_create=*/false),
91*cf521e78SRaphael Isemann llvm::FailedWithMessage("TypeSystem for language c doesn't exist"));
92*cf521e78SRaphael Isemann }
93