54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
"""DocxSplitter 测试."""
|
|
import pytest
|
|
|
|
pytest.importorskip("markitdown", reason="需要 markitdown 库")
|
|
|
|
from src.core.splitters.docx import DocxSplitter
|
|
|
|
|
|
def test_docx_splitter_creates():
|
|
"""创建 DocxSplitter 实例."""
|
|
s = DocxSplitter(max_size=500, overlap=50)
|
|
assert s is not None
|
|
|
|
|
|
def test_docx_splitter_empty_text():
|
|
"""空纯文本返回空列表."""
|
|
s = DocxSplitter()
|
|
result = s.split(" ", source_file="empty.docx")
|
|
assert result == []
|
|
|
|
|
|
def test_docx_splitter_basic_text():
|
|
"""基本文本文档分块."""
|
|
s = DocxSplitter(max_size=200, overlap=20)
|
|
text = "段落A。\n\n段落B。\n\n段落C。"
|
|
result = s.split(text, source_file="test.docx")
|
|
assert len(result) >= 1
|
|
assert all("content" in r for r in result)
|
|
assert all(r["source_file"] == "test.docx" for r in result)
|
|
|
|
|
|
def test_docx_splitter_long_text():
|
|
"""长文本分多块."""
|
|
s = DocxSplitter(max_size=100, overlap=10)
|
|
text = "这是一段非常长的文本。\n\n" * 50
|
|
result = s.split(text, source_file="long.docx")
|
|
assert len(result) >= 5
|
|
|
|
|
|
def test_docx_splitter_source_file():
|
|
"""source_file 正确传递到每个 chunk."""
|
|
s = DocxSplitter(max_size=500, overlap=50)
|
|
result = s.split("测试内容。", source_file="myfile.docx")
|
|
assert all(r["source_file"] == "myfile.docx" for r in result)
|
|
|
|
|
|
def test_docx_splitter_chunk_index():
|
|
"""chunk_index 从 0 递增."""
|
|
s = DocxSplitter(max_size=100, overlap=10)
|
|
text = "chunk A。\n\n" * 20
|
|
result = s.split(text, source_file="index.docx")
|
|
indices = [r["chunk_index"] for r in result]
|
|
assert indices == list(range(len(result)))
|