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
|
import pytest
from textual.widgets.text_area import Document
TEXT = """I must not fear.
Fear is the mind-killer."""
TEXT_NEWLINE = TEXT + "\n"
TEXT_WINDOWS = TEXT.replace("\n", "\r\n")
TEXT_WINDOWS_NEWLINE = TEXT_NEWLINE.replace("\n", "\r\n")
@pytest.mark.parametrize(
"text", [TEXT, TEXT_NEWLINE, TEXT_WINDOWS, TEXT_WINDOWS_NEWLINE]
)
def test_text(text):
"""The text we put in is the text we get out."""
document = Document(text)
assert document.text == text
def test_lines_newline_eof():
document = Document(TEXT_NEWLINE)
assert document.lines == ["I must not fear.", "Fear is the mind-killer.", ""]
def test_lines_no_newline_eof():
document = Document(TEXT)
assert document.lines == [
"I must not fear.",
"Fear is the mind-killer.",
]
def test_lines_windows():
document = Document(TEXT_WINDOWS)
assert document.lines == ["I must not fear.", "Fear is the mind-killer."]
def test_lines_windows_newline():
document = Document(TEXT_WINDOWS_NEWLINE)
assert document.lines == ["I must not fear.", "Fear is the mind-killer.", ""]
def test_newline_unix():
document = Document(TEXT)
assert document.newline == "\n"
def test_newline_windows():
document = Document(TEXT_WINDOWS)
assert document.newline == "\r\n"
def test_get_selected_text_no_selection():
document = Document(TEXT)
selection = document.get_text_range((0, 0), (0, 0))
assert selection == ""
def test_get_selected_text_single_line():
document = Document(TEXT_WINDOWS)
selection = document.get_text_range((0, 2), (0, 6))
assert selection == "must"
def test_get_selected_text_multiple_lines_unix():
document = Document(TEXT)
selection = document.get_text_range((0, 2), (1, 2))
assert selection == "must not fear.\nFe"
def test_get_selected_text_multiple_lines_windows():
document = Document(TEXT_WINDOWS)
selection = document.get_text_range((0, 2), (1, 2))
assert selection == "must not fear.\r\nFe"
def test_get_selected_text_including_final_newline_unix():
document = Document(TEXT_NEWLINE)
selection = document.get_text_range((0, 0), (2, 0))
assert selection == TEXT_NEWLINE
def test_get_selected_text_including_final_newline_windows():
document = Document(TEXT_WINDOWS_NEWLINE)
selection = document.get_text_range((0, 0), (2, 0))
assert selection == TEXT_WINDOWS_NEWLINE
def test_get_selected_text_no_newline_at_end_of_file():
document = Document(TEXT)
selection = document.get_text_range((0, 0), (2, 0))
assert selection == TEXT
def test_get_selected_text_no_newline_at_end_of_file_windows():
document = Document(TEXT_WINDOWS)
selection = document.get_text_range((0, 0), (2, 0))
assert selection == TEXT_WINDOWS
@pytest.mark.parametrize(
"text", [TEXT, TEXT_NEWLINE, TEXT_WINDOWS, TEXT_WINDOWS_NEWLINE]
)
def test_index_from_location(text):
document = Document(text)
lines = text.split(document.newline)
assert document.get_index_from_location((0, 0)) == 0
assert document.get_index_from_location((0, len(lines[0]))) == len(lines[0])
assert document.get_index_from_location((1, 0)) == len(lines[0]) + len(
document.newline
)
assert document.get_index_from_location((len(lines) - 1, len(lines[-1]))) == len(
text
)
@pytest.mark.parametrize(
"text", [TEXT, TEXT_NEWLINE, TEXT_WINDOWS, TEXT_WINDOWS_NEWLINE]
)
def test_location_from_index(text):
document = Document(text)
lines = text.split(document.newline)
assert document.get_location_from_index(0) == (0, 0)
assert document.get_location_from_index(len(lines[0])) == (0, len(lines[0]))
if len(document.newline) > 1:
assert document.get_location_from_index(len(lines[0]) + 1) == (
0,
len(lines[0]) + 1,
)
assert document.get_location_from_index(len(lines[0]) + len(document.newline)) == (
1,
0,
)
assert document.get_location_from_index(len(text)) == (
len(lines) - 1,
len(lines[-1]),
)
@pytest.mark.parametrize(
"text", [TEXT, TEXT_NEWLINE, TEXT_WINDOWS, TEXT_WINDOWS_NEWLINE]
)
def test_document_end(text):
"""The location is always what we expect."""
document = Document(text)
expected_line_number = (
len(text.splitlines()) if text.endswith("\n") else len(text.splitlines()) - 1
)
expected_pos = 0 if text.endswith("\n") else (len(text.splitlines()[-1]))
assert document.end == (expected_line_number, expected_pos)
|