1
1
mirror of https://github.com/Kozea/WeasyPrint.git synced 2024-10-05 00:21:15 +03:00
WeasyPrint/weasy/tests/test_draw.py

115 lines
3.5 KiB
Python
Raw Normal View History

2011-07-12 19:53:15 +04:00
# coding: utf8
# WeasyPrint converts web documents (HTML, CSS, ...) to PDF.
# Copyright (C) 2011 Simon Sapin
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import os.path
2011-07-12 19:53:15 +04:00
import png
from attest import Tests, assert_hook
2011-07-12 19:53:15 +04:00
2011-08-10 18:19:32 +04:00
from . import resource_filename
from ..document import PNGDocument
from . import make_expected_results
make_expected_results.make_all()
2011-07-12 19:53:15 +04:00
suite = Tests()
2011-07-12 19:53:15 +04:00
def make_filename(dirname, basename):
return os.path.join(os.path.dirname(__file__), dirname, basename + '.png')
2011-07-12 20:27:33 +04:00
def test_pixels(name, expected_width, expected_height, html):
reader = png.Reader(filename=make_filename('expected_results', name))
width, height, expected_lines, meta = reader.read()
assert width == expected_width
assert height == height
assert meta['greyscale'] == False
assert meta['alpha'] == False
assert meta['bitdepth'] == 8
expected_lines = list(expected_lines)
2011-07-12 20:27:33 +04:00
document = PNGDocument.from_string(html)
2011-08-10 18:19:32 +04:00
# Dummy filename, but in the right directory.
document.base_url = resource_filename('<test>')
filename = make_filename('test_results', name)
document.write_to(filename)
2011-07-13 13:31:44 +04:00
2011-07-12 20:27:33 +04:00
reader = png.Reader(filename=filename)
width, height, lines, meta = reader.read()
lines = list(lines)
2011-07-12 19:53:15 +04:00
assert width == expected_width
assert height == height
assert meta['greyscale'] == False
assert meta['alpha'] == False
assert meta['bitdepth'] == 8
assert len(lines) == height
assert len(lines[0]) == width * 3
if lines != expected_lines:
for y in xrange(height):
for x in xrange(width):
assert lines[y][3 * x:3 * (x + 1)] == \
expected_lines[y][3 * x:3 * (x + 1)], \
'Pixel (%i, %i) does not match' % (x, y)
@suite.test
2011-08-10 18:19:32 +04:00
def test_canvas_background():
test_pixels('all_blue', 10, 10, '''
<style>
@page { size: 10px }
/* bodys background propagates to the whole canvas */
body { margin: 2px; background: #00f; height: 5px }
</style>
<body>
''')
test_pixels('blocks', 10, 10, '''
<style>
@page { size: 10px }
/* htmls background propagates to the whole canvas */
html { margin: 1px; background: #f00 }
/* html has a background, so bodys does not propagate */
body { margin: 1px; background: #00f; height: 5px }
</style>
<body>
''')
2011-08-10 18:19:32 +04:00
2011-08-10 18:52:34 +04:00
def test_background_repeat(repeat):
test_pixels('background_' + repeat, 14, 16, '''
2011-08-10 18:19:32 +04:00
<style>
@page { size: 14px 16px }
html { background: #fff }
body { margin: 2px; height: 10px;
2011-08-10 18:52:34 +04:00
background: url(pattern.png) %s }
2011-08-10 18:19:32 +04:00
</style>
<body>
2011-08-10 18:52:34 +04:00
''' % (repeat,))
@suite.test
def test_background_image():
test_background_repeat('repeat')
test_background_repeat('no-repeat')
test_background_repeat('repeat-y')
test_background_repeat('repeat-x')