101 lines
3.9 KiB
Python
101 lines
3.9 KiB
Python
import talon
|
|
|
|
if hasattr(talon, "test_mode"):
|
|
# Only include this when we're running tests
|
|
from core.snippets import snippets_parser
|
|
from core.snippets.snippet_types import SnippetVariable
|
|
|
|
def assert_body_with_final_stop_added_as_expected(body: str, expected: str):
|
|
actual, _ = snippets_parser.add_final_stop_to_snippet_body(body, [])
|
|
assert actual == expected
|
|
|
|
def test_stop_at_end():
|
|
body = "import $0"
|
|
assert_body_with_final_stop_added_as_expected(body, body)
|
|
|
|
def test_final_stop_not_at_end():
|
|
body = "[$1]($0)"
|
|
expected = "[$1]($2)$0"
|
|
assert_body_with_final_stop_added_as_expected(body, expected)
|
|
|
|
def test_without_final_stop():
|
|
body = "[$1]($2)"
|
|
expected = "[$1]($2)$0"
|
|
assert_body_with_final_stop_added_as_expected(body, expected)
|
|
|
|
def test_empty_body_unchanged():
|
|
body = ""
|
|
assert_body_with_final_stop_added_as_expected(body, body)
|
|
|
|
def test_number_inside_braces():
|
|
body = "if (${1}){\n\t${0}}"
|
|
expected = "if (${1}){\n\t${2}}$0"
|
|
assert_body_with_final_stop_added_as_expected(body, expected)
|
|
|
|
def test_final_stop_with_default_value():
|
|
body = "import ${0:default_value}"
|
|
assert_body_with_final_stop_added_as_expected(body, body)
|
|
|
|
def test_final_stop_with_value_inside_braces():
|
|
body = "import ${0}"
|
|
assert_body_with_final_stop_added_as_expected(body, body)
|
|
|
|
def test_biggest_value_having_default():
|
|
body = "from ${1:module} import $0;"
|
|
expected = "from ${1:module} import $2;$0"
|
|
assert_body_with_final_stop_added_as_expected(body, expected)
|
|
|
|
def test_three_stops():
|
|
body = "[$0 for $2 in $1]"
|
|
expected = "[$3 for $2 in $1]$0"
|
|
assert_body_with_final_stop_added_as_expected(body, expected)
|
|
|
|
def test_multiple_final_stops():
|
|
body = "[$0 for $0 in $1 if $2]"
|
|
expected = "[$3 for $3 in $1 if $2]$0"
|
|
assert_body_with_final_stop_added_as_expected(body, expected)
|
|
|
|
def test_multiple_final_stops_with_default():
|
|
body = "[${0:nums} for ${0:nums} in $1 if $2]"
|
|
expected = "[${3:nums} for ${3:nums} in $1 if $2]$0"
|
|
assert_body_with_final_stop_added_as_expected(body, expected)
|
|
|
|
def test_multiple_final_stops_with_number_in_braces():
|
|
body = "[${0} for ${0} in $1 if $2]"
|
|
expected = "[${3} for ${3} in $1 if $2]$0"
|
|
assert_body_with_final_stop_added_as_expected(body, expected)
|
|
|
|
def test_duplicate_proceeding_stops():
|
|
body = "[$1 for $1 in $0]"
|
|
expected = "[$1 for $1 in $2]$0"
|
|
assert_body_with_final_stop_added_as_expected(body, expected)
|
|
|
|
def assert_variables_match_expected(
|
|
body: str,
|
|
variables: list[SnippetVariable],
|
|
expected_variables: list[SnippetVariable],
|
|
):
|
|
_, actual = snippets_parser.add_final_stop_to_snippet_body(body, variables)
|
|
assert actual == expected_variables
|
|
|
|
def create_snake_case_variable(name: str) -> SnippetVariable:
|
|
return SnippetVariable(name, insertion_formatters=["snake"])
|
|
|
|
def test_formatting_gets_moved():
|
|
body = "def $0:\n\treturn $1"
|
|
variables = [create_snake_case_variable("0")]
|
|
expected_variables = [create_snake_case_variable("2")]
|
|
assert_variables_match_expected(body, variables, expected_variables)
|
|
|
|
def test_variables_unchanged_for_smaller_variable():
|
|
body = "def $1:\n\treturn $0;"
|
|
variables = [create_snake_case_variable("1")]
|
|
expected_variables = [create_snake_case_variable("1")]
|
|
assert_variables_match_expected(body, variables, expected_variables)
|
|
|
|
def test_variables_unchanged_with_stop_at_end():
|
|
body = "def $1:\n\treturn $0"
|
|
variables = [create_snake_case_variable("1")]
|
|
expected_variables = [create_snake_case_variable("1")]
|
|
assert_variables_match_expected(body, variables, expected_variables)
|