Index: lldb/unittests/Symbol/CMakeLists.txt =================================================================== --- lldb/unittests/Symbol/CMakeLists.txt +++ lldb/unittests/Symbol/CMakeLists.txt @@ -1,6 +1,7 @@ add_lldb_unittest(SymbolTests LocateSymbolFileTest.cpp PostfixExpressionTest.cpp + TestTypeSystem.cpp TestTypeSystemClang.cpp TestClangASTImporter.cpp TestDWARFCallFrameInfo.cpp Index: lldb/unittests/Symbol/TestTypeSystem.cpp =================================================================== --- /dev/null +++ lldb/unittests/Symbol/TestTypeSystem.cpp @@ -0,0 +1,92 @@ +//===-- TestTypeSystem.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 "TestingSupport/SubsystemRAII.h" +#include "lldb/Core/Module.h" +#include "lldb/Host/FileSystem.h" +#include "lldb/Host/HostInfo.h" +#include "lldb/Symbol/TypeSystem.h" +#include "gtest/gtest.h" + +using namespace lldb; +using namespace lldb_private; + +class TestTypeSystemMap : public testing::Test { +public: + SubsystemRAII subsystems; +}; + +TEST_F(TestTypeSystemMap, GetTypeSystemForLanguageWithInvalidModule) { + // GetTypeSystemForLanguage called with an invalid Module. + TypeSystemMap map; + Module module{ModuleSpec()}; + EXPECT_THAT_EXPECTED( + map.GetTypeSystemForLanguage(eLanguageTypeUnknown, &module, + /*can_create=*/true), + llvm::FailedWithMessage("TypeSystem for language unknown doesn't exist")); + + EXPECT_THAT_EXPECTED( + map.GetTypeSystemForLanguage(eLanguageTypeUnknown, &module, + /*can_create=*/false), + llvm::FailedWithMessage("TypeSystem for language unknown doesn't exist")); + + EXPECT_THAT_EXPECTED( + map.GetTypeSystemForLanguage(eLanguageTypeC, &module, + /*can_create=*/true), + llvm::FailedWithMessage("TypeSystem for language c doesn't exist")); + EXPECT_THAT_EXPECTED( + map.GetTypeSystemForLanguage(eLanguageTypeC, &module, + /*can_create=*/false), + llvm::FailedWithMessage("TypeSystem for language c doesn't exist")); +} + +TEST_F(TestTypeSystemMap, GetTypeSystemForLanguageWithNoModule) { + // GetTypeSystemForLanguage called with no Module. + TypeSystemMap map; + Module *module = nullptr; + EXPECT_THAT_EXPECTED( + map.GetTypeSystemForLanguage(eLanguageTypeUnknown, module, + /*can_create=*/true), + llvm::FailedWithMessage("TypeSystem for language unknown doesn't exist")); + + EXPECT_THAT_EXPECTED( + map.GetTypeSystemForLanguage(eLanguageTypeUnknown, module, + /*can_create=*/false), + llvm::FailedWithMessage("TypeSystem for language unknown doesn't exist")); + + EXPECT_THAT_EXPECTED( + map.GetTypeSystemForLanguage(eLanguageTypeC, module, /*can_create=*/true), + llvm::FailedWithMessage("TypeSystem for language c doesn't exist")); + EXPECT_THAT_EXPECTED( + map.GetTypeSystemForLanguage(eLanguageTypeC, module, + /*can_create=*/false), + llvm::FailedWithMessage("TypeSystem for language c doesn't exist")); +} + +TEST_F(TestTypeSystemMap, GetTypeSystemForLanguageWithNoTarget) { + // GetTypeSystemForLanguage called with no Target. + TypeSystemMap map; + Target *target = nullptr; + EXPECT_THAT_EXPECTED( + map.GetTypeSystemForLanguage(eLanguageTypeUnknown, target, + /*can_create=*/true), + llvm::FailedWithMessage("TypeSystem for language unknown doesn't exist")); + + EXPECT_THAT_EXPECTED( + map.GetTypeSystemForLanguage(eLanguageTypeUnknown, target, + /*can_create=*/false), + llvm::FailedWithMessage("TypeSystem for language unknown doesn't exist")); + + EXPECT_THAT_EXPECTED( + map.GetTypeSystemForLanguage(eLanguageTypeC, target, /*can_create=*/true), + llvm::FailedWithMessage("TypeSystem for language c doesn't exist")); + EXPECT_THAT_EXPECTED( + map.GetTypeSystemForLanguage(eLanguageTypeC, target, + /*can_create=*/false), + llvm::FailedWithMessage("TypeSystem for language c doesn't exist")); +}