180814287SRaphael Isemann //===-- PythonTestSuite.cpp -----------------------------------------------===//
2c946d462SZachary Turner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6c946d462SZachary Turner //
7c946d462SZachary Turner //===----------------------------------------------------------------------===//
8c946d462SZachary Turner 
9b9c1b51eSKate Stone #include "gtest/gtest.h"
10c946d462SZachary Turner 
11*9a14adeaSPavel Labath #include "Plugins/ScriptInterpreter/Python/SWIGPythonBridge.h"
12c946d462SZachary Turner #include "Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.h"
136f8251fbSJonas Devlieghere #include "Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h"
14*9a14adeaSPavel Labath #include "Plugins/ScriptInterpreter/Python/lldb-python.h"
153925204cSMed Ismail Bennani 
1646376966SJonas Devlieghere #include "lldb/Host/FileSystem.h"
17b9c1b51eSKate Stone #include "lldb/Host/HostInfo.h"
18c946d462SZachary Turner 
19c946d462SZachary Turner #include "PythonTestSuite.h"
20c946d462SZachary Turner 
21c946d462SZachary Turner using namespace lldb_private;
226f8251fbSJonas Devlieghere class TestScriptInterpreterPython : public ScriptInterpreterPythonImpl {
23e3959de2SJonas Devlieghere public:
246f8251fbSJonas Devlieghere   using ScriptInterpreterPythonImpl::Initialize;
256f8251fbSJonas Devlieghere   using ScriptInterpreterPythonImpl::InitializePrivate;
26e3959de2SJonas Devlieghere };
27c946d462SZachary Turner 
28b9c1b51eSKate Stone void PythonTestSuite::SetUp() {
2946376966SJonas Devlieghere   FileSystem::Initialize();
30c946d462SZachary Turner   HostInfoBase::Initialize();
31c946d462SZachary Turner   // ScriptInterpreterPython::Initialize() depends on HostInfo being
32c946d462SZachary Turner   // initializedso it can compute the python directory etc.
33e3959de2SJonas Devlieghere   TestScriptInterpreterPython::Initialize();
34e3959de2SJonas Devlieghere   TestScriptInterpreterPython::InitializePrivate();
35c946d462SZachary Turner 
36c946d462SZachary Turner   // Although we don't care about concurrency for the purposes of running
37c946d462SZachary Turner   // this test suite, Python requires the GIL to be locked even for
38c946d462SZachary Turner   // deallocating memory, which can happen when you call Py_DECREF or
39c946d462SZachary Turner   // Py_INCREF.  So acquire the GIL for the entire duration of this
40c946d462SZachary Turner   // test suite.
41c946d462SZachary Turner   m_gil_state = PyGILState_Ensure();
42c946d462SZachary Turner }
43c946d462SZachary Turner 
44b9c1b51eSKate Stone void PythonTestSuite::TearDown() {
45c946d462SZachary Turner   PyGILState_Release(m_gil_state);
46c946d462SZachary Turner 
47e3959de2SJonas Devlieghere   TestScriptInterpreterPython::Terminate();
480bca15a3SJonas Devlieghere   HostInfoBase::Terminate();
490bca15a3SJonas Devlieghere   FileSystem::Terminate();
50c946d462SZachary Turner }
51282890d7SJonas Devlieghere 
52282890d7SJonas Devlieghere // The following functions are the Pythonic implementations of the required
53282890d7SJonas Devlieghere // callbacks. Because they're defined in libLLDB which we cannot link for the
54282890d7SJonas Devlieghere // unit test, we have a 'default' implementation here.
55282890d7SJonas Devlieghere 
56282890d7SJonas Devlieghere #if PY_MAJOR_VERSION >= 3
57282890d7SJonas Devlieghere extern "C" PyObject *PyInit__lldb(void) { return nullptr; }
58282890d7SJonas Devlieghere #else
59282890d7SJonas Devlieghere extern "C" void init_lldb(void) {}
60282890d7SJonas Devlieghere #endif
61282890d7SJonas Devlieghere 
62*9a14adeaSPavel Labath llvm::Expected<bool> lldb_private::LLDBSwigPythonBreakpointCallbackFunction(
63282890d7SJonas Devlieghere     const char *python_function_name, const char *session_dictionary_name,
64282890d7SJonas Devlieghere     const lldb::StackFrameSP &sb_frame,
65738af7a6SJim Ingham     const lldb::BreakpointLocationSP &sb_bp_loc,
66738af7a6SJim Ingham     StructuredDataImpl *args_impl) {
67282890d7SJonas Devlieghere   return false;
68282890d7SJonas Devlieghere }
69282890d7SJonas Devlieghere 
70*9a14adeaSPavel Labath bool lldb_private::LLDBSwigPythonWatchpointCallbackFunction(
71282890d7SJonas Devlieghere     const char *python_function_name, const char *session_dictionary_name,
72282890d7SJonas Devlieghere     const lldb::StackFrameSP &sb_frame, const lldb::WatchpointSP &sb_wp) {
73282890d7SJonas Devlieghere   return false;
74282890d7SJonas Devlieghere }
75282890d7SJonas Devlieghere 
76*9a14adeaSPavel Labath bool lldb_private::LLDBSwigPythonCallTypeScript(
77*9a14adeaSPavel Labath     const char *python_function_name, const void *session_dictionary,
78282890d7SJonas Devlieghere     const lldb::ValueObjectSP &valobj_sp, void **pyfunct_wrapper,
79282890d7SJonas Devlieghere     const lldb::TypeSummaryOptionsSP &options_sp, std::string &retval) {
80282890d7SJonas Devlieghere   return false;
81282890d7SJonas Devlieghere }
82282890d7SJonas Devlieghere 
83*9a14adeaSPavel Labath void *lldb_private::LLDBSwigPythonCreateSyntheticProvider(
84*9a14adeaSPavel Labath     const char *python_class_name, const char *session_dictionary_name,
85282890d7SJonas Devlieghere     const lldb::ValueObjectSP &valobj_sp) {
86282890d7SJonas Devlieghere   return nullptr;
87282890d7SJonas Devlieghere }
88282890d7SJonas Devlieghere 
89*9a14adeaSPavel Labath void *lldb_private::LLDBSwigPythonCreateCommandObject(
90*9a14adeaSPavel Labath     const char *python_class_name, const char *session_dictionary_name,
91282890d7SJonas Devlieghere     const lldb::DebuggerSP debugger_sp) {
92282890d7SJonas Devlieghere   return nullptr;
93282890d7SJonas Devlieghere }
94282890d7SJonas Devlieghere 
95*9a14adeaSPavel Labath void *lldb_private::LLDBSwigPythonCreateScriptedThreadPlan(
96282890d7SJonas Devlieghere     const char *python_class_name, const char *session_dictionary_name,
97*9a14adeaSPavel Labath     StructuredDataImpl *args_data, std::string &error_string,
98282890d7SJonas Devlieghere     const lldb::ThreadPlanSP &thread_plan_sp) {
99282890d7SJonas Devlieghere   return nullptr;
100282890d7SJonas Devlieghere }
101282890d7SJonas Devlieghere 
102*9a14adeaSPavel Labath bool lldb_private::LLDBSWIGPythonCallThreadPlan(void *implementor,
103282890d7SJonas Devlieghere                                                 const char *method_name,
104*9a14adeaSPavel Labath                                                 Event *event_sp,
105*9a14adeaSPavel Labath                                                 bool &got_error) {
106282890d7SJonas Devlieghere   return false;
107282890d7SJonas Devlieghere }
108282890d7SJonas Devlieghere 
109*9a14adeaSPavel Labath void *lldb_private::LLDBSwigPythonCreateScriptedBreakpointResolver(
110282890d7SJonas Devlieghere     const char *python_class_name, const char *session_dictionary_name,
1117f09ab08SPavel Labath     lldb_private::StructuredDataImpl *args, const lldb::BreakpointSP &bkpt_sp) {
112282890d7SJonas Devlieghere   return nullptr;
113282890d7SJonas Devlieghere }
114282890d7SJonas Devlieghere 
115*9a14adeaSPavel Labath unsigned int lldb_private::LLDBSwigPythonCallBreakpointResolver(
116*9a14adeaSPavel Labath     void *implementor, const char *method_name,
117282890d7SJonas Devlieghere     lldb_private::SymbolContext *sym_ctx) {
118282890d7SJonas Devlieghere   return 0;
119282890d7SJonas Devlieghere }
120282890d7SJonas Devlieghere 
121*9a14adeaSPavel Labath size_t lldb_private::LLDBSwigPython_CalculateNumChildren(PyObject *implementor,
122282890d7SJonas Devlieghere                                                          uint32_t max) {
123282890d7SJonas Devlieghere   return 0;
124282890d7SJonas Devlieghere }
125282890d7SJonas Devlieghere 
126*9a14adeaSPavel Labath PyObject *lldb_private::LLDBSwigPython_GetChildAtIndex(PyObject *implementor,
127282890d7SJonas Devlieghere                                                        uint32_t idx) {
128282890d7SJonas Devlieghere   return nullptr;
129282890d7SJonas Devlieghere }
130282890d7SJonas Devlieghere 
131*9a14adeaSPavel Labath int lldb_private::LLDBSwigPython_GetIndexOfChildWithName(
132*9a14adeaSPavel Labath     PyObject *implementor, const char *child_name) {
133282890d7SJonas Devlieghere   return 0;
134282890d7SJonas Devlieghere }
135282890d7SJonas Devlieghere 
136*9a14adeaSPavel Labath void *lldb_private::LLDBSWIGPython_CastPyObjectToSBData(PyObject *data) {
1371f6a57c1SMed Ismail Bennani   return nullptr;
1381f6a57c1SMed Ismail Bennani }
1391f6a57c1SMed Ismail Bennani 
140*9a14adeaSPavel Labath void *lldb_private::LLDBSWIGPython_CastPyObjectToSBError(PyObject *data) {
1411f6a57c1SMed Ismail Bennani   return nullptr;
1421f6a57c1SMed Ismail Bennani }
1431f6a57c1SMed Ismail Bennani 
144*9a14adeaSPavel Labath void *lldb_private::LLDBSWIGPython_CastPyObjectToSBValue(PyObject *data) {
145282890d7SJonas Devlieghere   return nullptr;
146282890d7SJonas Devlieghere }
147282890d7SJonas Devlieghere 
148*9a14adeaSPavel Labath void *
149*9a14adeaSPavel Labath lldb_private::LLDBSWIGPython_CastPyObjectToSBMemoryRegionInfo(PyObject *data) {
150a758c9f7SMed Ismail Bennani   return nullptr;
151a758c9f7SMed Ismail Bennani }
152a758c9f7SMed Ismail Bennani 
153*9a14adeaSPavel Labath lldb::ValueObjectSP
154*9a14adeaSPavel Labath lldb_private::LLDBSWIGPython_GetValueObjectSPFromSBValue(void *data) {
155282890d7SJonas Devlieghere   return nullptr;
156282890d7SJonas Devlieghere }
157282890d7SJonas Devlieghere 
158*9a14adeaSPavel Labath bool lldb_private::LLDBSwigPython_UpdateSynthProviderInstance(
159*9a14adeaSPavel Labath     PyObject *implementor) {
160282890d7SJonas Devlieghere   return false;
161282890d7SJonas Devlieghere }
162282890d7SJonas Devlieghere 
163*9a14adeaSPavel Labath bool lldb_private::LLDBSwigPython_MightHaveChildrenSynthProviderInstance(
164*9a14adeaSPavel Labath     PyObject *implementor) {
165282890d7SJonas Devlieghere   return false;
166282890d7SJonas Devlieghere }
167282890d7SJonas Devlieghere 
168*9a14adeaSPavel Labath PyObject *lldb_private::LLDBSwigPython_GetValueSynthProviderInstance(
169*9a14adeaSPavel Labath     PyObject *implementor) {
170282890d7SJonas Devlieghere   return nullptr;
171282890d7SJonas Devlieghere }
172282890d7SJonas Devlieghere 
173*9a14adeaSPavel Labath bool lldb_private::LLDBSwigPythonCallCommand(
174*9a14adeaSPavel Labath     const char *python_function_name, const char *session_dictionary_name,
175282890d7SJonas Devlieghere     lldb::DebuggerSP &debugger, const char *args,
176282890d7SJonas Devlieghere     lldb_private::CommandReturnObject &cmd_retobj,
177282890d7SJonas Devlieghere     lldb::ExecutionContextRefSP exe_ctx_ref_sp) {
178282890d7SJonas Devlieghere   return false;
179282890d7SJonas Devlieghere }
180282890d7SJonas Devlieghere 
181*9a14adeaSPavel Labath bool lldb_private::LLDBSwigPythonCallCommandObject(
182*9a14adeaSPavel Labath     PyObject *implementor, lldb::DebuggerSP &debugger, const char *args,
183282890d7SJonas Devlieghere     lldb_private::CommandReturnObject &cmd_retobj,
184282890d7SJonas Devlieghere     lldb::ExecutionContextRefSP exe_ctx_ref_sp) {
185282890d7SJonas Devlieghere   return false;
186282890d7SJonas Devlieghere }
187282890d7SJonas Devlieghere 
188*9a14adeaSPavel Labath bool lldb_private::LLDBSwigPythonCallModuleInit(
189*9a14adeaSPavel Labath     const char *python_module_name, const char *session_dictionary_name,
190282890d7SJonas Devlieghere     lldb::DebuggerSP &debugger) {
191282890d7SJonas Devlieghere   return false;
192282890d7SJonas Devlieghere }
193282890d7SJonas Devlieghere 
194*9a14adeaSPavel Labath void *
195*9a14adeaSPavel Labath lldb_private::LLDBSWIGPythonCreateOSPlugin(const char *python_class_name,
196282890d7SJonas Devlieghere                                            const char *session_dictionary_name,
197282890d7SJonas Devlieghere                                            const lldb::ProcessSP &process_sp) {
198282890d7SJonas Devlieghere   return nullptr;
199282890d7SJonas Devlieghere }
200282890d7SJonas Devlieghere 
201*9a14adeaSPavel Labath void *lldb_private::LLDBSwigPythonCreateScriptedProcess(
2021f6a57c1SMed Ismail Bennani     const char *python_class_name, const char *session_dictionary_name,
2031f6a57c1SMed Ismail Bennani     const lldb::TargetSP &target_sp, StructuredDataImpl *args_impl,
2041f6a57c1SMed Ismail Bennani     std::string &error_string) {
2051f6a57c1SMed Ismail Bennani   return nullptr;
2061f6a57c1SMed Ismail Bennani }
2071f6a57c1SMed Ismail Bennani 
208*9a14adeaSPavel Labath void *lldb_private::LLDBSwigPythonCreateScriptedThread(
20959d8dd79SMed Ismail Bennani     const char *python_class_name, const char *session_dictionary_name,
210738621d0SMed Ismail Bennani     const lldb::ProcessSP &process_sp, StructuredDataImpl *args_impl,
211738621d0SMed Ismail Bennani     std::string &error_string) {
21259d8dd79SMed Ismail Bennani   return nullptr;
21359d8dd79SMed Ismail Bennani }
21459d8dd79SMed Ismail Bennani 
215*9a14adeaSPavel Labath void *lldb_private::LLDBSWIGPython_CreateFrameRecognizer(
216*9a14adeaSPavel Labath     const char *python_class_name, const char *session_dictionary_name) {
217282890d7SJonas Devlieghere   return nullptr;
218282890d7SJonas Devlieghere }
219282890d7SJonas Devlieghere 
220*9a14adeaSPavel Labath PyObject *lldb_private::LLDBSwigPython_GetRecognizedArguments(
221*9a14adeaSPavel Labath     PyObject *implementor, const lldb::StackFrameSP &frame_sp) {
222282890d7SJonas Devlieghere   return nullptr;
223282890d7SJonas Devlieghere }
224282890d7SJonas Devlieghere 
225*9a14adeaSPavel Labath bool lldb_private::LLDBSWIGPythonRunScriptKeywordProcess(
226282890d7SJonas Devlieghere     const char *python_function_name, const char *session_dictionary_name,
2277f09ab08SPavel Labath     const lldb::ProcessSP &process, std::string &output) {
228282890d7SJonas Devlieghere   return false;
229282890d7SJonas Devlieghere }
230282890d7SJonas Devlieghere 
231*9a14adeaSPavel Labath bool lldb_private::LLDBSWIGPythonRunScriptKeywordThread(
232282890d7SJonas Devlieghere     const char *python_function_name, const char *session_dictionary_name,
233282890d7SJonas Devlieghere     lldb::ThreadSP &thread, std::string &output) {
234282890d7SJonas Devlieghere   return false;
235282890d7SJonas Devlieghere }
236282890d7SJonas Devlieghere 
237*9a14adeaSPavel Labath bool lldb_private::LLDBSWIGPythonRunScriptKeywordTarget(
238282890d7SJonas Devlieghere     const char *python_function_name, const char *session_dictionary_name,
2397f09ab08SPavel Labath     const lldb::TargetSP &target, std::string &output) {
240282890d7SJonas Devlieghere   return false;
241282890d7SJonas Devlieghere }
242282890d7SJonas Devlieghere 
243*9a14adeaSPavel Labath bool lldb_private::LLDBSWIGPythonRunScriptKeywordFrame(
244282890d7SJonas Devlieghere     const char *python_function_name, const char *session_dictionary_name,
245282890d7SJonas Devlieghere     lldb::StackFrameSP &frame, std::string &output) {
246282890d7SJonas Devlieghere   return false;
247282890d7SJonas Devlieghere }
248282890d7SJonas Devlieghere 
249*9a14adeaSPavel Labath bool lldb_private::LLDBSWIGPythonRunScriptKeywordValue(
250282890d7SJonas Devlieghere     const char *python_function_name, const char *session_dictionary_name,
2517f09ab08SPavel Labath     const lldb::ValueObjectSP &value, std::string &output) {
252282890d7SJonas Devlieghere   return false;
253282890d7SJonas Devlieghere }
254282890d7SJonas Devlieghere 
255*9a14adeaSPavel Labath void *lldb_private::LLDBSWIGPython_GetDynamicSetting(
256*9a14adeaSPavel Labath     void *module, const char *setting, const lldb::TargetSP &target_sp) {
257282890d7SJonas Devlieghere   return nullptr;
258282890d7SJonas Devlieghere }
2591b1d9815SJim Ingham 
260*9a14adeaSPavel Labath void *lldb_private::LLDBSwigPythonCreateScriptedStopHook(
2611b1d9815SJim Ingham     lldb::TargetSP target_sp, const char *python_class_name,
2621b1d9815SJim Ingham     const char *session_dictionary_name,
2631b1d9815SJim Ingham     lldb_private::StructuredDataImpl *args_impl, Status &error) {
2641b1d9815SJim Ingham   return nullptr;
2651b1d9815SJim Ingham }
2661b1d9815SJim Ingham 
267*9a14adeaSPavel Labath bool lldb_private::LLDBSwigPythonStopHookCallHandleStop(
268*9a14adeaSPavel Labath     void *implementor, lldb::ExecutionContextRefSP exc_ctx_sp,
2691b1d9815SJim Ingham     lldb::StreamSP stream) {
2701b1d9815SJim Ingham   return false;
2711b1d9815SJim Ingham }
272