Files
CMake/Tests/CMakeLib/testDebuggerThread.cxx
Jonathan Phippen 41621c3afb Debugger: Add Value Formatting support for StackTrace request
Add support for the "format" property of the Debug Adapter Protocol
StackTrace request to fulfill the host's request to format the resulting
StackFrame name differently.
2024-10-29 13:29:00 -07:00

63 lines
1.7 KiB
C++

#include <memory>
#include <string>
#include <vector>
#include <cm3p/cppdap/optional.h>
#include <cm3p/cppdap/protocol.h>
#include <cm3p/cppdap/types.h>
#include "cmDebuggerThread.h"
#include "cmListFileCache.h"
#include "testCommon.h"
static bool testStackFrameFunctionName(
dap::optional<dap::StackFrameFormat> format, const char* expectedName)
{
auto thread = std::make_shared<cmDebugger::cmDebuggerThread>(0, "name");
const auto* functionName = "function_name";
auto arguments = std::vector<cmListFileArgument>{ cmListFileArgument(
"arg", cmListFileArgument::Delimiter::Unquoted, 0) };
cmListFileFunction func(functionName, 10, 20, arguments);
thread->PushStackFrame(nullptr, "CMakeLists.txt", func);
auto stackTrace = GetStackTraceResponse(thread, format);
ASSERT_TRUE(stackTrace.stackFrames[0].name == expectedName);
return true;
}
bool testStackFrameNoFormatting()
{
return testStackFrameFunctionName({}, "function_name");
}
bool testStackFrameFormatParameters()
{
dap::StackFrameFormat format;
format.parameters = true;
return testStackFrameFunctionName(format, "function_name()");
}
bool testStackFrameFormatParameterValues()
{
dap::StackFrameFormat format;
format.parameters = true;
format.parameterValues = true;
return testStackFrameFunctionName(format, "function_name(arg)");
}
bool testStackFrameFormatLine()
{
dap::StackFrameFormat format;
format.line = true;
return testStackFrameFunctionName(format, "function_name Line: 10");
}
int testDebuggerThread(int, char*[])
{
return runTests({ testStackFrameNoFormatting, testStackFrameFormatParameters,
testStackFrameFormatParameterValues,
testStackFrameFormatLine });
}