feat: Merge sequence — add (file/selection), reorder, remove
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user