Files
md-vector-db/tests/test_splitters_epub.py
T

70 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""EPUBSplitter 测试."""
import pytest
class TestEPUBSplitterMissingDep:
"""缺失依赖时的行为测试(不 skip 整个文件)."""
def test_split_raises_clear_import_error(self, monkeypatch):
"""未安装 ebooklib 时给出明确提示."""
from src.core.splitters.epub import EPUBSplitter
s = EPUBSplitter()
import builtins
original_import = builtins.__import__
def mock_import(name, *args, **kwargs):
if name == "ebooklib" or name.startswith("ebooklib."):
raise ImportError("No module named 'ebooklib'")
return original_import(name, *args, **kwargs)
monkeypatch.setattr(builtins, "__import__", mock_import)
with pytest.raises(ImportError, match="ebooklib"):
s.split("dummy.epub", source_file="test.epub")
class TestEPUBSplitter:
"""EPUBSplitter 测试(需 ebooklib."""
ebooklib = pytest.importorskip("ebooklib", reason="ebooklib 未安装")
def test_split_simple_epub(self, tmp_path):
"""用 ebooklib 创建一个简单 EPUB 并测试分块."""
from ebooklib import epub
from src.core.splitters.epub import EPUBSplitter
epub_path = tmp_path / "test.epub"
book = epub.EpubBook()
book.set_identifier("test123")
book.set_title("测试书名")
book.set_language("zh")
chapter = epub.EpubHtml(
title="第一章",
file_name="chap01.xhtml",
lang="zh",
)
chapter.content = "<h1>第一章</h1><p>这是EPUB电子书的内容。</p><p>第二段文字在这里。</p>"
book.add_item(chapter)
book.toc = [epub.Link("chap01.xhtml", "第一章", "chap01")]
book.add_item(epub.EpubNcx())
book.add_item(epub.EpubNav())
book.spine = ["nav", chapter]
epub.write_epub(str(epub_path), book)
s = EPUBSplitter(max_size=500)
chunks = s.split(str(epub_path), source_file="test.epub")
assert len(chunks) >= 1
all_text = "".join(c["content"] for c in chunks)
assert "第一章" in all_text
assert "EPUB电子书" in all_text
assert "第二段文字" in all_text
def test_epub_has_split_method(self):
"""EPUBSplitter 遵循 Splitter Protocol."""
from src.core.splitters.epub import EPUBSplitter
s = EPUBSplitter()
assert hasattr(s, "split")