1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
from pylsp_rope import commands, plugin, typing
from pylsp_rope.text import Range
from test.conftest import create_document
from test.helpers import assert_single_document_edit, assert_text_edits
def test_generate_variable(config, workspace, code_action_context):
document = create_document(workspace, "undefined_variable.py")
line = 1
start_col = end_col = document.lines[line].index("undef_var")
selection = Range((line, start_col), (line, end_col))
response = plugin.pylsp_code_actions(
config=config,
workspace=workspace,
document=document,
range=selection,
context=code_action_context,
)
expected: typing.CodeAction = {
"title": "Generate variable",
"kind": "quickfix",
"command": {
"title": "Generate variable",
"command": commands.COMMAND_GENERATE_CODE,
"arguments": [
{
"document_uri": document.uri,
"position": selection["start"],
"generate_kind": "variable",
}
],
},
}
assert expected in response
assert expected["command"] is not None
command = expected["command"]["command"]
arguments = expected["command"]["arguments"]
response = plugin.pylsp_execute_command(
config=config,
workspace=workspace,
command=command,
arguments=arguments,
)
edit_request = workspace._endpoint.request.call_args
document_edits = assert_single_document_edit(edit_request, document)
new_text = assert_text_edits(document_edits, target="generate_variable.py")
assert "undef_var = None" in new_text
def test_generate_function(config, workspace, code_action_context):
document = create_document(workspace, "undefined_variable.py")
line = 1
start_col = end_col = document.lines[line].index("undef_var")
selection = Range((line, start_col), (line, end_col))
response = plugin.pylsp_code_actions(
config=config,
workspace=workspace,
document=document,
range=selection,
context=code_action_context,
)
expected: typing.CodeAction = {
"title": "Generate function",
"kind": "quickfix",
"command": {
"title": "Generate function",
"command": commands.COMMAND_GENERATE_CODE,
"arguments": [
{
"document_uri": document.uri,
"position": selection["start"],
"generate_kind": "function",
}
],
},
}
assert expected in response
assert expected["command"] is not None
command = expected["command"]["command"]
arguments = expected["command"]["arguments"]
response = plugin.pylsp_execute_command(
config=config,
workspace=workspace,
command=command,
arguments=arguments,
)
edit_request = workspace._endpoint.request.call_args
document_edits = assert_single_document_edit(edit_request, document)
new_text = assert_text_edits(document_edits, target="generate_function.py")
assert "def undef_var():" in new_text
def test_generate_class(config, workspace, code_action_context):
document = create_document(workspace, "undefined_variable.py")
line = 1
start_col = end_col = document.lines[line].index("undef_var")
selection = Range((line, start_col), (line, end_col))
response = plugin.pylsp_code_actions(
config=config,
workspace=workspace,
document=document,
range=selection,
context=code_action_context,
)
expected: typing.CodeAction = {
"title": "Generate class",
"kind": "quickfix",
"command": {
"title": "Generate class",
"command": commands.COMMAND_GENERATE_CODE,
"arguments": [
{
"document_uri": document.uri,
"position": selection["start"],
"generate_kind": "class",
}
],
},
}
assert expected in response
assert expected["command"] is not None
command = expected["command"]["command"]
arguments = expected["command"]["arguments"]
response = plugin.pylsp_execute_command(
config=config,
workspace=workspace,
command=command,
arguments=arguments,
)
edit_request = workspace._endpoint.request.call_args
document_edits = assert_single_document_edit(edit_request, document)
new_text = assert_text_edits(document_edits, target="generate_class.py")
assert "class undef_var(object):" in new_text
|