mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-10-27 08:12:22 +01:00
53 lines
2.5 KiB
Python
53 lines
2.5 KiB
Python
import pathlib
|
|
|
|
ROOT = pathlib.Path(__file__).resolve().parents[1]
|
|
PANEL = (ROOT / "static/js/editor/layer-panel.js").read_text(encoding="utf-8")
|
|
SORT = (ROOT / "static/js/dragSort.js").read_text(encoding="utf-8")
|
|
CSS = (ROOT / "static/css/13-image-editor.css").read_text(encoding="utf-8")
|
|
|
|
|
|
def test_effect_rows_can_be_dragged_onto_layers_to_copy_them():
|
|
# Photoshop-style: drag an effect sub-row onto another layer/group and it
|
|
# is copied there (the source keeps its effect).
|
|
assert "function cloneEffectForCopy(effect) {" in PANEL
|
|
assert "function wireEffectDrag(sub, owner, effect) {" in PANEL
|
|
assert "wireEffectDrag(sub, group, effect);" in PANEL
|
|
assert "wireEffectDrag(sub, layer, effect);" in PANEL
|
|
assert "'.ge-layer-item[data-layer-id], .ge-layer-group-row[data-group-id]'" in PANEL
|
|
assert "layer.effects.push(cloneEffectForCopy(effect));" in PANEL
|
|
assert "saveState(`Copy ${effectLabel(effect.type)}`);" in PANEL
|
|
assert "copied to ${layer.name}" in PANEL
|
|
|
|
|
|
def test_effect_copy_gets_fresh_ids_and_its_own_mask_canvas():
|
|
clone = PANEL[PANEL.index("function cloneEffectForCopy(effect) {"):]
|
|
clone = clone[:clone.index("\n }")]
|
|
assert "id: `effect-${Math.random().toString(36).slice(2, 9)}`," in clone
|
|
assert "id: `effect-mask-${Math.random().toString(36).slice(2, 9)}`" in clone
|
|
assert "const canvas = document.createElement('canvas');" in clone
|
|
assert "canvas.getContext('2d').drawImage(effect.mask.canvas, 0, 0);" in clone
|
|
assert "copy.mask.canvas = canvas;" in clone
|
|
assert "copy.mask.ctx = canvas.getContext('2d');" in clone
|
|
|
|
|
|
def test_effect_drag_does_not_start_the_layer_reorder():
|
|
enable = PANEL[PANEL.index("dragSortModule.enable('ge-layers-list'"):]
|
|
enable = enable[:enable.index("onReorder:")]
|
|
assert ".ge-adj-sub-item" in enable
|
|
# A drop re-renders the list mid-drag, so the snap-back must bail out when
|
|
# the placeholder/dragged row were already detached.
|
|
assert "if (!placeholder.parentNode || !draggedEl.isConnected) {" in SORT
|
|
assert "placeholder.remove();\n return;" in SORT
|
|
|
|
|
|
def test_effect_drag_has_ghost_and_drop_target_styles():
|
|
assert ".ge-effect-drag-ghost {" in CSS
|
|
ghost = CSS[CSS.index(".ge-effect-drag-ghost {"):]
|
|
ghost = ghost[:ghost.index("}")]
|
|
assert "position: fixed;" in ghost
|
|
assert "pointer-events: none;" in ghost
|
|
assert "z-index: 10030;" in ghost
|
|
assert ".ge-layer-item.is-effect-drop-target," in CSS
|
|
assert ".ge-layer-group-row.is-effect-drop-target {" in CSS
|
|
assert ".ge-layer-item.is-effect-dragging {" in CSS
|