1
1
mirror of https://github.com/Kozea/WeasyPrint.git synced 2024-10-04 07:57:52 +03:00
WeasyPrint/tests/draw/test_leader.py
2021-04-19 17:15:53 +02:00

343 lines
7.8 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
weasyprint.tests.test_draw.test_leader
--------------------------------------
Test how leaders are drawn.
"""
import pytest
from ..testing_utils import assert_no_logs
from . import assert_pixels
@assert_no_logs
def test_leader_simple():
expected_pixels = '''
RR__BBBBBBBB__BB
RR__BBBBBBBB__BB
RRRR__BBBB__BBBB
RRRR__BBBB__BBBB
RR__BBBB__BBBBBB
RR__BBBB__BBBBBB
'''
html = '''
<style>
@font-face {src: url(weasyprint.otf); font-family: weasyprint}
@page {
background: white;
size: 16px 6px;
}
body {
color: red;
counter-reset: count;
font-family: weasyprint;
font-size: 2px;
line-height: 1;
}
div::after {
color: blue;
content: ' ' leader(dotted) ' ' counter(count, lower-roman);
counter-increment: count;
}
</style>
<div>a</div>
<div>bb</div>
<div>c</div>
'''
assert_pixels('leader-simple', 16, 6, expected_pixels, html)
@assert_no_logs
def test_leader_too_long():
expected_pixels = '''
RRRRRRRRRR______
RRRRRRRRRR______
BBBBBBBBBBBB__BB
BBBBBBBBBBBB__BB
RR__RR__RR__RR__
RR__RR__RR__RR__
RR__RR__RR______
RR__RR__RR______
BBBBBBBBBB__BBBB
BBBBBBBBBB__BBBB
RR__RR__RR__RR__
RR__RR__RR__RR__
RR__BBBB__BBBBBB
RR__BBBB__BBBBBB
'''
html = '''
<style>
@font-face {src: url(weasyprint.otf); font-family: weasyprint}
@page {
background: white;
size: 16px 14px;
}
body {
color: red;
counter-reset: count;
font-family: weasyprint;
font-size: 2px;
line-height: 1;
}
div::after {
color: blue;
content: ' ' leader(dotted) ' ' counter(count, lower-roman);
counter-increment: count;
}
</style>
<div>aaaaa</div>
<div>a a a a a a a</div>
<div>a a a a a</div>
'''
assert_pixels('leader-too-long', 16, 14, expected_pixels, html)
@assert_no_logs
def test_leader_alone():
expected_pixels = '''
RRBBBBBBBBBBBBBB
RRBBBBBBBBBBBBBB
'''
html = '''
<style>
@font-face {src: url(weasyprint.otf); font-family: weasyprint}
@page {
background: white;
size: 16px 2px;
}
body {
color: red;
font-family: weasyprint;
font-size: 2px;
line-height: 1;
}
div::after {
color: blue;
content: leader(dotted);
}
</style>
<div>a</div>
'''
assert_pixels('leader-alone', 16, 2, expected_pixels, html)
@assert_no_logs
def test_leader_content():
expected_pixels = '''
RR____BB______BB
RR____BB______BB
'''
html = '''
<style>
@font-face {src: url(weasyprint.otf); font-family: weasyprint}
@page {
background: white;
size: 16px 2px;
}
body {
color: red;
font-family: weasyprint;
font-size: 2px;
line-height: 1;
}
div::after {
color: blue;
content: leader(' . ') 'a';
}
</style>
<div>a</div>
'''
assert_pixels('leader-content', 16, 2, expected_pixels, html)
@pytest.mark.xfail
@assert_no_logs
def test_leader_float():
expected_pixels = '''
bbGRR___BB____BB
bbGRR___BB____BB
GGGRR___BB____BB
___RR___BB____BB
'''
html = '''
<style>
@font-face {src: url(weasyprint.otf); font-family: weasyprint}
@page {
background: white;
size: 16px 4px;
}
body {
color: red;
font-family: weasyprint;
font-size: 2px;
line-height: 1;
}
article {
background: lime;
color: navy;
float: left;
height: 3px;
width: 3px;
}
div::after {
color: blue;
content: leader('. ') 'a';
}
</style>
<div>a<article>a</article></div>
<div>a</div>
'''
assert_pixels('leader-float', 16, 4, expected_pixels, html)
@assert_no_logs
def test_leader_in_inline():
expected_pixels = '''
RR__GGBBBBBB__RR
RR__GGBBBBBB__RR
'''
html = '''
<style>
@font-face {src: url(weasyprint.otf); font-family: weasyprint}
@page {
background: white;
size: 16px 2px;
}
body {
color: red;
font-family: weasyprint;
font-size: 2px;
line-height: 1;
}
span {
color: lime;
}
span::after {
color: blue;
content: leader('-');
}
</style>
<div>a <span>a</span> a</div>
'''
assert_pixels('leader-in-inline', 16, 2, expected_pixels, html)
@pytest.mark.xfail
@assert_no_logs
def test_leader_bad_alignment():
expected_pixels = '''
RRRRRR__________
RRRRRR__________
______BB______RR
______BB______RR
'''
html = '''
<style>
@font-face {src: url(weasyprint.otf); font-family: weasyprint}
@page {
background: white;
size: 16px 4px;
}
body {
color: red;
font-family: weasyprint;
font-size: 2px;
line-height: 1;
}
div::after {
color: blue;
content: leader(' - ') 'a';
}
</style>
<div>aaa</div>
'''
assert_pixels('leader-in-inline', 16, 4, expected_pixels, html)
@assert_no_logs
def test_leader_simple_rtl():
expected_pixels = '''
BB__BBBBBBBB__RR
BB__BBBBBBBB__RR
BBBB__BBBB__RRRR
BBBB__BBBB__RRRR
BBBBBB__BBBB__RR
BBBBBB__BBBB__RR
'''
html = '''
<style>
@font-face {src: url(weasyprint.otf); font-family: weasyprint}
@page {
background: white;
size: 16px 6px;
}
body {
color: red;
counter-reset: count;
direction: rtl;
font-family: weasyprint;
font-size: 2px;
line-height: 1;
}
div::after {
color: blue;
/* RTL Mark used in second space */
content: ' ' leader(dotted) ' ' counter(count, lower-roman);
counter-increment: count;
}
</style>
<div>a</div>
<div>bb</div>
<div>c</div>
'''
assert_pixels('leader-simple-rtl', 16, 6, expected_pixels, html)
@assert_no_logs
def test_leader_too_long_rtl():
expected_pixels = '''
______RRRRRRRRRR
______RRRRRRRRRR
BB__BBBBBBBBBBBB
BB__BBBBBBBBBBBB
__RR__RR__RR__RR
__RR__RR__RR__RR
______RR__RR__RR
______RR__RR__RR
BBBB__BBBBBBBBBB
BBBB__BBBBBBBBBB
__RR__RR__RR__RR
__RR__RR__RR__RR
BBBBBB__BBBB__RR
BBBBBB__BBBB__RR
'''
html = '''
<style>
@font-face {src: url(weasyprint.otf); font-family: weasyprint}
@page {
background: white;
size: 16px 14px;
}
body {
color: red;
counter-reset: count;
direction: rtl;
font-family: weasyprint;
font-size: 2px;
line-height: 1;
}
div::after {
color: blue;
/* RTL Mark used in second space */
content: ' ' leader(dotted) ' ' counter(count, lower-roman);
counter-increment: count;
}
</style>
<div>aaaaa</div>
<div>a a a a a a a</div>
<div>a a a a a</div>
'''
assert_pixels('leader-too-long-rtl', 16, 14, expected_pixels, html)