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/>.
|
|
|
|
|
|
|
|
|
|
|
2011-07-29 03:14:05 +04:00
|
|
|
|
import os.path
|
2011-08-20 20:20:59 +04:00
|
|
|
|
from array import array
|
2011-07-12 19:53:15 +04:00
|
|
|
|
|
2011-07-29 03:14:05 +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
|
2011-07-29 03:14:05 +04:00
|
|
|
|
from ..document import PNGDocument
|
2011-08-10 18:54:26 +04:00
|
|
|
|
|
|
|
|
|
|
2011-08-20 20:20:59 +04:00
|
|
|
|
_ = array('B', [255, 255, 255]) # white
|
|
|
|
|
r = array('B', [255, 0, 0]) # red
|
|
|
|
|
B = array('B', [0, 0, 255]) # blue
|
2011-07-12 19:53:15 +04:00
|
|
|
|
|
2011-07-29 03:14:05 +04:00
|
|
|
|
suite = Tests()
|
2011-07-12 19:53:15 +04:00
|
|
|
|
|
|
|
|
|
|
2011-07-29 03:14:05 +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
|
|
|
|
|
|
|
|
|
|
2011-08-10 21:33:16 +04:00
|
|
|
|
def format_pixel(lines, x, y):
|
|
|
|
|
pixel = lines[y][3 * x:3 * (x + 1)]
|
|
|
|
|
return ('#' + 3 * '%02x') % tuple(pixel)
|
|
|
|
|
|
|
|
|
|
|
2011-08-20 20:20:59 +04:00
|
|
|
|
def test_pixels(name, expected_width, expected_height, expected_lines, html):
|
2011-08-22 20:14:37 +04:00
|
|
|
|
assert len(expected_lines) == expected_height, name
|
|
|
|
|
assert len(expected_lines[0]) == 3 * expected_width, name
|
|
|
|
|
|
2011-08-20 20:20:59 +04:00
|
|
|
|
writer = png.Writer(width=expected_width, height=expected_height)
|
|
|
|
|
with open(make_filename('expected_results', name), 'wb') as fd:
|
|
|
|
|
writer.write(fd, expected_lines)
|
2011-07-12 20:27:33 +04:00
|
|
|
|
|
2011-07-29 03:14:05 +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>')
|
2011-07-29 03:14:05 +04:00
|
|
|
|
filename = make_filename('test_results', name)
|
2011-08-05 17:55:34 +04:00
|
|
|
|
document.write_to(filename)
|
2011-08-22 20:14:37 +04:00
|
|
|
|
assert len(document.pages) == 1
|
2011-07-13 13:31:44 +04:00
|
|
|
|
|
2011-07-29 03:14:05 +04:00
|
|
|
|
reader = png.Reader(filename=filename)
|
|
|
|
|
width, height, lines, meta = reader.read()
|
|
|
|
|
lines = list(lines)
|
2011-07-12 19:53:15 +04:00
|
|
|
|
|
2011-08-22 20:14:37 +04:00
|
|
|
|
assert width == expected_width, name
|
|
|
|
|
assert height == expected_height, name
|
|
|
|
|
assert meta['greyscale'] == False, name
|
|
|
|
|
assert meta['alpha'] == False, name
|
|
|
|
|
assert meta['bitdepth'] == 8, name
|
|
|
|
|
assert len(lines) == height, name
|
|
|
|
|
assert len(lines[0]) == width * 3, name
|
2011-08-08 23:20:43 +04:00
|
|
|
|
if lines != expected_lines:
|
|
|
|
|
for y in xrange(height):
|
|
|
|
|
for x in xrange(width):
|
2011-08-10 21:33:16 +04:00
|
|
|
|
pixel = format_pixel(lines, x, y)
|
|
|
|
|
expected_pixel = format_pixel(expected_lines, x, y)
|
|
|
|
|
assert pixel == expected_pixel, \
|
|
|
|
|
'Pixel (%i, %i) does not match in %s' % (x, y, name)
|
2011-07-29 03:14:05 +04:00
|
|
|
|
|
|
|
|
|
@suite.test
|
2011-08-10 18:19:32 +04:00
|
|
|
|
def test_canvas_background():
|
2011-08-20 20:20:59 +04:00
|
|
|
|
test_pixels('all_blue', 10, 10, (10 * [10 * B]), '''
|
2011-08-08 23:20:43 +04:00
|
|
|
|
<style>
|
|
|
|
|
@page { size: 10px }
|
|
|
|
|
/* body’s background propagates to the whole canvas */
|
|
|
|
|
body { margin: 2px; background: #00f; height: 5px }
|
|
|
|
|
</style>
|
|
|
|
|
<body>
|
|
|
|
|
''')
|
2011-08-20 20:20:59 +04:00
|
|
|
|
|
|
|
|
|
test_pixels('blocks', 10, 10, [
|
|
|
|
|
r+r+r+r+r+r+r+r+r+r,
|
|
|
|
|
r+r+r+r+r+r+r+r+r+r,
|
|
|
|
|
r+r+B+B+B+B+B+B+r+r,
|
|
|
|
|
r+r+B+B+B+B+B+B+r+r,
|
|
|
|
|
r+r+B+B+B+B+B+B+r+r,
|
|
|
|
|
r+r+B+B+B+B+B+B+r+r,
|
|
|
|
|
r+r+B+B+B+B+B+B+r+r,
|
|
|
|
|
r+r+r+r+r+r+r+r+r+r,
|
|
|
|
|
r+r+r+r+r+r+r+r+r+r,
|
|
|
|
|
r+r+r+r+r+r+r+r+r+r,
|
|
|
|
|
], '''
|
2011-07-29 03:14:05 +04:00
|
|
|
|
<style>
|
|
|
|
|
@page { size: 10px }
|
2011-08-08 23:20:43 +04:00
|
|
|
|
/* html’s background propagates to the whole canvas */
|
|
|
|
|
html { margin: 1px; background: #f00 }
|
|
|
|
|
/* html has a background, so body’s does not propagate */
|
|
|
|
|
body { margin: 1px; background: #00f; height: 5px }
|
2011-07-29 03:14:05 +04:00
|
|
|
|
</style>
|
|
|
|
|
<body>
|
|
|
|
|
''')
|
2011-08-10 18:19:32 +04:00
|
|
|
|
|
|
|
|
|
|
2011-08-10 18:52:34 +04:00
|
|
|
|
@suite.test
|
|
|
|
|
def test_background_image():
|
2011-08-20 20:20:59 +04:00
|
|
|
|
# pattern.png looks like this:
|
|
|
|
|
|
|
|
|
|
# r+B+B+B,
|
|
|
|
|
# B+B+B+B,
|
|
|
|
|
# B+B+B+B,
|
|
|
|
|
# B+B+B+B,
|
2011-08-11 14:44:37 +04:00
|
|
|
|
|
2011-08-20 20:20:59 +04:00
|
|
|
|
for name, css, pixels in [
|
|
|
|
|
('repeat', '', [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+r+B+B+B+r+B+B+B+r+B+_+_,
|
|
|
|
|
_+_+B+B+B+B+B+B+B+B+B+B+_+_,
|
|
|
|
|
_+_+B+B+B+B+B+B+B+B+B+B+_+_,
|
|
|
|
|
_+_+B+B+B+B+B+B+B+B+B+B+_+_,
|
|
|
|
|
_+_+r+B+B+B+r+B+B+B+r+B+_+_,
|
|
|
|
|
_+_+B+B+B+B+B+B+B+B+B+B+_+_,
|
|
|
|
|
_+_+B+B+B+B+B+B+B+B+B+B+_+_,
|
|
|
|
|
_+_+B+B+B+B+B+B+B+B+B+B+_+_,
|
|
|
|
|
_+_+r+B+B+B+r+B+B+B+r+B+_+_,
|
|
|
|
|
_+_+B+B+B+B+B+B+B+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
|
|
|
|
('repeat_x', 'repeat-x', [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+r+B+B+B+r+B+B+B+r+B+_+_,
|
|
|
|
|
_+_+B+B+B+B+B+B+B+B+B+B+_+_,
|
|
|
|
|
_+_+B+B+B+B+B+B+B+B+B+B+_+_,
|
|
|
|
|
_+_+B+B+B+B+B+B+B+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
|
|
|
|
('repeat_y', 'repeat-y', [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+r+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+r+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+r+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
2011-08-11 14:44:37 +04:00
|
|
|
|
|
2011-08-20 20:20:59 +04:00
|
|
|
|
('left_top', 'no-repeat 0 0%', [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+r+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
|
|
|
|
('center_top', 'no-repeat 50% 0px', [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+r+B+B+B+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+B+B+B+B+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+B+B+B+B+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+B+B+B+B+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
|
|
|
|
('right_top', 'no-repeat 6px top', [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+r+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+B+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+B+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+B+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
2011-08-11 14:44:37 +04:00
|
|
|
|
|
2011-08-20 20:20:59 +04:00
|
|
|
|
('left_center', 'no-repeat left center', [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+r+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
|
|
|
|
('center_center', 'no-repeat 3px 3px', [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+r+B+B+B+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+B+B+B+B+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+B+B+B+B+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+B+B+B+B+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
|
|
|
|
('right_center', 'no-repeat 100% 50%', [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+r+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+B+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+B+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+B+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
2011-08-11 17:55:01 +04:00
|
|
|
|
|
2011-08-20 20:20:59 +04:00
|
|
|
|
('left_bottom', 'no-repeat 0% bottom', [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+r+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
|
|
|
|
('center_bottom', 'no-repeat center 6px', [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+r+B+B+B+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+B+B+B+B+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+B+B+B+B+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+B+B+B+B+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
|
|
|
|
('right_bottom', 'no-repeat 6px 100%', [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+r+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+B+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+B+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+B+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
2011-08-11 17:55:01 +04:00
|
|
|
|
|
2011-08-20 20:20:59 +04:00
|
|
|
|
('repeat_x_1px_2px', 'repeat-x 1px 2px', [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+r+B+B+B+r+B+B+B+r+_+_,
|
|
|
|
|
_+_+B+B+B+B+B+B+B+B+B+B+_+_,
|
|
|
|
|
_+_+B+B+B+B+B+B+B+B+B+B+_+_,
|
|
|
|
|
_+_+B+B+B+B+B+B+B+B+B+B+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
|
|
|
|
('repeat_y_2px_1px', 'repeat-y 2px 1px', [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+B+B+B+B+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+r+B+B+B+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+B+B+B+B+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+B+B+B+B+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+B+B+B+B+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+r+B+B+B+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+B+B+B+B+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+B+B+B+B+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+B+B+B+B+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+r+B+B+B+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
|
|
|
|
|
|
|
|
|
('fixed', 'no-repeat fixed', [
|
|
|
|
|
# The image is actually here:
|
|
|
|
|
#######
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_, #
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_, #
|
|
|
|
|
_+_+B+B+_+_+_+_+_+_+_+_+_+_, #
|
|
|
|
|
_+_+B+B+_+_+_+_+_+_+_+_+_+_, #
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
|
|
|
|
('fixed_right', 'no-repeat fixed right 3px', [
|
|
|
|
|
#######
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+r+B+_+_, #
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+B+B+_+_, #
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+B+B+_+_, #
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+B+B+_+_, #
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
2011-08-11 14:44:37 +04:00
|
|
|
|
]:
|
2011-08-20 20:20:59 +04:00
|
|
|
|
test_pixels('background_' + name, 14, 16, pixels, '''
|
2011-08-10 21:33:16 +04:00
|
|
|
|
<style>
|
|
|
|
|
@page { size: 14px 16px }
|
|
|
|
|
html { background: #fff }
|
|
|
|
|
body { margin: 2px; height: 10px;
|
|
|
|
|
background: url(pattern.png) %s }
|
|
|
|
|
</style>
|
|
|
|
|
<body>
|
|
|
|
|
''' % (css,))
|
2011-08-20 20:02:04 +04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@suite.test
|
|
|
|
|
def test_list_style_image():
|
2011-08-20 20:20:59 +04:00
|
|
|
|
for position, pixels in [
|
|
|
|
|
('outside', [
|
|
|
|
|
# ++++++++++++++ ++++ <li> horizontal margins: 7px 2px
|
|
|
|
|
# ###### <li> width: 12 - 7 - 2 = 3px
|
2011-08-22 20:14:37 +04:00
|
|
|
|
# -- list marker margin: 0.5em = 2px
|
|
|
|
|
# ******** list marker image is 4px wide
|
2011-08-20 20:20:59 +04:00
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_,
|
2011-08-22 20:14:37 +04:00
|
|
|
|
_+_+r+B+B+B+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_,
|
|
|
|
|
_+_+B+B+B+B+_+_+_+_+_+_,
|
2011-08-20 20:20:59 +04:00
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
]),
|
|
|
|
|
('inside', [
|
|
|
|
|
# ++++++++++++++ ++++ <li> horizontal margins: 7px 2px
|
|
|
|
|
# ###### <li> width: 12 - 7 - 2 = 3px
|
|
|
|
|
# ******** list marker image is 4px wide, it overflows
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+r+B+B+B+_,
|
|
|
|
|
_+_+_+_+_+_+_+B+B+B+B+_,
|
|
|
|
|
_+_+_+_+_+_+_+B+B+B+B+_,
|
|
|
|
|
_+_+_+_+_+_+_+B+B+B+B+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
])
|
|
|
|
|
]:
|
|
|
|
|
test_pixels('list_style_image_' + position, 12, 10, pixels, '''
|
2011-08-20 20:02:04 +04:00
|
|
|
|
<style>
|
|
|
|
|
@page { size: 12px 10px }
|
|
|
|
|
body { margin: 0; background: white }
|
2011-08-22 20:14:37 +04:00
|
|
|
|
ul { margin: 2px 2px 0 7px; list-style: url(pattern.png) %s;
|
|
|
|
|
font-size: 2px }
|
2011-08-20 20:02:04 +04:00
|
|
|
|
</style>
|
2011-08-22 20:14:37 +04:00
|
|
|
|
<ul><li></li></ul>
|
2011-08-20 20:02:04 +04:00
|
|
|
|
''' % (position,))
|
2011-08-21 00:59:27 +04:00
|
|
|
|
|
2011-08-22 20:14:37 +04:00
|
|
|
|
test_pixels('list_style_none', 10, 10, [
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_,
|
2011-08-21 00:59:27 +04:00
|
|
|
|
_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
_+_+_+_+_+_+_+_+_+_,
|
|
|
|
|
], '''
|
|
|
|
|
<style>
|
2011-08-22 20:14:37 +04:00
|
|
|
|
@page { size: 10px }
|
2011-08-21 00:59:27 +04:00
|
|
|
|
body { margin: 0; background: white }
|
|
|
|
|
ul { margin: 0 0 0 5px; list-style: none; font-size: 2px; }
|
|
|
|
|
</style>
|
|
|
|
|
<ul><li>
|
|
|
|
|
''')
|