mirror of
https://github.com/Kozea/WeasyPrint.git
synced 2024-10-04 07:57:52 +03:00
343 lines
7.8 KiB
Python
343 lines
7.8 KiB
Python
"""
|
||
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)
|