(case_setup_dap, tmpdir)
| 4651 | |
| 4652 | @pytest.mark.skipif(IS_JYTHON, reason="Flaky on Jython.") |
| 4653 | def test_source_reference_no_file(case_setup_dap, tmpdir): |
| 4654 | with case_setup_dap.test_file("_debugger_case_source_reference.py") as writer: |
| 4655 | json_facade = JsonFacade(writer) |
| 4656 | |
| 4657 | json_facade.write_launch( |
| 4658 | debugOptions=["DebugStdLib"], |
| 4659 | pathMappings=[ |
| 4660 | { |
| 4661 | "localRoot": os.path.dirname(writer.TEST_FILE), |
| 4662 | "remoteRoot": os.path.dirname(writer.TEST_FILE), |
| 4663 | } |
| 4664 | ], |
| 4665 | ) |
| 4666 | |
| 4667 | writer.write_add_breakpoint(writer.get_line_index_with_content("breakpoint")) |
| 4668 | json_facade.write_make_initial_run() |
| 4669 | |
| 4670 | # First hit is for breakpoint reached via a stack frame that doesn't have source. |
| 4671 | |
| 4672 | json_hit = json_facade.wait_for_thread_stopped() |
| 4673 | stack_trace_request = json_facade.write_request( |
| 4674 | pydevd_schema.StackTraceRequest( |
| 4675 | pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id, format={"module": True, "line": True}) |
| 4676 | ) |
| 4677 | ) |
| 4678 | stack_trace_response = json_facade.wait_for_response(stack_trace_request) |
| 4679 | stack_trace_response_body = stack_trace_response.body |
| 4680 | stack_frame = stack_trace_response_body.stackFrames[1] |
| 4681 | assert stack_frame["source"]["path"] == "<string>" |
| 4682 | source_reference = stack_frame["source"]["sourceReference"] |
| 4683 | assert source_reference != 0 |
| 4684 | |
| 4685 | json_facade.write_get_source(source_reference, success=False) |
| 4686 | |
| 4687 | json_facade.write_continue() |
| 4688 | |
| 4689 | # First hit is for breakpoint reached via a stack frame that doesn't have source |
| 4690 | # on disk, but which can be retrieved via linecache. |
| 4691 | |
| 4692 | json_hit = json_facade.wait_for_thread_stopped() |
| 4693 | stack_trace_request = json_facade.write_request( |
| 4694 | pydevd_schema.StackTraceRequest( |
| 4695 | pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id, format={"module": True, "line": True}) |
| 4696 | ) |
| 4697 | ) |
| 4698 | stack_trace_response = json_facade.wait_for_response(stack_trace_request) |
| 4699 | stack_trace_response_body = stack_trace_response.body |
| 4700 | stack_frame = stack_trace_response_body.stackFrames[1] |
| 4701 | print(stack_frame["source"]["path"]) |
| 4702 | assert stack_frame["source"]["path"] == "<something>" |
| 4703 | source_reference = stack_frame["source"]["sourceReference"] |
| 4704 | assert source_reference != 0 |
| 4705 | |
| 4706 | response = json_facade.write_get_source(source_reference) |
| 4707 | assert response.body.content == "foo()\n" |
| 4708 | |
| 4709 | json_facade.write_continue() |
| 4710 | writer.finished_ok = True |
nothing calls this directly
no test coverage detected