Files
odysseus/tests/test_editor_layer_thumbnail_render.py
T

65 lines
2.6 KiB
Python

from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
def test_hover_thumbnail_uses_rendered_layer_output():
source = (ROOT / "static/js/galleryEditor.js").read_text()
start = source.index("function _showLayerThumb")
end = source.index("function _hideLayerThumb", start)
block = source[start:end]
assert "const preview = _renderLayerOutput(layer) || layer.canvas;" in block
assert "const lw = preview.width, lh = preview.height;" in block
assert "ctx.drawImage(preview, 0, 0, tw, th);" in block
assert "c.setAttribute('role', 'img');" in block
assert "c.setAttribute('aria-label', `${layer.name || 'Layer'} preview`);" in block
def test_inline_layer_rows_share_the_common_thumbnail_renderer():
panel = (ROOT / "static/js/editor/layer-panel.js").read_text()
assert "const previewCanvas = renderLayer?.(layer) || layer.canvas;" in panel
assert "const thumb = createInlineThumbnail(previewCanvas, `${layer.name} preview`);" in panel
assert "thumbCtx.fillStyle = ((x / tile + y / tile) & 1)" not in panel
def test_inline_thumbnails_are_exposed_as_labeled_images():
panel = (ROOT / "static/js/editor/layer-panel.js").read_text()
assert "thumb.setAttribute('role', 'img');" in panel
assert "thumb.setAttribute('aria-label', title);" in panel
def test_layer_rows_support_keyboard_selection_without_stealing_control_keys():
panel = (ROOT / "static/js/editor/layer-panel.js").read_text()
assert "item.tabIndex = 0;" in panel
assert "item.setAttribute('aria-pressed'" in panel
assert "e.target !== item || (e.key !== 'Enter' && e.key !== ' ')" in panel
def test_group_rows_support_keyboard_selection():
panel = (ROOT / "static/js/editor/layer-panel.js").read_text()
assert "row.tabIndex = 0;" in panel
assert "row.setAttribute('aria-label', `${group.name} group`);" in panel
assert "event.target !== row || (event.key !== 'Enter' && event.key !== ' ')" in panel
def test_keyboard_focus_is_visible_for_layer_and_group_rows():
styles = (ROOT / "static/style.css").read_text()
assert ".ge-layer-item:focus-visible," in styles
assert ".ge-layer-group-row:focus-visible" in styles
assert "outline: 1px solid var(--accent, var(--red));" in styles
def test_layer_subrows_are_keyboard_reachable():
panel = (ROOT / "static/js/editor/layer-panel.js").read_text()
assert "sub.tabIndex = 0;" in panel
assert "sub.setAttribute('aria-label', `${mk.name || (mk.mode === 'layer' ? 'Layer Mask' : 'AI Mask')} mask`);" in panel
assert "const activateMask = () => {" in panel