mirror of
https://github.com/denizsafak/abogen.git
synced 2026-07-18 21:50:28 +02:00
- Extract FFmpeg metadata functions to infrastructure/exporters.py as ExportService - _escape_ffmetadata_value → _escape_ffmetadata_value - _render_ffmetadata → render_ffmetadata - _write_ffmetadata_file → write_ffmetadata_file - _metadata_to_ffmpeg_args → _metadata_to_ffmpeg_args - _apply_m4b_chapters_with_mutagen → _apply_m4b_chapters_mutagen - _embed_m4b_metadata → embed_m4b_metadata - Add tests/test_exporters.py with 28 tests for ExportService - Update tests/test_ffmetadata.py to use ExportService - Update conversion_runner.py to use ExportService - All tests pass with new implementation matching old behavior
42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from abogen.infrastructure.exporters import ExportService
|
|
|
|
|
|
svc = ExportService()
|
|
|
|
|
|
def test_render_ffmetadata_includes_chapters(tmp_path):
|
|
metadata = {
|
|
"title": "Sample Book",
|
|
"artist": "Author Name",
|
|
"comment": "Line one\nLine two",
|
|
"publisher": "ACME=Corp",
|
|
}
|
|
chapters = [
|
|
{"start": 0.0, "end": 5.0, "title": "Intro", "voice": "voice_a"},
|
|
{"start": 5.0, "end": 12.345, "title": "Chapter 2"},
|
|
]
|
|
|
|
rendered = svc.render_ffmetadata(metadata, chapters)
|
|
|
|
assert ";FFMETADATA1" in rendered
|
|
assert "title=Sample Book" in rendered
|
|
assert "artist=Author Name" in rendered
|
|
assert "comment=Line one\\nLine two" in rendered
|
|
assert "publisher=ACME\\=Corp" in rendered
|
|
assert rendered.count("[CHAPTER]") == 2
|
|
assert "START=0" in rendered
|
|
assert "END=5000" in rendered
|
|
assert "voice=voice_a" in rendered
|
|
|
|
audio_path = tmp_path / "book.m4b"
|
|
metadata_path = svc.write_ffmetadata_file(audio_path, metadata, chapters)
|
|
assert metadata_path is not None
|
|
assert metadata_path.exists()
|
|
|
|
content = metadata_path.read_text(encoding="utf-8")
|
|
assert "END=12345" in content
|
|
|
|
metadata_path.unlink()
|