Files
Document_Translator/test_append_after_function.py
2025-09-03 09:05:51 +08:00

137 lines
5.1 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.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
測試_append_after函數是否正常工作
"""
import sys
import os
import tempfile
from pathlib import Path
# Fix encoding for Windows console
if sys.stdout.encoding != 'utf-8':
sys.stdout.reconfigure(encoding='utf-8')
if sys.stderr.encoding != 'utf-8':
sys.stderr.reconfigure(encoding='utf-8')
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'app'))
from app.services.document_processor import _append_after, _is_our_insert_block
def test_append_after_function():
"""測試_append_after函數是否正常工作"""
print("=== 測試_append_after函數 ===")
try:
from docx import Document
from docx.shared import Pt
# 創建測試文檔
doc = Document()
# 添加原始段落
original_para = doc.add_paragraph("這是原始中文段落。")
print(f"✅ 創建原始段落: {original_para.text}")
# 使用_append_after插入英文翻譯
translation_text = "This is the English translation."
try:
new_para = _append_after(original_para, translation_text, italic=True, font_size_pt=12)
print(f"✅ 使用_append_after插入翻譯: {new_para.text}")
# 檢查插入的段落是否有我們的標記
if _is_our_insert_block(new_para):
print(f"✅ 翻譯段落包含零寬空格標記")
else:
print(f"❌ 翻譯段落缺少零寬空格標記")
# 檢查格式是否正確
if new_para.runs and new_para.runs[0].italic:
print(f"✅ 翻譯段落格式正確(斜體)")
else:
print(f"❌ 翻譯段落格式不正確")
except Exception as e:
print(f"❌ _append_after插入失敗: {e}")
return False
# 再插入一個翻譯來測試鏈式插入
try:
vietnamese_translation = "Đây là bản dịch tiếng Việt."
new_para2 = _append_after(new_para, vietnamese_translation, italic=True, font_size_pt=12)
print(f"✅ 鏈式插入第二個翻譯: {new_para2.text}")
except Exception as e:
print(f"❌ 鏈式插入失敗: {e}")
# 保存測試文檔
test_file = Path(tempfile.gettempdir()) / "test_append_after.docx"
doc.save(str(test_file))
print(f"✅ 測試文檔保存至: {test_file}")
# 重新讀取文檔驗證
try:
doc2 = Document(str(test_file))
paragraphs = [p.text.strip() for p in doc2.paragraphs if p.text.strip()]
print(f"\n📄 測試文檔內容驗證:")
print(f"總段落數: {len(paragraphs)}")
for i, para_text in enumerate(paragraphs):
has_chinese = any('\u4e00' <= c <= '\u9fff' for c in para_text)
has_english = any(ord(c) < 128 and c.isalpha() for c in para_text)
has_vietnamese = any('\u00C0' <= c <= '\u1EF9' for c in para_text)
lang_info = []
if has_chinese:
lang_info.append("中文")
if has_english:
lang_info.append("英文")
if has_vietnamese:
lang_info.append("越南文")
print(f" 段落 {i+1}: [{'/'.join(lang_info)}] {para_text}")
# 檢查是否有正確的交錯格式
expected_sequence = [
("中文", "這是原始中文段落。"),
("英文", "This is the English translation."),
("越南文", "Đây là bản dịch tiếng Việt.")
]
success = True
for i, (expected_lang, expected_text) in enumerate(expected_sequence):
if i < len(paragraphs):
actual_text = paragraphs[i]
if expected_text in actual_text:
print(f" ✅ 段落 {i+1} 包含預期的{expected_lang}內容")
else:
print(f" ❌ 段落 {i+1} 不包含預期的{expected_lang}內容")
success = False
else:
print(f" ❌ 缺少第 {i+1} 個段落")
success = False
if success:
print(f"\n✅ _append_after函數工作正常")
return True
else:
print(f"\n❌ _append_after函數有問題")
return False
except Exception as e:
print(f"❌ 讀取測試文檔失敗: {e}")
return False
except Exception as e:
print(f"❌ 測試失敗: {e}")
return False
if __name__ == "__main__":
success = test_append_after_function()
if success:
print(f"\n🎉 _append_after函數測試通過")
else:
print(f"\n💥 _append_after函數測試失敗")