(case_setup_dap)
| 3088 | |
| 3089 | @pytest.mark.skipif(IS_JYTHON, reason="Putting unicode on frame vars does not work on Jython.") |
| 3090 | def test_stack_and_variables(case_setup_dap): |
| 3091 | with case_setup_dap.test_file("_debugger_case_local_variables.py") as writer: |
| 3092 | json_facade = JsonFacade(writer) |
| 3093 | |
| 3094 | json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) |
| 3095 | |
| 3096 | json_facade.write_make_initial_run() |
| 3097 | |
| 3098 | json_hit = json_facade.wait_for_thread_stopped() |
| 3099 | |
| 3100 | # : :type stack_trace_response: StackTraceResponse |
| 3101 | # : :type stack_trace_response_body: StackTraceResponseBody |
| 3102 | # : :type stack_frame: StackFrame |
| 3103 | |
| 3104 | # Check stack trace format. |
| 3105 | stack_trace_request = json_facade.write_request( |
| 3106 | pydevd_schema.StackTraceRequest( |
| 3107 | pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id, format={"module": True, "line": True}) |
| 3108 | ) |
| 3109 | ) |
| 3110 | stack_trace_response = json_facade.wait_for_response(stack_trace_request) |
| 3111 | stack_trace_response_body = stack_trace_response.body |
| 3112 | stack_frame = next(iter(stack_trace_response_body.stackFrames)) |
| 3113 | assert stack_frame["name"] == "__main__.Call : 4" |
| 3114 | |
| 3115 | # Regular stack trace request (no format). |
| 3116 | json_hit = json_facade.get_stack_as_json_hit(json_hit.thread_id) |
| 3117 | stack_trace_response = json_hit.stack_trace_response |
| 3118 | stack_trace_response_body = stack_trace_response.body |
| 3119 | assert len(stack_trace_response_body.stackFrames) == 2 |
| 3120 | stack_frame = next(iter(stack_trace_response_body.stackFrames)) |
| 3121 | assert stack_frame["name"] == "Call" |
| 3122 | assert stack_frame["source"]["path"].endswith("_debugger_case_local_variables.py") |
| 3123 | |
| 3124 | name_to_scope = json_facade.get_name_to_scope(stack_frame["id"]) |
| 3125 | scope = name_to_scope["Locals"] |
| 3126 | frame_variables_reference = scope.variablesReference |
| 3127 | assert isinstance(frame_variables_reference, int) |
| 3128 | |
| 3129 | variables_response = json_facade.get_variables_response(frame_variables_reference) |
| 3130 | # : :type variables_response: VariablesResponse |
| 3131 | assert len(variables_response.body.variables) == 0 # No variables expected here |
| 3132 | |
| 3133 | json_facade.write_step_next(json_hit.thread_id) |
| 3134 | json_hit = json_facade.wait_for_thread_stopped("step") |
| 3135 | |
| 3136 | variables_response = json_facade.get_variables_response(frame_variables_reference) |
| 3137 | # : :type variables_response: VariablesResponse |
| 3138 | assert variables_response.body.variables == [ |
| 3139 | { |
| 3140 | "name": "variable_for_test_1", |
| 3141 | "value": "10", |
| 3142 | "type": "int", |
| 3143 | "evaluateName": "variable_for_test_1", |
| 3144 | "variablesReference": 0, |
| 3145 | } |
| 3146 | ] |
| 3147 |
nothing calls this directly
no test coverage detected