File: pagebreak.py

package info (click to toggle)
python-docx 1.2.0%2Bdfsg-1~exp1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 7,216 kB
  • sloc: xml: 25,323; python: 23,414; makefile: 175
file content (135 lines) | stat: -rw-r--r-- 5,764 bytes parent folder | download
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}'"