1 //===-- StackFrameRecognizerTest.cpp --------------------------------------===//
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
7 //===----------------------------------------------------------------------===//
9 #include "lldb/Target/StackFrameRecognizer.h"
10 #include "Plugins/Platform/Linux/PlatformLinux.h"
11 #include "lldb/Core/Debugger.h"
12 #include "lldb/Host/FileSystem.h"
13 #include "lldb/Host/HostInfo.h"
14 #include "lldb/Utility/Reproducer.h"
15 #include "lldb/lldb-enumerations.h"
16 #include "lldb/lldb-forward.h"
17 #include "lldb/lldb-private-enumerations.h"
18 #include "lldb/lldb-private.h"
19 #include "llvm/Support/FormatVariadic.h"
20 #include "gtest/gtest.h"
22 using namespace lldb_private
;
23 using namespace lldb_private::repro
;
27 class StackFrameRecognizerTest
: public ::testing::Test
{
29 void SetUp() override
{
30 llvm::cantFail(Reproducer::Initialize(ReproducerMode::Off
, llvm::None
));
31 FileSystem::Initialize();
32 HostInfo::Initialize();
34 // Pretend Linux is the host platform.
35 platform_linux::PlatformLinux::Initialize();
36 ArchSpec
arch("powerpc64-pc-linux");
37 Platform::SetHostPlatform(
38 platform_linux::PlatformLinux::CreateInstance(true, &arch
));
41 void TearDown() override
{
42 platform_linux::PlatformLinux::Terminate();
43 HostInfo::Terminate();
44 FileSystem::Terminate();
45 Reproducer::Terminate();
49 class DummyStackFrameRecognizer
: public StackFrameRecognizer
{
51 std::string
GetName() override
{ return "Dummy StackFrame Recognizer"; }
54 void RegisterDummyStackFrameRecognizer(StackFrameRecognizerManager
&manager
) {
55 RegularExpressionSP module_regex_sp
= nullptr;
56 RegularExpressionSP
symbol_regex_sp(new RegularExpression("boom"));
58 StackFrameRecognizerSP
dummy_recognizer_sp(new DummyStackFrameRecognizer());
60 manager
.AddRecognizer(dummy_recognizer_sp
, module_regex_sp
, symbol_regex_sp
,
66 TEST_F(StackFrameRecognizerTest
, NullModuleRegex
) {
67 DebuggerSP debugger_sp
= Debugger::CreateInstance();
68 ASSERT_TRUE(debugger_sp
);
70 StackFrameRecognizerManager manager
;
72 RegisterDummyStackFrameRecognizer(manager
);
74 bool any_printed
= false;
75 manager
.ForEach([&any_printed
](uint32_t recognizer_id
, std::string name
,
77 llvm::ArrayRef
<ConstString
> symbols
,
78 bool regexp
) { any_printed
= true; });
80 EXPECT_TRUE(any_printed
);