[AI]
ГОСТ
This commit is contained in:
145
tests/test_page_layout.py
Normal file
145
tests/test_page_layout.py
Normal file
@@ -0,0 +1,145 @@
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
from docx import Document
|
||||
from src.core.style_registry import StyleRegistry
|
||||
|
||||
def test_apply_page_layout_all_margins():
|
||||
"""Тест: все поля заданы."""
|
||||
yaml_content = """
|
||||
page:
|
||||
margins:
|
||||
top: 2.0
|
||||
bottom: 2.0
|
||||
left: 3.0
|
||||
right: 1.0
|
||||
styles:
|
||||
Normal:
|
||||
font:
|
||||
name: "Arial"
|
||||
size: 12
|
||||
"""
|
||||
yaml_path = Path("tests/fixtures/test_layout_all.yaml")
|
||||
yaml_path.parent.mkdir(exist_ok=True)
|
||||
yaml_path.write_text(yaml_content, encoding="utf-8")
|
||||
|
||||
doc = Document()
|
||||
style_reg = StyleRegistry(yaml_path)
|
||||
style_reg.apply_page_layout(doc)
|
||||
|
||||
section = doc.sections[0]
|
||||
assert abs(section.top_margin.cm - 2.0) < 0.01
|
||||
assert abs(section.bottom_margin.cm - 2.0) < 0.01
|
||||
assert abs(section.left_margin.cm - 3.0) < 0.01
|
||||
assert abs(section.right_margin.cm - 1.0) < 0.01
|
||||
|
||||
yaml_path.unlink(missing_ok=True)
|
||||
|
||||
def test_apply_page_layout_partial_margins():
|
||||
"""Тест: заданы не все поля."""
|
||||
yaml_content = """
|
||||
page:
|
||||
margins:
|
||||
top: 1.5
|
||||
left: 2.5
|
||||
styles:
|
||||
Normal:
|
||||
font:
|
||||
name: "Arial"
|
||||
size: 12
|
||||
"""
|
||||
yaml_path = Path("tests/fixtures/test_layout_partial.yaml")
|
||||
yaml_path.parent.mkdir(exist_ok=True)
|
||||
yaml_path.write_text(yaml_content, encoding="utf-8")
|
||||
|
||||
doc = Document()
|
||||
style_reg = StyleRegistry(yaml_path)
|
||||
style_reg.apply_page_layout(doc)
|
||||
|
||||
section = doc.sections[0]
|
||||
assert abs(section.top_margin.cm - 1.5) < 0.01
|
||||
assert abs(section.left_margin.cm - 2.5) < 0.01
|
||||
# Остальные поля не должны измениться (остаются по умолчанию)
|
||||
# У docx по умолчанию: top=2.54, bottom=2.54, left=3.17, right=3.17
|
||||
# Но мы их не трогаем, если в YAML нет
|
||||
|
||||
yaml_path.unlink(missing_ok=True)
|
||||
|
||||
def test_apply_page_layout_no_page_section():
|
||||
"""Тест: в YAML нет секции page."""
|
||||
yaml_content = """
|
||||
styles:
|
||||
Normal:
|
||||
font:
|
||||
name: "Arial"
|
||||
size: 12
|
||||
"""
|
||||
yaml_path = Path("tests/fixtures/test_layout_no_page.yaml")
|
||||
yaml_path.parent.mkdir(exist_ok=True)
|
||||
yaml_path.write_text(yaml_content, encoding="utf-8")
|
||||
|
||||
doc = Document()
|
||||
style_reg = StyleRegistry(yaml_path)
|
||||
style_reg.apply_page_layout(doc)
|
||||
|
||||
section = doc.sections[0]
|
||||
# Поля не должны измениться (остаются по умолчанию)
|
||||
# top=2.54 cm по умолчанию
|
||||
assert abs(section.top_margin.cm - 2.54) < 0.01
|
||||
|
||||
yaml_path.unlink(missing_ok=True)
|
||||
|
||||
def test_apply_page_layout_no_margins():
|
||||
"""Тест: в YAML есть page, но нет margins."""
|
||||
yaml_content = """
|
||||
page:
|
||||
other_option: value
|
||||
styles:
|
||||
Normal:
|
||||
font:
|
||||
name: "Arial"
|
||||
size: 12
|
||||
"""
|
||||
yaml_path = Path("tests/fixtures/test_layout_no_margins.yaml")
|
||||
yaml_path.parent.mkdir(exist_ok=True)
|
||||
yaml_path.write_text(yaml_content, encoding="utf-8")
|
||||
|
||||
doc = Document()
|
||||
style_reg = StyleRegistry(yaml_path)
|
||||
style_reg.apply_page_layout(doc)
|
||||
|
||||
section = doc.sections[0]
|
||||
# Поля не должны измениться
|
||||
assert abs(section.top_margin.cm - 2.54) < 0.01
|
||||
|
||||
yaml_path.unlink(missing_ok=True)
|
||||
|
||||
def test_apply_page_layout_zero_margins():
|
||||
"""Тест: нулевые поля."""
|
||||
yaml_content = """
|
||||
page:
|
||||
margins:
|
||||
top: 0.0
|
||||
bottom: 0.0
|
||||
left: 0.0
|
||||
right: 0.0
|
||||
styles:
|
||||
Normal:
|
||||
font:
|
||||
name: "Arial"
|
||||
size: 12
|
||||
"""
|
||||
yaml_path = Path("tests/fixtures/test_layout_zero.yaml")
|
||||
yaml_path.parent.mkdir(exist_ok=True)
|
||||
yaml_path.write_text(yaml_content, encoding="utf-8")
|
||||
|
||||
doc = Document()
|
||||
style_reg = StyleRegistry(yaml_path)
|
||||
style_reg.apply_page_layout(doc)
|
||||
|
||||
section = doc.sections[0]
|
||||
assert abs(section.top_margin.cm - 0.0) < 0.01
|
||||
assert abs(section.bottom_margin.cm - 0.0) < 0.01
|
||||
assert abs(section.left_margin.cm - 0.0) < 0.01
|
||||
assert abs(section.right_margin.cm - 0.0) < 0.01
|
||||
|
||||
yaml_path.unlink(missing_ok=True)
|
||||
Reference in New Issue
Block a user