xref: /llvm-project/lldb/unittests/ScriptInterpreter/Python/PythonTestSuite.cpp (revision 04b443e77845cd20ab5acc4356cee509316135dd)
1 //===-- PythonTestSuite.cpp -----------------------------------------------===//
2 //
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
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "gtest/gtest.h"
10 
11 #include "Plugins/ScriptInterpreter/Python/SWIGPythonBridge.h"
12 #include "Plugins/ScriptInterpreter/Python/lldb-python.h"
13 
14 #include "PythonTestSuite.h"
15 #include <optional>
16 
17 void PythonTestSuite::SetUp() {
18   // Although we don't care about concurrency for the purposes of running
19   // this test suite, Python requires the GIL to be locked even for
20   // deallocating memory, which can happen when you call Py_DECREF or
21   // Py_INCREF.  So acquire the GIL for the entire duration of this
22   // test suite.
23   Py_InitializeEx(0);
24   m_gil_state = PyGILState_Ensure();
25   PyRun_SimpleString("import sys");
26 }
27 
28 void PythonTestSuite::TearDown() {
29   PyGILState_Release(m_gil_state);
30 
31   // We could call Py_FinalizeEx here, but initializing and finalizing Python is
32   // pretty slow, so just keep Python initialized across tests.
33 }
34 
35 // The following functions are the Pythonic implementations of the required
36 // callbacks. Because they're defined in libLLDB which we cannot link for the
37 // unit test, we have a 'default' implementation here.
38 
39 extern "C" PyObject *PyInit__lldb(void) { return nullptr; }
40 
41 llvm::Expected<bool>
42 lldb_private::python::SWIGBridge::LLDBSwigPythonBreakpointCallbackFunction(
43     const char *python_function_name, const char *session_dictionary_name,
44     const lldb::StackFrameSP &sb_frame,
45     const lldb::BreakpointLocationSP &sb_bp_loc,
46     const StructuredDataImpl &args_impl) {
47   return false;
48 }
49 
50 bool lldb_private::python::SWIGBridge::LLDBSwigPythonWatchpointCallbackFunction(
51     const char *python_function_name, const char *session_dictionary_name,
52     const lldb::StackFrameSP &sb_frame, const lldb::WatchpointSP &sb_wp) {
53   return false;
54 }
55 
56 bool lldb_private::python::SWIGBridge::LLDBSwigPythonFormatterCallbackFunction(
57     const char *python_function_name, const char *session_dictionary_name,
58     lldb::TypeImplSP type_impl_sp) {
59   return false;
60 }
61 
62 bool lldb_private::python::SWIGBridge::LLDBSwigPythonCallTypeScript(
63     const char *python_function_name, const void *session_dictionary,
64     const lldb::ValueObjectSP &valobj_sp, void **pyfunct_wrapper,
65     const lldb::TypeSummaryOptionsSP &options_sp, std::string &retval) {
66   return false;
67 }
68 
69 python::PythonObject
70 lldb_private::python::SWIGBridge::LLDBSwigPythonCreateSyntheticProvider(
71     const char *python_class_name, const char *session_dictionary_name,
72     const lldb::ValueObjectSP &valobj_sp) {
73   return python::PythonObject();
74 }
75 
76 python::PythonObject
77 lldb_private::python::SWIGBridge::LLDBSwigPythonCreateCommandObject(
78     const char *python_class_name, const char *session_dictionary_name,
79     lldb::DebuggerSP debugger_sp) {
80   return python::PythonObject();
81 }
82 
83 python::PythonObject lldb_private::python::SWIGBridge::
84     LLDBSwigPythonCreateScriptedBreakpointResolver(
85         const char *python_class_name, const char *session_dictionary_name,
86         const StructuredDataImpl &args, const lldb::BreakpointSP &bkpt_sp) {
87   return python::PythonObject();
88 }
89 
90 unsigned int
91 lldb_private::python::SWIGBridge::LLDBSwigPythonCallBreakpointResolver(
92     void *implementor, const char *method_name,
93     lldb_private::SymbolContext *sym_ctx) {
94   return 0;
95 }
96 
97 size_t lldb_private::python::SWIGBridge::LLDBSwigPython_CalculateNumChildren(
98     PyObject *implementor, uint32_t max) {
99   return 0;
100 }
101 
102 PyObject *lldb_private::python::SWIGBridge::LLDBSwigPython_GetChildAtIndex(
103     PyObject *implementor, uint32_t idx) {
104   return nullptr;
105 }
106 
107 int lldb_private::python::SWIGBridge::LLDBSwigPython_GetIndexOfChildWithName(
108     PyObject *implementor, const char *child_name) {
109   return 0;
110 }
111 
112 void *
113 lldb_private::python::LLDBSWIGPython_CastPyObjectToSBData(PyObject *data) {
114   return nullptr;
115 }
116 
117 void *lldb_private::python::LLDBSWIGPython_CastPyObjectToSBBreakpoint(
118     PyObject *data) {
119   return nullptr;
120 }
121 
122 void *lldb_private::python::LLDBSWIGPython_CastPyObjectToSBAttachInfo(
123     PyObject *data) {
124   return nullptr;
125 }
126 
127 void *lldb_private::python::LLDBSWIGPython_CastPyObjectToSBLaunchInfo(
128     PyObject *data) {
129   return nullptr;
130 }
131 
132 void *
133 lldb_private::python::LLDBSWIGPython_CastPyObjectToSBError(PyObject *data) {
134   return nullptr;
135 }
136 
137 void *
138 lldb_private::python::LLDBSWIGPython_CastPyObjectToSBEvent(PyObject *data) {
139   return nullptr;
140 }
141 
142 void *
143 lldb_private::python::LLDBSWIGPython_CastPyObjectToSBStream(PyObject *data) {
144   return nullptr;
145 }
146 
147 void *
148 lldb_private::python::LLDBSWIGPython_CastPyObjectToSBValue(PyObject *data) {
149   return nullptr;
150 }
151 
152 void *lldb_private::python::LLDBSWIGPython_CastPyObjectToSBMemoryRegionInfo(
153     PyObject *data) {
154   return nullptr;
155 }
156 
157 void *lldb_private::python::LLDBSWIGPython_CastPyObjectToSBExecutionContext(
158     PyObject *data) {
159   return nullptr;
160 }
161 
162 lldb::ValueObjectSP
163 lldb_private::python::SWIGBridge::LLDBSWIGPython_GetValueObjectSPFromSBValue(
164     void *data) {
165   return nullptr;
166 }
167 
168 bool lldb_private::python::SWIGBridge::
169     LLDBSwigPython_UpdateSynthProviderInstance(PyObject *implementor) {
170   return false;
171 }
172 
173 bool lldb_private::python::SWIGBridge::
174     LLDBSwigPython_MightHaveChildrenSynthProviderInstance(
175         PyObject *implementor) {
176   return false;
177 }
178 
179 PyObject *
180 lldb_private::python::SWIGBridge::LLDBSwigPython_GetValueSynthProviderInstance(
181     PyObject *implementor) {
182   return nullptr;
183 }
184 
185 bool lldb_private::python::SWIGBridge::LLDBSwigPythonCallCommand(
186     const char *python_function_name, const char *session_dictionary_name,
187     lldb::DebuggerSP debugger, const char *args,
188     lldb_private::CommandReturnObject &cmd_retobj,
189     lldb::ExecutionContextRefSP exe_ctx_ref_sp) {
190   return false;
191 }
192 
193 bool lldb_private::python::SWIGBridge::LLDBSwigPythonCallCommandObject(
194     PyObject *implementor, lldb::DebuggerSP debugger, const char *args,
195     lldb_private::CommandReturnObject &cmd_retobj,
196     lldb::ExecutionContextRefSP exe_ctx_ref_sp) {
197   return false;
198 }
199 
200 bool lldb_private::python::SWIGBridge::LLDBSwigPythonCallParsedCommandObject(
201     PyObject *implementor, lldb::DebuggerSP debugger,
202     StructuredDataImpl &args_impl,
203     lldb_private::CommandReturnObject &cmd_retobj,
204     lldb::ExecutionContextRefSP exe_ctx_ref_sp) {
205   return false;
206 }
207 
208 std::optional<std::string>
209 LLDBSwigPythonGetRepeatCommandForScriptedCommand(PyObject *implementor,
210                                                  std::string &command) {
211   return std::nullopt;
212 }
213 
214 StructuredData::DictionarySP
215 LLDBSwigPythonHandleArgumentCompletionForScriptedCommand(
216     PyObject *implementor, std::vector<llvm::StringRef> &args, size_t args_pos,
217     size_t pos_in_arg) {
218   return {};
219 }
220 
221 StructuredData::DictionarySP
222 LLDBSwigPythonHandleOptionArgumentCompletionForScriptedCommand(
223     PyObject *implementor, llvm::StringRef &long_options, size_t char_in_arg) {
224   return {};
225 }
226 
227 bool lldb_private::python::SWIGBridge::LLDBSwigPythonCallModuleInit(
228     const char *python_module_name, const char *session_dictionary_name,
229     lldb::DebuggerSP debugger) {
230   return false;
231 }
232 
233 python::PythonObject
234 lldb_private::python::SWIGBridge::LLDBSWIGPythonCreateOSPlugin(
235     const char *python_class_name, const char *session_dictionary_name,
236     const lldb::ProcessSP &process_sp) {
237   return python::PythonObject();
238 }
239 
240 python::PythonObject
241 lldb_private::python::SWIGBridge::LLDBSWIGPython_CreateFrameRecognizer(
242     const char *python_class_name, const char *session_dictionary_name) {
243   return python::PythonObject();
244 }
245 
246 PyObject *
247 lldb_private::python::SWIGBridge::LLDBSwigPython_GetRecognizedArguments(
248     PyObject *implementor, const lldb::StackFrameSP &frame_sp) {
249   return nullptr;
250 }
251 
252 bool lldb_private::python::SWIGBridge::LLDBSWIGPythonRunScriptKeywordProcess(
253     const char *python_function_name, const char *session_dictionary_name,
254     const lldb::ProcessSP &process, std::string &output) {
255   return false;
256 }
257 
258 std::optional<std::string>
259 lldb_private::python::SWIGBridge::LLDBSWIGPythonRunScriptKeywordThread(
260     const char *python_function_name, const char *session_dictionary_name,
261     lldb::ThreadSP thread) {
262   return std::nullopt;
263 }
264 
265 bool lldb_private::python::SWIGBridge::LLDBSWIGPythonRunScriptKeywordTarget(
266     const char *python_function_name, const char *session_dictionary_name,
267     const lldb::TargetSP &target, std::string &output) {
268   return false;
269 }
270 
271 std::optional<std::string>
272 lldb_private::python::SWIGBridge::LLDBSWIGPythonRunScriptKeywordFrame(
273     const char *python_function_name, const char *session_dictionary_name,
274     lldb::StackFrameSP frame) {
275   return std::nullopt;
276 }
277 
278 bool lldb_private::python::SWIGBridge::LLDBSWIGPythonRunScriptKeywordValue(
279     const char *python_function_name, const char *session_dictionary_name,
280     const lldb::ValueObjectSP &value, std::string &output) {
281   return false;
282 }
283 
284 void *lldb_private::python::SWIGBridge::LLDBSWIGPython_GetDynamicSetting(
285     void *module, const char *setting, const lldb::TargetSP &target_sp) {
286   return nullptr;
287 }
288 
289 python::PythonObject
290 lldb_private::python::SWIGBridge::ToSWIGWrapper(Status &&status) {
291   return python::PythonObject();
292 }
293 
294 python::PythonObject
295 lldb_private::python::SWIGBridge::ToSWIGWrapper(lldb::ProcessAttachInfoSP) {
296   return python::PythonObject();
297 }
298 
299 python::PythonObject
300 lldb_private::python::SWIGBridge::ToSWIGWrapper(lldb::ProcessLaunchInfoSP) {
301   return python::PythonObject();
302 }
303 
304 python::PythonObject
305 lldb_private::python::SWIGBridge::ToSWIGWrapper(lldb::DataExtractorSP) {
306   return python::PythonObject();
307 }
308 
309 python::PythonObject
310 lldb_private::python::SWIGBridge::ToSWIGWrapper(lldb::ExecutionContextRefSP) {
311   return python::PythonObject();
312 }
313 
314 python::PythonObject
315 lldb_private::python::SWIGBridge::ToSWIGWrapper(lldb::ThreadPlanSP) {
316   return python::PythonObject();
317 }
318 
319 python::PythonObject
320 lldb_private::python::SWIGBridge::ToSWIGWrapper(lldb::ProcessSP) {
321   return python::PythonObject();
322 }
323 
324 python::PythonObject lldb_private::python::SWIGBridge::ToSWIGWrapper(
325     const lldb_private::StructuredDataImpl &) {
326   return python::PythonObject();
327 }
328 
329 python::PythonObject
330 lldb_private::python::SWIGBridge::ToSWIGWrapper(Event *event) {
331   return python::PythonObject();
332 }
333 
334 python::PythonObject
335 lldb_private::python::SWIGBridge::ToSWIGWrapper(const Stream *stream) {
336   return python::PythonObject();
337 }
338 
339 python::PythonObject lldb_private::python::SWIGBridge::ToSWIGWrapper(
340     std::shared_ptr<lldb::SBStream> stream_sb) {
341   return python::PythonObject();
342 }
343