pz / test /test_converter.py
github-actions[bot]
GitHub deploy: 430ada5a033af12b22377dc4dedd36c9b82e0183
35bba99
import unittest
from unittest.mock import Mock, patch, MagicMock
from pdfminer.layout import LTPage, LTChar, LTLine
from pdfminer.pdfinterp import PDFResourceManager
from pdf2zh.converter import PDFConverterEx, TranslateConverter
class TestPDFConverterEx(unittest.TestCase):
def setUp(self):
self.rsrcmgr = PDFResourceManager()
self.converter = PDFConverterEx(self.rsrcmgr)
def test_begin_page(self):
mock_page = Mock()
mock_page.pageno = 1
mock_page.cropbox = (0, 0, 100, 200)
mock_ctm = [1, 0, 0, 1, 0, 0]
self.converter.begin_page(mock_page, mock_ctm)
self.assertIsNotNone(self.converter.cur_item)
self.assertEqual(self.converter.cur_item.pageid, 1)
def test_render_char(self):
mock_matrix = (1, 2, 3, 4, 5, 6)
mock_font = Mock()
mock_font.to_unichr.return_value = "A"
mock_font.char_width.return_value = 10
mock_font.char_disp.return_value = (0, 0)
graphic_state = Mock()
self.converter.cur_item = Mock()
result = self.converter.render_char(
mock_matrix,
mock_font,
fontsize=12,
scaling=1.0,
rise=0,
cid=65,
ncs=None,
graphicstate=graphic_state,
)
self.assertEqual(result, 120.0) # Expected text width
class TestTranslateConverter(unittest.TestCase):
def setUp(self):
self.rsrcmgr = PDFResourceManager()
self.layout = {1: Mock()}
self.translator_class = Mock()
self.converter = TranslateConverter(
self.rsrcmgr,
layout=self.layout,
lang_in="en",
lang_out="zh",
service="google",
)
def test_translator_initialization(self):
self.assertIsNotNone(self.converter.translator)
self.assertEqual(self.converter.translator.lang_in, "en")
self.assertEqual(self.converter.translator.lang_out, "zh-CN")
@patch("pdf2zh.converter.TranslateConverter.receive_layout")
def test_receive_layout(self, mock_receive_layout):
mock_page = LTPage(1, (0, 0, 100, 200))
mock_font = Mock()
mock_font.fontname.return_value = "mock_font"
mock_page.add(
LTChar(
matrix=(1, 2, 3, 4, 5, 6),
font=mock_font,
fontsize=12,
scaling=1.0,
rise=0,
text="A",
textwidth=10,
textdisp=(1.0, 1.0),
ncs=Mock(),
graphicstate=Mock(),
)
)
self.converter.receive_layout(mock_page)
mock_receive_layout.assert_called_once_with(mock_page)
def test_receive_layout_with_complex_formula(self):
ltpage = LTPage(1, (0, 0, 500, 500))
ltchar = Mock()
ltchar.fontname.return_value = "mock_font"
ltline = LTLine(0.1, (0, 0), (10, 20))
ltpage.add(ltchar)
ltpage.add(ltline)
mock_layout = MagicMock()
mock_layout.shape = (100, 100)
mock_layout.__getitem__.return_value = -1
self.converter.layout = [None, mock_layout]
self.converter.thread = 1
result = self.converter.receive_layout(ltpage)
self.assertIsNotNone(result)
def test_invalid_translation_service(self):
with self.assertRaises(ValueError):
TranslateConverter(
self.rsrcmgr,
layout=self.layout,
lang_in="en",
lang_out="zh",
service="InvalidService",
)
if __name__ == "__main__":
unittest.main()