feat: Merge sequence — add (file/selection), reorder, remove

This commit is contained in:
2026-07-02 16:04:01 +02:00
parent de7da3cad6
commit b8aa1606d8
2 changed files with 110 additions and 5 deletions
+47
View File
@@ -412,3 +412,50 @@ def test_audition_button_present_and_safe(win):
assert win._btn_audio_play.isChecked() is False
assert win._btn_audio_play.text() == "▶ Play"
assert win._audition_proc is None
def test_merge_list_add_remove_reorder(win, tmp_path):
from PyQt6.QtCore import Qt
a = tmp_path / "a.wav"; b = tmp_path / "b.wav"
a.write_bytes(b""); b.write_bytes(b"")
win._merge_add_paths([str(a), str(b)])
assert win._merge_list.count() == 2
assert win._merge_list.item(0).data(Qt.ItemDataRole.UserRole) == str(a)
win._merge_list.setCurrentRow(1)
win._merge_move(-1) # move b up
assert win._merge_list.item(0).data(Qt.ItemDataRole.UserRole) == str(b)
win._merge_list.setCurrentRow(0)
win._merge_remove_selected()
assert win._merge_list.count() == 1
def test_merge_add_selection_no_file_safe(win):
win._file_path = ""
win._merge_list.clear()
win._on_merge_add_selection() # must not raise
assert win._merge_list.count() == 0
def test_merge_move_bounds_safe(win, tmp_path):
a = tmp_path / "a.wav"; b = tmp_path / "b.wav"; a.write_bytes(b""); b.write_bytes(b"")
win._merge_list.clear()
win._merge_add_paths([str(a), str(b)])
win._merge_list.setCurrentRow(0)
win._merge_move(-1) # already top -> no-op
assert win._merge_list.currentRow() == 0
win._merge_list.setCurrentRow(1)
win._merge_move(1) # already bottom -> no-op
assert win._merge_list.currentRow() == 1
win._merge_list.setCurrentRow(-1)
win._merge_move(1) # no selection -> safe
win._merge_remove_selected() # no selection -> safe
assert win._merge_list.count() == 2
def test_merge_add_stores_duration_role(win, tmp_path):
from PyQt6.QtCore import Qt
a = tmp_path / "a.wav"; a.write_bytes(b"")
win._merge_list.clear()
win._merge_add_paths([str(a)])
# empty fixture -> ffprobe fails -> duration is None; M4 must tolerate None
assert win._merge_list.item(0).data(Qt.ItemDataRole.UserRole + 1) is None