import pytest
from pdfcrate import Document, Margin
class TestColumnBox:
def test_column_box_requires_margin(self):
doc = Document()
with pytest.raises(RuntimeError):
doc.column_box(lambda d: None)
def test_column_box_basic(self):
doc = Document(margin=Margin.all(72))
doc.column_box(lambda d: d.text_wrap("Hello world from column box."))
pdf = doc.render()
assert len(pdf) > 100
assert pdf[:5] == b"%PDF-"
def test_column_box_two_columns(self):
doc = Document(margin=Margin.all(72))
doc.column_box(
lambda d: d.text_wrap("Two column text content."),
columns=2,
)
pdf = doc.render()
assert pdf[:5] == b"%PDF-"
def test_column_box_custom_spacer(self):
doc = Document(margin=Margin.all(72))
doc.column_box(
lambda d: d.text_wrap("Custom spacer text."),
columns=2,
spacer=24.0,
)
pdf = doc.render()
assert pdf[:5] == b"%PDF-"
def test_column_box_returns_doc(self):
doc = Document(margin=Margin.all(72))
result = doc.column_box(lambda d: d.text("Hello"))
assert result is doc
def test_column_box_with_text_wrap_inline(self):
doc = Document(margin=Margin.all(72))
doc.column_box(
lambda d: d.text_wrap_inline(
"This is <b>bold</b> and <i>italic</i> text in columns."
),
columns=2,
)
pdf = doc.render()
assert pdf[:5] == b"%PDF-"
def test_column_box_long_text_overflow(self):
doc = Document(margin=Margin.all(72))
long_text = " ".join(["Lorem ipsum dolor sit amet."] * 50)
doc.column_box(
lambda d: d.text_wrap(long_text),
columns=3,
)
pdf = doc.render()
assert pdf[:5] == b"%PDF-"
def test_column_box_advances_cursor(self):
doc = Document(margin=Margin.all(72))
cursor_before = doc.cursor()
doc.column_box(
lambda d: d.text_wrap("Some content in columns."),
columns=2,
)
cursor_after = doc.cursor()
assert cursor_after < cursor_before
def test_column_box_multiple_calls(self):
doc = Document(margin=Margin.all(72))
doc.column_box(lambda d: d.text("First"), columns=2)
doc.move_down(10)
doc.column_box(lambda d: d.text("Second"), columns=3)
pdf = doc.render()
assert pdf[:5] == b"%PDF-"