1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
"""Step implementations for rendered page-break related features."""
from __future__ import annotations
from behave import given, then
from behave.runner import Context
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from helpers import test_docx
# given ===================================================
@given("a rendered_page_break in a hyperlink")
def given_a_rendered_page_break_in_a_hyperlink(context: Context):
document = Document(test_docx("par-rendered-page-breaks"))
paragraph = document.paragraphs[2]
context.rendered_page_break = paragraph.rendered_page_breaks[0]
@given("a rendered_page_break in a paragraph")
def given_a_rendered_page_break_in_a_paragraph(context: Context):
document = Document(test_docx("par-rendered-page-breaks"))
paragraph = document.paragraphs[1]
context.rendered_page_break = paragraph.rendered_page_breaks[0]
# then =====================================================
@then("rendered_page_break.preceding_paragraph_fragment includes the hyperlink")
def then_rendered_page_break_preceding_paragraph_fragment_includes_the_hyperlink(
context: Context,
):
para_frag = context.rendered_page_break.preceding_paragraph_fragment
actual_value = type(para_frag).__name__
expected_value = "Paragraph"
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
actual_value = para_frag.text
expected_value = "Page break in>><<this hyperlink"
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
actual_value = para_frag.alignment
expected_value = WD_PARAGRAPH_ALIGNMENT.RIGHT # pyright: ignore
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
actual_value = para_frag.hyperlinks[0].runs[0].style.name
expected_value = "Hyperlink"
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
actual_value = para_frag.hyperlinks[0].address
expected_value = "http://google.com/"
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
@then("rendered_page_break.preceding_paragraph_fragment is the content before break")
def then_rendered_page_break_preceding_paragraph_fragment_is_the_content_before_break(
context: Context,
):
para_frag = context.rendered_page_break.preceding_paragraph_fragment
actual_value = type(para_frag).__name__
expected_value = "Paragraph"
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
actual_value = para_frag.text
expected_value = "Page break here>>"
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
actual_value = para_frag.alignment
expected_value = WD_PARAGRAPH_ALIGNMENT.CENTER # pyright: ignore
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
actual_value = para_frag.runs[0].style.name
expected_value = "Default Paragraph Font"
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
@then("rendered_page_break.following_paragraph_fragment excludes the hyperlink")
def then_rendered_page_break_following_paragraph_fragment_excludes_the_hyperlink(
context: Context,
):
para_frag = context.rendered_page_break.following_paragraph_fragment
# -- paragraph fragment is a Paragraph object --
actual_value = type(para_frag).__name__
expected_value = "Paragraph"
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
# -- paragraph text is only the fragment after the page-break --
actual_value = para_frag.text
expected_value = " and another one here>><<with text following"
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
# -- paragraph properties are preserved --
actual_value = para_frag.alignment
expected_value = WD_PARAGRAPH_ALIGNMENT.RIGHT # pyright: ignore
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
# -- paragraph has no hyperlinks --
actual_value = para_frag.hyperlinks
expected_value = []
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
# -- following paragraph fragment retains any remaining page-breaks --
actual_value = [type(rpb).__name__ for rpb in para_frag.rendered_page_breaks]
expected_value = ["RenderedPageBreak"]
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
@then("rendered_page_break.following_paragraph_fragment is the content after break")
def then_rendered_page_break_following_paragraph_fragment_is_the_content_after_break(
context: Context,
):
para_frag = context.rendered_page_break.following_paragraph_fragment
actual_value = type(para_frag).__name__
expected_value = "Paragraph"
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
actual_value = para_frag.text
expected_value = "<<followed by more text."
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
actual_value = para_frag.alignment
expected_value = WD_PARAGRAPH_ALIGNMENT.CENTER # pyright: ignore
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
actual_value = para_frag.runs[0].style.name
expected_value = "Default Paragraph Font"
assert actual_value == expected_value, f"expected: '{expected_value}', got: '{actual_value}'"
|