File: test_list.py

package info (click to toggle)
weasyprint 67.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,896 kB
  • sloc: python: 61,025; makefile: 12
file content (131 lines) | stat: -rw-r--r-- 3,448 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
"""Tests for lists layout."""

import pytest

from ..testing_utils import assert_no_logs, render_pages


@assert_no_logs
@pytest.mark.parametrize('inside', ['inside', '',])
@pytest.mark.parametrize(('style', 'character'), [
    ('circle', '◦ '),
    ('disc', '• '),
    ('square', '▪ '),
])
def test_lists_style(inside, style, character):
    page, = render_pages('''
      <style>
        body { margin: 0 }
        ul { margin-left: 50px; list-style: %s %s }
      </style>
      <ul>
        <li>abc</li>
      </ul>
    ''' % (inside, style))
    html, = page.children
    body, = html.children
    unordered_list, = body.children
    list_item, = unordered_list.children
    if inside:
        line, = list_item.children
        marker, content = line.children
        marker_text, = marker.children
    else:
        marker, line_container, = list_item.children
        assert marker.position_x == list_item.position_x - marker.width
        assert marker.position_y == list_item.position_y
        line, = line_container.children
        content, = line.children
        marker_line, = marker.children
        marker_text, = marker_line.children
    assert marker_text.text == character
    assert content.text == 'abc'


def test_lists_empty_item():
    # Regression test for #873.
    page, = render_pages('''
      <ul>
        <li>a</li>
        <li></li>
        <li>a</li>
      </ul>
    ''')
    html, = page.children
    body, = html.children
    unordered_list, = body.children
    li1, li2, li3 = unordered_list.children
    assert li1.position_y != li2.position_y != li3.position_y


@pytest.mark.xfail
def test_lists_whitespace_item():
    # Regression test for #873.
    page, = render_pages('''
      <ul>
        <li>a</li>
        <li> </li>
        <li>a</li>
      </ul>
    ''')
    html, = page.children
    body, = html.children
    unordered_list, = body.children
    li1, li2, li3 = unordered_list.children
    assert li1.position_y != li2.position_y != li3.position_y


def test_lists_page_break():
    # Regression test for #945.
    page1, page2 = render_pages('''
      <style>
        @page { size: 300px 100px }
        ul { font-size: 30px; font-family: weasyprint; margin: 0 }
      </style>
      <ul>
        <li>a</li>
        <li>a</li>
        <li>a</li>
        <li>a</li>
      </ul>
    ''')
    html, = page1.children
    body, = html.children
    ul, = body.children
    assert len(ul.children) == 3
    for li in ul.children:
        assert len(li.children) == 2

    html, = page2.children
    body, = html.children
    ul, = body.children
    assert len(ul.children) == 1
    for li in ul.children:
        assert len(li.children) == 2


def test_lists_page_break_margin():
    # Regression test for #1058.
    page1, page2 = render_pages('''
      <style>
        @page { size: 300px 100px }
        ul { font-size: 30px; font-family: weasyprint; margin: 0 }
        p { margin: 10px 0 }
      </style>
      <ul>
        <li><p>a</p></li>
        <li><p>a</p></li>
        <li><p>a</p></li>
        <li><p>a</p></li>
      </ul>
    ''')
    for page in (page1, page2):
        html, = page.children
        body, = html.children
        ul, = body.children
        assert len(ul.children) == 2
        for li in ul.children:
            assert len(li.children) == 2
            assert (
                li.children[0].position_y ==
                li.children[1].children[0].position_y)