vscode-python/python_files/tests/test_dynamic_cursor.py

193 lines
5.1 KiB
Python

import importlib
import textwrap
import normalizeSelection
def test_dictionary_mouse_mover():
"""Having the mouse cursor on second line, 'my_dict = {' and pressing shift+enter should bring the mouse cursor to line 6, on and to be able to run 'print('only send the dictionary')'."""
importlib.reload(normalizeSelection)
src = textwrap.dedent(
"""\
not_dictionary = 'hi'
my_dict = {
"key1": "value1",
"key2": "value2"
}
print('only send the dictionary')
"""
)
result = normalizeSelection.traverse_file(src, 2, 2, was_highlighted=False)
assert result["which_line_next"] == 6
def test_beginning_func():
"""Pressing shift+enter on the very first line, of function definition, such as 'my_func():'.
It should properly skip the comment and assert the next executable line to be
executed is line 5 at 'my_dict = {'.
"""
importlib.reload(normalizeSelection)
src = textwrap.dedent(
"""\
def my_func():
print("line 2")
print("line 3")
# Skip line 4 because it is a comment
my_dict = {
"key1": "value1",
"key2": "value2"
}
"""
)
result = normalizeSelection.traverse_file(src, 1, 1, was_highlighted=False)
assert result["which_line_next"] == 5
def test_cursor_forloop():
importlib.reload(normalizeSelection)
src = textwrap.dedent(
"""\
lucid_dream = ["Corgi", "Husky", "Pomsky"]
for dogs in lucid_dream: # initial starting position
print(dogs)
print("I wish I had a dog!")
print("This should be the next block that should be ran")
"""
)
result = normalizeSelection.traverse_file(src, 2, 2, was_highlighted=False)
assert result["which_line_next"] == 6
def test_inside_forloop():
importlib.reload(normalizeSelection)
src = textwrap.dedent(
"""\
for food in lucid_dream:
print("We are starting") # initial starting position
print("Next cursor should be here!")
"""
)
result = normalizeSelection.traverse_file(src, 2, 2, was_highlighted=False)
assert result["which_line_next"] == 3
def test_skip_sameline_statements():
importlib.reload(normalizeSelection)
src = textwrap.dedent(
"""\
print("Audi");print("BMW");print("Mercedes")
print("Next line to be run is here!")
"""
)
result = normalizeSelection.traverse_file(src, 1, 1, was_highlighted=False)
assert result["which_line_next"] == 2
def test_skip_multi_comp_lambda():
importlib.reload(normalizeSelection)
src = textwrap.dedent(
"""\
(
my_first_var
for my_first_var in range(1, 10)
if my_first_var % 2 == 0
)
my_lambda = lambda x: (
x + 1
)
"""
)
result = normalizeSelection.traverse_file(src, 1, 1, was_highlighted=False)
# Shift enter from the very first ( should make
# next executable statement as the lambda expression
assert result["which_line_next"] == 7
def test_move_whole_class():
"""Shift+enter on a class definition should move the cursor after running whole class."""
importlib.reload(normalizeSelection)
src = textwrap.dedent(
"""\
class Stub(object):
def __init__(self):
self.calls = []
def add_call(self, name, args=None, kwargs=None):
self.calls.append((name, args, kwargs))
print("We should be here after running whole class")
"""
)
result = normalizeSelection.traverse_file(src, 1, 1, was_highlighted=False)
assert result["which_line_next"] == 7
def test_def_to_def():
importlib.reload(normalizeSelection)
src = textwrap.dedent(
"""\
def my_dogs():
print("Corgi")
print("Husky")
print("Corgi2")
print("Husky2")
print("no dogs")
# Skip here
def next_func():
print("Not here but above")
"""
)
result = normalizeSelection.traverse_file(src, 1, 1, was_highlighted=False)
assert result["which_line_next"] == 9
def test_try_catch_move():
importlib.reload(normalizeSelection)
src = textwrap.dedent(
"""\
try:
1+1
except:
print("error")
print("Should be here afterwards")
"""
)
result = normalizeSelection.traverse_file(src, 1, 1, was_highlighted=False)
assert result["which_line_next"] == 6
def test_skip_nested():
importlib.reload(normalizeSelection)
src = textwrap.dedent(
"""\
for i in range(1, 6):
for j in range(1, 6):
for x in range(1, 5):
for y in range(1, 5):
for z in range(1,10):
print(i, j, x, y, z)
print("Cursor should be here after running line 1")
"""
)
result = normalizeSelection.traverse_file(src, 1, 1, was_highlighted=False)
assert result["which_line_next"] == 8