50 lines
2.3 KiB
Python
50 lines
2.3 KiB
Python
"""Regression guards for the Documents editor scrolling UI.
|
|
|
|
Issues #1501 and #1496 both come from the same surface: the document editor
|
|
hid its real textarea scrollbar, and the line-number gutter tried to scroll an
|
|
overflow-hidden element. Long wrapped lines add another wrinkle: the textarea
|
|
can have more visual rows than logical newline rows, so the gutter rows must
|
|
match the textarea's measured row heights. Keep these as static checks because
|
|
document.js is browser-coupled and not importable in pytest.
|
|
"""
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
DOC_JS = (ROOT / "static/js/document.js").read_text()
|
|
STYLE_CSS = (ROOT / "static/style.css").read_text()
|
|
|
|
|
|
def test_document_textarea_scrollbar_is_visible():
|
|
textarea_rule_start = STYLE_CSS.index(".doc-editor-textarea {\n position: absolute;")
|
|
textarea_rule_end = STYLE_CSS.index(".doc-editor-textarea::placeholder", textarea_rule_start)
|
|
textarea_css = STYLE_CSS[textarea_rule_start:textarea_rule_end]
|
|
|
|
assert "overflow-y: scroll;" in textarea_css
|
|
assert "scrollbar-width: thin;" in textarea_css
|
|
assert ".doc-editor-textarea::-webkit-scrollbar { width: 8px; }" in STYLE_CSS
|
|
assert ".doc-editor-textarea::-webkit-scrollbar { display: none; }" not in STYLE_CSS
|
|
|
|
|
|
def test_line_number_gutter_translates_inner_content():
|
|
assert "function _lineNumberContentEl(gutter)" in DOC_JS
|
|
assert "inner.className = 'doc-line-number-content';" in DOC_JS
|
|
assert ".style.transform = `translateY(${-textarea.scrollTop}px)`;" in DOC_JS
|
|
assert "gutter.scrollTop = textarea.scrollTop;" not in DOC_JS
|
|
assert ".doc-line-number-content" in STYLE_CSS
|
|
|
|
|
|
def test_line_number_gutter_accounts_for_wrapped_rows():
|
|
assert "function _measureLineNumberHeights(textarea, lines, textWidth, style)" in DOC_JS
|
|
assert "probe = document.createElement('textarea');" in DOC_JS
|
|
assert "probe.wrap = 'soft';" in DOC_JS
|
|
assert "probe.value = line || ' ';" in DOC_JS
|
|
assert "Math.round(probe.scrollHeight / lineHeight)" in DOC_JS
|
|
assert "row.style.height = `${heights[i]}px`;" in DOC_JS
|
|
assert "label.className = 'doc-line-number-label';" in DOC_JS
|
|
assert "inner.textContent = lines;" not in DOC_JS
|
|
assert ".doc-line-number-row" in STYLE_CSS
|
|
assert ".doc-line-number-label" in STYLE_CSS
|
|
assert ".doc-line-number-measure" in STYLE_CSS
|