PDFTranslator / test /test_converter.py
hoang.nguyen6
deploy
f66643d unverified
Raw
History Blame Contribute Delete
3.68 kB
import unittest
from unittest.mock import MagicMock, Mock, patch
from pdfminer.layout import LTChar, LTLine, LTPage
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()