[AI]
ГОСТ
This commit is contained in:
87
tests/test_style_registry.py
Normal file
87
tests/test_style_registry.py
Normal file
@@ -0,0 +1,87 @@
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
from docx import Document
|
||||
from src.core.style_registry import StyleRegistry
|
||||
|
||||
def test_apply_style_font_and_color():
|
||||
yaml_content = """
|
||||
styles:
|
||||
TestStyle:
|
||||
font:
|
||||
name: "Arial"
|
||||
size: 16
|
||||
bold: true
|
||||
italic: true
|
||||
color: "FF0000" # красный
|
||||
paragraph:
|
||||
alignment: center
|
||||
space_before: 10
|
||||
space_after: 5
|
||||
"""
|
||||
yaml_path = Path("tests/fixtures/test_style.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.ensure_styles_in_doc(doc)
|
||||
|
||||
# Проверим, что стиль создался
|
||||
style = doc.styles["TestStyle"]
|
||||
assert style.font.name == "Arial"
|
||||
assert style.font.size.pt == 16
|
||||
assert style.font.bold is True
|
||||
assert style.font.italic is True
|
||||
assert style.font.color.rgb == (0xFF, 0x00, 0x00)
|
||||
|
||||
# Проверим paragraph_format
|
||||
pf = style.paragraph_format
|
||||
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
||||
assert pf.alignment == WD_ALIGN_PARAGRAPH.CENTER
|
||||
assert pf.space_before.pt == 10
|
||||
assert pf.space_after.pt == 5
|
||||
|
||||
yaml_path.unlink(missing_ok=True)
|
||||
|
||||
def test_apply_style_with_defaults():
|
||||
yaml_content = """
|
||||
styles:
|
||||
TestStyle:
|
||||
font:
|
||||
name: "Times New Roman"
|
||||
size: 14
|
||||
"""
|
||||
yaml_path = Path("tests/fixtures/test_style_defaults.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.ensure_styles_in_doc(doc)
|
||||
|
||||
style = doc.styles["TestStyle"]
|
||||
assert style.font.name == "Times New Roman"
|
||||
assert style.font.size.pt == 14
|
||||
# Проверим, что остальные параметры не изменились (None означает "не задано")
|
||||
assert style.font.bold is None
|
||||
assert style.font.italic is None
|
||||
|
||||
yaml_path.unlink(missing_ok=True)
|
||||
|
||||
def test_get_color():
|
||||
yaml_content = """
|
||||
colors:
|
||||
MyRed: "FF0000"
|
||||
MyBlue: "0000FF"
|
||||
"""
|
||||
yaml_path = Path("tests/fixtures/test_colors.yaml")
|
||||
yaml_path.parent.mkdir(exist_ok=True)
|
||||
yaml_path.write_text(yaml_content, encoding="utf-8")
|
||||
|
||||
style_reg = StyleRegistry(yaml_path)
|
||||
assert style_reg.get_color("MyRed") == (0xFF, 0x00, 0x00)
|
||||
assert style_reg.get_color("MyBlue") == (0x00, 0x00, 0xFF)
|
||||
# Проверим fallback
|
||||
assert style_reg.get_color("NonExistent") == (0x00, 0x00, 0x00) # чёрный
|
||||
|
||||
yaml_path.unlink(missing_ok=True)
|
||||
Reference in New Issue
Block a user