Spaces:
Running on Zero
Running on Zero
| """L2 tests for cover / extend / edit mode handlers.""" | |
| from __future__ import annotations | |
| from unittest.mock import MagicMock | |
| import pytest | |
| import modes | |
| def test_cover_requires_ref_audio(): | |
| with pytest.raises(ValueError, match="ref_audio"): | |
| modes.cover( | |
| MagicMock(), | |
| params={"prompt": "p", "lyrics": "[v]", "duration_s": 30, "ref_audio": None}, | |
| ) | |
| def test_cover_passes_audio_cover_strength(): | |
| backend = MagicMock() | |
| backend.dispatch.return_value = ("/tmp/x.wav", {}) | |
| modes.cover( | |
| backend, | |
| params={ | |
| "prompt": "p", | |
| "lyrics": "[v]", | |
| "duration_s": 30, | |
| "ref_audio": "/tmp/ref.wav", | |
| "audio_cover_strength": 0.9, | |
| "loras": [], | |
| "advanced": {}, | |
| "lm": {}, | |
| "dcw": {}, | |
| }, | |
| ) | |
| args = backend.dispatch.call_args.kwargs | |
| assert args["mode"] == "cover" | |
| assert args["params"]["audio_cover_strength"] == 0.9 | |
| assert args["params"]["ref_audio"] == "/tmp/ref.wav" | |
| def test_extend_requires_seed_audio(): | |
| with pytest.raises(ValueError, match="seed_audio"): | |
| modes.extend( | |
| MagicMock(), | |
| params={"extra_prompt": "p", "extra_duration_s": 60, "seed_audio": None}, | |
| ) | |
| def test_extend_passes_repaint_params(): | |
| backend = MagicMock() | |
| backend.dispatch.return_value = ("/tmp/x.wav", {}) | |
| modes.extend( | |
| backend, | |
| params={ | |
| "seed_audio": "/tmp/seed.wav", | |
| "extra_prompt": "more", | |
| "extra_duration_s": 60, | |
| "extension_lyrics": "[v]", | |
| "repaint_strength": 0.5, | |
| "wav_crossfade_s": 2.0, | |
| "loras": [], | |
| "advanced": {}, | |
| "lm": {}, | |
| "dcw": {}, | |
| }, | |
| ) | |
| args = backend.dispatch.call_args.kwargs | |
| assert args["mode"] == "extend" | |
| assert args["params"]["repaint_strength"] == 0.5 | |
| assert args["params"]["wav_crossfade_s"] == 2.0 | |
| def test_edit_repaint_passes_segment_bounds(): | |
| backend = MagicMock() | |
| backend.dispatch.return_value = ("/tmp/x.wav", {}) | |
| modes.edit( | |
| backend, | |
| params={ | |
| "source_audio": "/tmp/src.wav", | |
| "source_lyrics": "[v]", | |
| "target_lyrics": "[c] new", | |
| "segment_start_s": 50.0, | |
| "segment_end_s": 90.0, | |
| "sub_mode": "repaint", | |
| "repaint_strength": 0.5, | |
| "loras": [], | |
| "advanced": {}, | |
| "lm": {}, | |
| "dcw": {}, | |
| }, | |
| ) | |
| args = backend.dispatch.call_args.kwargs | |
| assert args["mode"] == "edit" | |
| assert args["params"]["segment_start_s"] == 50.0 | |
| assert args["params"]["segment_end_s"] == 90.0 | |
| assert args["params"]["sub_mode"] == "repaint" | |
| def test_edit_flow_morph_sub_mode_passes_through(): | |
| backend = MagicMock() | |
| backend.dispatch.return_value = ("/tmp/x.wav", {}) | |
| modes.edit( | |
| backend, | |
| params={ | |
| "source_audio": "/tmp/src.wav", | |
| "source_lyrics": "[v]", | |
| "target_lyrics": "[c]", | |
| "segment_start_s": 0.0, | |
| "segment_end_s": 30.0, | |
| "sub_mode": "flow_edit", | |
| "flow_source_caption": "acoustic ballad", | |
| "flow_n_min": 0.0, | |
| "flow_n_max": 1.0, | |
| "flow_n_avg": 1, | |
| "loras": [], | |
| "advanced": {}, | |
| "lm": {}, | |
| "dcw": {}, | |
| }, | |
| ) | |
| args = backend.dispatch.call_args.kwargs | |
| assert args["params"]["sub_mode"] == "flow_edit" | |
| assert args["params"]["flow_source_caption"] == "acoustic ballad" | |