82 lines
3.5 KiB
Python
82 lines
3.5 KiB
Python
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
from unittest.mock import Mock
|
|
|
|
import pymupdf
|
|
|
|
from copienator.commands.page_splitter import PDFPreviewer, PAGE_SPLITTER_KB
|
|
|
|
|
|
class ReversePagesTests(unittest.TestCase):
|
|
def test_reverse_restarts_with_fresh_settings_and_exports_reversed_pages(self):
|
|
with tempfile.TemporaryDirectory() as temporary:
|
|
source = Path(temporary) / "copy.pdf"
|
|
with pymupdf.open() as document:
|
|
for index in range(3):
|
|
page = document.new_page(width=200 + 20 * index, height=300)
|
|
page.insert_text((30, 30), f"Page {index + 1}")
|
|
document.save(source)
|
|
original = source.read_bytes()
|
|
preview = PDFPreviewer.__new__(PDFPreviewer)
|
|
preview.doc = pymupdf.open(source)
|
|
self.addCleanup(lambda: None if preview.doc.is_closed else preview.doc.close())
|
|
preview.current_page_index = 2
|
|
preview.page_settings = [{"keep": "none"}, {"keep": "left"}]
|
|
preview.current_rotation = 180
|
|
preview.file_rotation = 180
|
|
preview.global_rotation = 180
|
|
preview.processing = False
|
|
preview.load_page = Mock()
|
|
|
|
preview.reverse_pages()
|
|
|
|
self.assertEqual([page.get_text().strip() for page in preview.doc],
|
|
["Page 3", "Page 2", "Page 1"])
|
|
self.assertEqual(preview.current_page_index, 0)
|
|
self.assertEqual(preview.page_settings, [])
|
|
self.assertEqual(preview.current_line_x, 120)
|
|
self.assertEqual(preview.current_rotation, 0)
|
|
self.assertEqual((preview.file_rotation, preview.global_rotation), (180, 180))
|
|
preview.load_page.assert_called_once_with()
|
|
self.assertEqual(source.read_bytes(), original)
|
|
|
|
preview.reverse_pages()
|
|
self.assertEqual([page.get_text().strip() for page in preview.doc],
|
|
["Page 1", "Page 2", "Page 3"])
|
|
preview.reverse_pages()
|
|
|
|
preview.base_name = "copy"
|
|
preview.split_dir = Path(temporary) / "split"
|
|
preview.reorder_dir = Path(temporary) / "reorder"
|
|
preview.final_file = Path(temporary) / "result.pdf"
|
|
preview.output_dir = None
|
|
preview.page_settings = [
|
|
{"keep": "as_is", "rotation": 0, "line_x": page.rect.width / 2}
|
|
for page in preview.doc
|
|
]
|
|
preview.split_pdf()
|
|
preview.reorder_pdfs()
|
|
preview.concate_files()
|
|
with pymupdf.open(preview.final_file) as result:
|
|
self.assertEqual([page.get_text().strip() for page in result],
|
|
["Page 3", "Page 2", "Page 1"])
|
|
|
|
def test_single_page_can_restart_and_processing_ignores_shortcut(self):
|
|
preview = PDFPreviewer.__new__(PDFPreviewer)
|
|
preview.doc = pymupdf.open()
|
|
self.addCleanup(preview.doc.close)
|
|
preview.doc.new_page()
|
|
preview.processing = True
|
|
preview.load_page = Mock()
|
|
preview.reverse_pages()
|
|
preview.load_page.assert_not_called()
|
|
preview.processing = False
|
|
preview.reverse_pages()
|
|
self.assertEqual(preview.current_page_index, 0)
|
|
self.assertEqual(preview.page_settings, [])
|
|
preview.load_page.assert_called_once_with()
|
|
|
|
def test_shortcut_available_with_personal_configuration(self):
|
|
self.assertEqual(PAGE_SPLITTER_KB["reverse_pages"], "i")
|