"""The page estimate of a document and of a built epub.""" import zipfile import pytest from bindery import pages from bindery.epub import EpubError, spine_documents from bindery.pages import Measure TEXT = ["One line of the story.", "Another, longer line of the story that goes on for a while.", "The end."] CHARS = sum(map(len, TEXT)) def test_a_paragraph_is_text_after_a_block_or_a_line_break(): assert pages.measure("

One

Two

") == Measure(2, 6) assert pages.measure("
One

Two
Three
") == Measure(3, 11) assert pages.measure("
One
Two
") == Measure(2, 6) # Text before, between and after the blocks of an element counts too. assert pages.measure("
Intro

One

Middle

Two

End
") == Measure(5, 20) assert pages.measure("

Title

Three
") == Measure( 4, 16 ) @pytest.mark.parametrize( "book", [ "".join(f"

{line}

" for line in TEXT), "".join(f'

{line}

\n' for line in TEXT), "
" + "".join(f"
{line}
" for line in TEXT) + "
", "
" + "

".join(TEXT) + "
", "
" + "
\n".join(TEXT) + "
", f"
{TEXT[0]}

{TEXT[1]}

{TEXT[2]}
", ], ) def test_the_same_text_gives_the_same_measure_in_each_markup(book): assert pages.measure(book) == Measure(3, CHARS) def test_inline_elements_and_table_cells_stay_in_the_line(): assert pages.measure('

abcdef gh

') == Measure(1, 9) assert pages.measure("
NameValue
ab
") == Measure( 2, 11 ) assert pages.measure('

Beforeafter

') == Measure(1, 11) def test_only_the_text_of_the_book_counts(): document = ( 'Hidden title' '