137 lines
5.1 KiB
Python
137 lines
5.1 KiB
Python
#!/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函數測試失敗") |