weasyprint fails to build

  • Done
  • quality assurance status badge
Details
2 participants
  • Maxim Cournoyer
  • Michael Rohleder
Owner
unassigned
Submitted by
Michael Rohleder
Severity
normal
M
M
Michael Rohleder wrote on 17 Jul 2020 19:51
(address . bug-guix@gnu.org)
87o8oem3n7.fsf@rohleder.de
weasyprint fails in tests:

...
=================================== FAILURES ===================================
__________________________________ test_acid2 __________________________________

@assert_no_logs
@requires('cairo', (1, 12, 0))
def test_acid2():
def render(filename):
return HTML(resource_filename(filename)).render(enable_hinting=True)
with capture_logs():
document = render('acid2-test.html')
intro_page, test_page = document.pages
# Ignore the intro page: it is not in the reference
test_image, width, height = document.copy(
[test_page]).write_image_surface()
ref_image, ref_width, ref_height = render(
'acid2-reference.html').write_image_surface()
assert (width, height) == (ref_width, ref_height)
Toggle quote (1 lines)
> assert_pixels_equal(
'acid2', width, height, image_to_pixels(test_image, width, height),
image_to_pixels(ref_image, width, height), tolerance=2)

weasyprint/tests/test_acid2.py:37:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

name = 'acid2', width = 794, height = 1123
raw = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
expected_raw = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
tolerance = 2

def assert_pixels_equal(name, width, height, raw, expected_raw, tolerance=0):
"""Take 2 matrices of pixels and assert that they are the same."""
if raw != expected_raw: # pragma: no cover
for i, (value, expected) in enumerate(zip(raw, expected_raw)):
if abs(value - expected) > tolerance:
write_png(name, raw, width, height)
write_png(name + '.expected', expected_raw,
width, height)
pixel_n = i // 4
x = pixel_n // width
y = pixel_n % width
i % 4
pixel = tuple(list(raw[i:i + 4]))
expected_pixel = tuple(list(
expected_raw[i:i + 4]))
Toggle quote (1 lines)
> assert 0, (
'Pixel (%i, %i) in %s: expected rgba%s, got rgba%s'
% (x, y, name, expected_pixel, pixel))
E AssertionError: Pixel (124, 160) in acid2: expected rgba(191, 127, 127, 255), got rgba(128, 0, 0, 255)

weasyprint/tests/test_draw/__init__.py:163: AssertionError
------------------------------ Captured log call -------------------------------
INFO weasyprint.progress:__init__.py:106 Step 1 - Fetching and parsing HTML - /tmp/guix-build-weasyprint-51.drv-0/WeasyPrint-51/weasyprint/tests/resources/acid2-test.html
INFO weasyprint.progress:__init__.py:315 Step 2 - Fetching and parsing CSS - CSS string
WARNING weasyprint:__init__.py:825 Invalid or unsupported selector '[class=second two] ', (<IdentToken two>, 'expected ], got ident')
WARNING weasyprint:__init__.py:86 Ignored `error: \}` at 90:74, unknown property.
WARNING weasyprint:__init__.py:86 Ignored `m
rgin: 2em` at 93:14, unknown property.
WARNING weasyprint:__init__.py:825 Invalid or unsupported selector ';
.parser ', (<LiteralToken ;>, 'expected a compound selector, got literal')
WARNING weasyprint:__init__.py:86 Ignored `width: 200` at 95:14, invalid value.
WARNING weasyprint:__init__.py:86 Ignored `border: 5em solid red ! error` at 96:14, invalid value.
WARNING weasyprint:__init__.py:86 Ignored `background: red pink` at 97:14, invalid value.
INFO weasyprint.progress:__init__.py:315 Step 2 - Fetching and parsing CSS - data:text/css,.picture%20%7B%20background%3A%20none%3B%20%7D
INFO weasyprint.progress:__init__.py:67 Step 3 - Applying CSS
INFO weasyprint.progress:document.py:371 Step 4 - Creating formatting structure
ERROR weasyprint:images.py:231 Failed to load image at "file:///tmp/guix-build-weasyprint-51.drv-0/WeasyPrint-51/weasyprint/tests/resources/404" (URLError: <urlopen error [Errno 2] No such file or directory: '/tmp/guix-build-weasyprint-51.drv-0/WeasyPrint-51/weasyprint/tests/resources/404'>)
ERROR weasyprint:images.py:231 Failed to load image at "data:application/x-unknown,ERROR" (Pixbuf error: Unrecognized image file format)
INFO weasyprint.progress:pages.py:798 Step 5 - Creating layout - Page 1
INFO weasyprint.progress:pages.py:798 Step 5 - Creating layout - Page 2
INFO weasyprint.progress:document.py:751 Step 6 - Drawing
INFO weasyprint.progress:__init__.py:106 Step 1 - Fetching and parsing HTML - /tmp/guix-build-weasyprint-51.drv-0/WeasyPrint-51/weasyprint/tests/resources/acid2-reference.html
INFO weasyprint.progress:__init__.py:315 Step 2 - Fetching and parsing CSS - CSS string
INFO weasyprint.progress:__init__.py:67 Step 3 - Applying CSS
INFO weasyprint.progress:document.py:371 Step 4 - Creating formatting structure
INFO weasyprint.progress:pages.py:798 Step 5 - Creating layout - Page 1
INFO weasyprint.progress:document.py:751 Step 6 - Drawing
______________________________ test_line_content _______________________________

@assert_no_logs
def test_line_content():
for width, remaining in [(100, 'text for test'),
(45, 'is a text for test')]:
text = 'This is a text for test'
_, length, resume_at, _, _, _ = make_text(
text, width, font_family=SANS_FONTS.split(','), font_size=19)
Toggle quote (1 lines)
> assert text[resume_at:] == remaining
E AssertionError: assert 'a text for test' == 'text for test'
E - a text for test
E ? --
E + text for test

../../../WeasyPrint-51/weasyprint/tests/test_text.py:37: AssertionError
______________________________ test_line_breaking ______________________________

@assert_no_logs
def test_line_breaking():
string = 'Thïs is a text for test'
# These two tests do not really rely on installed fonts
_, _, resume_at, _, _, _ = make_text(string, 90, font_size=1)
assert resume_at is None
_, _, resume_at, _, _, _ = make_text(string, 90, font_size=100)
assert string.encode('utf-8')[resume_at:].decode('utf-8') == (
'is a text for test')
_, _, resume_at, _, _, _ = make_text(
string, 100, font_family=SANS_FONTS.split(','), font_size=19)
Toggle quote (1 lines)
> assert string.encode('utf-8')[resume_at:].decode('utf-8') == (
'text for test')
E AssertionError: assert 'a text for test' == 'text for test'
E - a text for test
E ? --
E + text for test

../../../WeasyPrint-51/weasyprint/tests/test_text.py:62: AssertionError

...

= 41 failed, 1132 passed, 1 deselected, 7 xfailed, 1 warning in 84.56s (0:01:24) =
command "pytest" "-k" "not test_flex_column_wrap_reverse" failed with status 1
builder for `/gnu/store/5c9h7c9pnrbpmk1015vrckrwsf5hd5xr-weasyprint-51.drv' failed with exit code 1


--
"We all know Linux is great...it does infinite loops in 5 seconds."
(Linus Torvalds about the superiority of Linux on the Amterdam
Linux Symposium)
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEdV4t5dDVhcUueCgwfHr/vv7yyyUFAl8R5QwACgkQfHr/vv7y
yyVkHQgAwFFW/9aAWH6FFp64ZHSR0yTZN0EgE8YM4pYlQ46nFk3BjxBIAAGYALhY
Dk0qvb7+VLOQuyx8db4lzJ0Ge2teoGIj8q/QN/NOrAVVbErYqgPqRJ2FoMOHd8NN
Px4wGth9nMbVIVbOxsi/J05+gje6zhBgWuGmJJNYM4ig6TpIc+xFRNKjiZpP7hte
gMDIjCAmeEkG4lDwPLl/N2KpIPQcgZaRgeFZGPzEhOZW2dbaReyV4aX46e3bLZcs
tPpD5VYZhUbb3jbYBPmJEYSdoFBOqCxV5ftM2LwXljpB3iaAV3LqCKevERTF/h9F
odGbneSXm2XVTBKqaW6gVie/o/ZV/w==
=AGtn
-----END PGP SIGNATURE-----

M
M
Maxim Cournoyer wrote on 29 Nov 2020 20:09
(name . Michael Rohleder)(address . mike@rohleder.de)(address . 42409-done@debbugs.gnu.org)
87a6v0nfoo.fsf@gmail.com
Hello,

Michael Rohleder <mike@rohleder.de> writes:

Toggle quote (141 lines)
> weasyprint fails in tests:
>
> ...
> =================================== FAILURES ===================================
>
>
> @assert_no_logs
> @requires('cairo', (1, 12, 0))
> def test_acid2():
> def render(filename):
> return HTML(resource_filename(filename)).render(enable_hinting=True)
>
> with capture_logs():
> # This is a copy of http://www.webstandards.org/files/acid2/test.html
> document = render('acid2-test.html')
> intro_page, test_page = document.pages
> # Ignore the intro page: it is not in the reference
> test_image, width, height = document.copy(
> [test_page]).write_image_surface()
>
> # This is a copy of http://www.webstandards.org/files/acid2/reference.html
> ref_image, ref_width, ref_height = render(
> 'acid2-reference.html').write_image_surface()
>
> assert (width, height) == (ref_width, ref_height)
>> assert_pixels_equal(
> 'acid2', width, height, image_to_pixels(test_image, width, height),
> image_to_pixels(ref_image, width, height), tolerance=2)
>
> weasyprint/tests/test_acid2.py:37:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> name = 'acid2', width = 794, height = 1123
> raw = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
> expected_raw = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
> tolerance = 2
>
> def assert_pixels_equal(name, width, height, raw, expected_raw, tolerance=0):
> """Take 2 matrices of pixels and assert that they are the same."""
> if raw != expected_raw: # pragma: no cover
> for i, (value, expected) in enumerate(zip(raw, expected_raw)):
> if abs(value - expected) > tolerance:
> write_png(name, raw, width, height)
> write_png(name + '.expected', expected_raw,
> width, height)
> pixel_n = i // 4
> x = pixel_n // width
> y = pixel_n % width
> i % 4
> pixel = tuple(list(raw[i:i + 4]))
> expected_pixel = tuple(list(
> expected_raw[i:i + 4]))
>> assert 0, (
> 'Pixel (%i, %i) in %s: expected rgba%s, got rgba%s'
> % (x, y, name, expected_pixel, pixel))
> E AssertionError: Pixel (124, 160) in acid2: expected rgba(191, 127, 127, 255), got rgba(128, 0, 0, 255)
>
> weasyprint/tests/test_draw/__init__.py:163: AssertionError
>
> INFO weasyprint.progress:__init__.py:106 Step 1 - Fetching and parsing
> HTML -
> /tmp/guix-build-weasyprint-51.drv-0/WeasyPrint-51/weasyprint/tests/resources/acid2-test.html
> INFO weasyprint.progress:__init__.py:315 Step 2 - Fetching and parsing CSS - CSS string
> WARNING weasyprint:__init__.py:825 Invalid or unsupported selector
> '[class=second two] ', (<IdentToken two>, 'expected ], got ident')
> WARNING weasyprint:__init__.py:86 Ignored `error: \}` at 90:74, unknown property.
> WARNING weasyprint:__init__.py:86 Ignored `m
> rgin: 2em` at 93:14, unknown property.
> WARNING weasyprint:__init__.py:825 Invalid or unsupported selector ';
> .parser ', (<LiteralToken ;>, 'expected a compound selector, got literal')
> WARNING weasyprint:__init__.py:86 Ignored `width: 200` at 95:14, invalid value.
> WARNING weasyprint:__init__.py:86 Ignored `border: 5em solid red ! error` at 96:14, invalid value.
> WARNING weasyprint:__init__.py:86 Ignored `background: red pink` at 97:14, invalid value.
> INFO weasyprint.progress:__init__.py:315 Step 2 - Fetching and parsing
> CSS - data:text/css,.picture%20%7B%20background%3A%20none%3B%20%7D
> INFO weasyprint.progress:__init__.py:67 Step 3 - Applying CSS
> INFO weasyprint.progress:document.py:371 Step 4 - Creating formatting structure
> ERROR weasyprint:images.py:231 Failed to load image at
> "file:///tmp/guix-build-weasyprint-51.drv-0/WeasyPrint-51/weasyprint/tests/resources/404"
> (URLError: <urlopen error [Errno 2] No such file or directory:
> '/tmp/guix-build-weasyprint-51.drv-0/WeasyPrint-51/weasyprint/tests/resources/404'>)
> ERROR weasyprint:images.py:231 Failed to load image at
> "data:application/x-unknown,ERROR" (Pixbuf error: Unrecognized image
> file format)
> INFO weasyprint.progress:pages.py:798 Step 5 - Creating layout - Page 1
> INFO weasyprint.progress:pages.py:798 Step 5 - Creating layout - Page 2
> INFO weasyprint.progress:document.py:751 Step 6 - Drawing
> INFO weasyprint.progress:__init__.py:106 Step 1 - Fetching and parsing
> HTML -
> /tmp/guix-build-weasyprint-51.drv-0/WeasyPrint-51/weasyprint/tests/resources/acid2-reference.html
> INFO weasyprint.progress:__init__.py:315 Step 2 - Fetching and parsing CSS - CSS string
> INFO weasyprint.progress:__init__.py:67 Step 3 - Applying CSS
> INFO weasyprint.progress:document.py:371 Step 4 - Creating formatting structure
> INFO weasyprint.progress:pages.py:798 Step 5 - Creating layout - Page 1
> INFO weasyprint.progress:document.py:751 Step 6 - Drawing
>
>
> @assert_no_logs
> def test_line_content():
> for width, remaining in [(100, 'text for test'),
> (45, 'is a text for test')]:
> text = 'This is a text for test'
> _, length, resume_at, _, _, _ = make_text(
> text, width, font_family=SANS_FONTS.split(','), font_size=19)
>> assert text[resume_at:] == remaining
> E AssertionError: assert 'a text for test' == 'text for test'
> E - a text for test
> E ? --
> E + text for test
>
> ../../../WeasyPrint-51/weasyprint/tests/test_text.py:37: AssertionError
>
> @assert_no_logs
> def test_line_breaking():
> string = 'Thïs is a text for test'
>
> # These two tests do not really rely on installed fonts
> _, _, resume_at, _, _, _ = make_text(string, 90, font_size=1)
> assert resume_at is None
>
> _, _, resume_at, _, _, _ = make_text(string, 90, font_size=100)
> assert string.encode('utf-8')[resume_at:].decode('utf-8') == (
> 'is a text for test')
>
> _, _, resume_at, _, _, _ = make_text(
> string, 100, font_family=SANS_FONTS.split(','), font_size=19)
>> assert string.encode('utf-8')[resume_at:].decode('utf-8') == (
> 'text for test')
> E AssertionError: assert 'a text for test' == 'text for test'
> E - a text for test
> E ? --
> E + text for test
>
> ../../../WeasyPrint-51/weasyprint/tests/test_text.py:62: AssertionError
>
> ...
>
> = 41 failed, 1132 passed, 1 deselected, 7 xfailed, 1 warning in 84.56s (0:01:24) =
> command "pytest" "-k" "not test_flex_column_wrap_reverse" failed with status 1
> builder for `/gnu/store/5c9h7c9pnrbpmk1015vrckrwsf5hd5xr-weasyprint-51.drv' failed with exit code 1

These failures were due to the 'DejaVu Sans' font not being available.
This is now fixed, along with an updated Weasyprint and some of its
dependencies, as of commit c601e2bf9adb05dc9dd9f3a565f693e968eb785c.

Thank you for the report!

Closing.

Maxim
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 42409@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 42409
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch