Last active
November 28, 2020 08:20
-
-
Save Apteryks/8e50f94e14f6dd48fe235d523b40d52c to your computer and use it in GitHub Desktop.
Weasyprint test suite failures on GNU Guix
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dependencies: [email protected] [email protected] [email protected] [email protected] [email protected] | |
+ [email protected] [email protected] [email protected] [email protected] | |
+ [email protected] [email protected] [email protected] [email protected] | |
+ [email protected] | |
substitute: | |
substitute: [Kupdating substitutes from 'https://ci.guix.gnu.org'... 0.0% | |
substitute: [Kupdating substitutes from 'https://ci.guix.gnu.org'... 100.0% | |
@ build-started /gnu/store/jidwphw1is0mlphmwaspacl26f0krzqv-weasyprint-52.1.drv - x86_64-linux /var/log/guix/drvs/ji//dwphw1is0mlphmwaspacl26f0krzqv-weasyprint-52.1.drv.bz2 14317 | |
starting phase `set-SOURCE-DATE-EPOCH' | |
phase `set-SOURCE-DATE-EPOCH' succeeded after 0.0 seconds | |
starting phase `set-paths' | |
environment variable `PATH' set to `/gnu/store/wc4xh9wj49rlbyivxi4lsws6whhzx4ab-python-wrapper-3.8.2/bin:/gnu/store/bf2jmcvrq5qbbnwv8mzxglrkaj2v7232-fontconfig-2.13.1/bin:/gnu/store/dj4w1pxrdm81wqf2phgbay5i20r8g7wv-pango-1.44.7/bin:/gnu/store/hirahvpzx52igjg4z0l4lzfgdfd83bn0-gdk-pixbuf-2.40.0/bin:/gnu/store/vh6qqyv578hkdidy1pxk23kv3bkf93cf-python-cairosvg-2.5.0/bin:/gnu/store/v6f44zccwh9z5zk3pjlywjybbi8n2hjh-tar-1.32/bin:/gnu/store/ncydgq2znms5n1d2k5yqshhf58nsixwv-gzip-1.10/bin:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/bin:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/bin:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/bin:/gnu/store/n4n560pfvvw50a9369axw5vj5rrqfj1n-diffutils-3.7/bin:/gnu/store/cd5qf3kcnlq35p9k392pjdpdzpsnds70-patch-2.7.6/bin:/gnu/store/hic7snhayfl7m6cpfqqr73nmm19bpqkg-findutils-4.7.0/bin:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/bin:/gnu/store/ishk7fswcs4gkwcp8mh788z4mvvl9bxh-sed-4.8/bin:/gnu/store/bhs4rj58v8j1narb2454raan2ps38xd8-grep-3.4/bin:/gnu/store/57xj5gcy1jbl9ai2lnrqnpr0dald9i65-coreutils-8.32/bin:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/bin:/gnu/store/pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16/bin:/gnu/store/mpa04aq8lblbcviyxywxcsb1zbi0mf39-ld-wrapper-0/bin:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/bin:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/bin:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/bin:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/sbin:/gnu/store/q9rm8h9imazsq2c4qiv2yjpvlvliywqb-python-3.8.2/bin:/gnu/store/3bk454z353a42l1l4yaxa6lrl3dh24mv-python-pytest-5.3.5/bin:/gnu/store/9fcmz457dvb4qj6jwmr9ydcdindxhvsl-python-coverage-5.0.3/bin:/gnu/store/haaam6v8l4s75mj9xmpb9gc78xk001y9-freetype-2.10.1/bin:/gnu/store/imh5xxqw10dql4crlngbbjh4r24raf4j-expat-2.2.9/bin:/gnu/store/sh764z2hm5qcr4cqx4amcipcbkvg76i2-libselinux-3.0/sbin:/gnu/store/llccvnpm1dm94d7lndrhs2m6421p45pd-fribidi-1.0.9/bin:/gnu/store/wnm4fijksgfgal7xqvi4ismy7qcc2nis-cairo-1.16.0/bin:/gnu/store/gpvwv9nff7k9l9nmyyqi9w9bzc8j0186-shared-mime-info-1.15/bin:/gnu/store/3x2kak8abb6z2klch72kfff2qxzv00pj-libpng-1.6.37/bin:/gnu/store/8nh0hbrr8iaz6qkwavcnzi0824f3xb68-libsepol-3.0/bin:/gnu/store/qizplwwgqwyq6qmz1i6jlaib5kgzrgwq-icu4c-66.1/bin:/gnu/store/qizplwwgqwyq6qmz1i6jlaib5kgzrgwq-icu4c-66.1/sbin:/gnu/store/avjxs6qgyginkiq6qpk9280zakkaj35h-graphite2-1.3.13/bin' | |
environment variable `PYTHONPATH' set to `/gnu/store/jambbwx92axfs36k8j5q0l7pjqnj1pl3-python-pytest-cov-2.8.1/lib/python3.8/site-packages:/gnu/store/6pnsqg6sm2dv48bldyqs4c3sa589j9f9-python-pytest-runner-5.2/lib/python3.8/site-packages:/gnu/store/m46j867x71q45cgzcqk8j102ik3l7kza-python-cairocffi-1.2.0/lib/python3.8/site-packages:/gnu/store/vh6qqyv578hkdidy1pxk23kv3bkf93cf-python-cairosvg-2.5.0/lib/python3.8/site-packages:/gnu/store/2lagn19nyzrhim0zn1c39i90qa60zcja-python-cffi-1.14.0/lib/python3.8/site-packages:/gnu/store/768gnalsyq36f3p77wbqdswhhxk7pxmf-python-cssselect2-0.4.1/lib/python3.8/site-packages:/gnu/store/0wjnd4in8w95fn93334ljxz5b936ibpd-python-html5lib-1.1/lib/python3.8/site-packages:/gnu/store/p3mjf635qhzb8q4kd2fgzmsyl7l9cdd4-python-pyphen-0.10.0/lib/python3.8/site-packages:/gnu/store/5i7dnnkis4zfljs75sanpr0jl9ycz6jw-python-tinycss2-1.1.0/lib/python3.8/site-packages:/gnu/store/q9rm8h9imazsq2c4qiv2yjpvlvliywqb-python-3.8.2/lib/python3.8/site-packages:/gnu/store/3bk454z353a42l1l4yaxa6lrl3dh24mv-python-pytest-5.3.5/lib/python3.8/site-packages:/gnu/store/9fcmz457dvb4qj6jwmr9ydcdindxhvsl-python-coverage-5.0.3/lib/python3.8/site-packages:/gnu/store/brfl5rvq1jh93lkcnz25ywaggzxc5xks-python-xcffib-0.6.0/lib/python3.8/site-packages:/gnu/store/6ja0r94dg3fbsb22p0sqchhvimyw49gd-python-pillow-8.0.1/lib/python3.8/site-packages:/gnu/store/8gdl9sf6h6bin2i3dhad76z105ayk7xr-python-defusedxml-0.6.0/lib/python3.8/site-packages:/gnu/store/nqssc5g3s2gw9h8kfv93ykf8g2wf780h-python-pycparser-2.20/lib/python3.8/site-packages:/gnu/store/p632jxixydya1rh2f1sgwid27np1yvv5-python-webencodings-0.5.1/lib/python3.8/site-packages:/gnu/store/b0svsfz2vw2qwlfsi56k8fwbx4fzcfhk-python-six-1.14.0/lib/python3.8/site-packages:/gnu/store/mnk5rp12lrnm30471idpdfia8riv0m01-python-wcwidth-0.1.8/lib/python3.8/site-packages:/gnu/store/jk078364fi37sm2yyrmnla1d6d4bjwb5-python-six-bootstrap-1.14.0/lib/python3.8/site-packages:/gnu/store/hh397yagghj2nrpwv9cdc6cgqwbrk4yx-python-py-1.8.1/lib/python3.8/site-packages:/gnu/store/p0wphmjxi2mn1i72m1bq2mbfbq5d706h-python-pluggy-0.13.1/lib/python3.8/site-packages:/gnu/store/gfinivfp1knczz2lg1d0q5p6jasslal8-python-packaging-bootstrap-20.0/lib/python3.8/site-packages:/gnu/store/avamm2w7dw3hinrixx09h6dvw8m3mili-python-more-itertools-8.2.0/lib/python3.8/site-packages:/gnu/store/l72vqwgkc23pvvp00pzmkjqraa9g78wl-python-attrs-bootstrap-19.3.0/lib/python3.8/site-packages:/gnu/store/09c14l4iag378c706ygyj8apan1xwq83-python-atomicwrites-1.3.0/lib/python3.8/site-packages:/gnu/store/mw5p6slda60cw309dfqmfzmna064xp76-python-olefile-0.46/lib/python3.8/site-packages:/gnu/store/y4n225qk6limj4yxplscppwqcaan49hw-python-pyparsing-2.4.6/lib/python3.8/site-packages' | |
environment variable `XDG_DATA_DIRS' set to `/gnu/store/7y3lvk3xf4im8n44337mc6y0ccysvfia-font-dejavu-2.37/share:/gnu/store/jambbwx92axfs36k8j5q0l7pjqnj1pl3-python-pytest-cov-2.8.1/share:/gnu/store/6pnsqg6sm2dv48bldyqs4c3sa589j9f9-python-pytest-runner-5.2/share:/gnu/store/bf2jmcvrq5qbbnwv8mzxglrkaj2v7232-fontconfig-2.13.1/share:/gnu/store/rmbxm1fg47b347kv1h5fb2w04nxqbsj6-glib-2.62.6/share:/gnu/store/dj4w1pxrdm81wqf2phgbay5i20r8g7wv-pango-1.44.7/share:/gnu/store/hirahvpzx52igjg4z0l4lzfgdfd83bn0-gdk-pixbuf-2.40.0/share:/gnu/store/m46j867x71q45cgzcqk8j102ik3l7kza-python-cairocffi-1.2.0/share:/gnu/store/vh6qqyv578hkdidy1pxk23kv3bkf93cf-python-cairosvg-2.5.0/share:/gnu/store/2lagn19nyzrhim0zn1c39i90qa60zcja-python-cffi-1.14.0/share:/gnu/store/768gnalsyq36f3p77wbqdswhhxk7pxmf-python-cssselect2-0.4.1/share:/gnu/store/0wjnd4in8w95fn93334ljxz5b936ibpd-python-html5lib-1.1/share:/gnu/store/p3mjf635qhzb8q4kd2fgzmsyl7l9cdd4-python-pyphen-0.10.0/share:/gnu/store/5i7dnnkis4zfljs75sanpr0jl9ycz6jw-python-tinycss2-1.1.0/share:/gnu/store/v6f44zccwh9z5zk3pjlywjybbi8n2hjh-tar-1.32/share:/gnu/store/ncydgq2znms5n1d2k5yqshhf58nsixwv-gzip-1.10/share:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/share:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/share:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/share:/gnu/store/n4n560pfvvw50a9369axw5vj5rrqfj1n-diffutils-3.7/share:/gnu/store/cd5qf3kcnlq35p9k392pjdpdzpsnds70-patch-2.7.6/share:/gnu/store/hic7snhayfl7m6cpfqqr73nmm19bpqkg-findutils-4.7.0/share:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/share:/gnu/store/ishk7fswcs4gkwcp8mh788z4mvvl9bxh-sed-4.8/share:/gnu/store/bhs4rj58v8j1narb2454raan2ps38xd8-grep-3.4/share:/gnu/store/57xj5gcy1jbl9ai2lnrqnpr0dald9i65-coreutils-8.32/share:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/share:/gnu/store/pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16/share:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/share:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/share:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/share:/gnu/store/s3dcqzwqaakv1yx37by9chksdbkgih17-glibc-2.31-static/share:/gnu/store/q9rm8h9imazsq2c4qiv2yjpvlvliywqb-python-3.8.2/share:/gnu/store/3bk454z353a42l1l4yaxa6lrl3dh24mv-python-pytest-5.3.5/share:/gnu/store/9fcmz457dvb4qj6jwmr9ydcdindxhvsl-python-coverage-5.0.3/share:/gnu/store/a45p39mgqvfd8kjwibyr0q42k1mw7gmf-util-linux-2.35.1-lib/share:/gnu/store/haaam6v8l4s75mj9xmpb9gc78xk001y9-freetype-2.10.1/share:/gnu/store/imh5xxqw10dql4crlngbbjh4r24raf4j-expat-2.2.9/share:/gnu/store/rykm237xkmq7rl1p0nwass01p090p88x-zlib-1.2.11/share:/gnu/store/sh764z2hm5qcr4cqx4amcipcbkvg76i2-libselinux-3.0/share:/gnu/store/bw15z9kh9c65ycc2vbhl2izwfwfva7p1-libffi-3.3/share:/gnu/store/k0aqiy7yx8n28dvm3f0a04ka5sd8y950-pcre-8.44/share:/gnu/store/igp2w6cmdax5fj0nylr9vf61m65kl4r2-libxft-2.3.3/share:/gnu/store/3jzvmv2an5aw4m0mpg949knrm8r3nwxy-harfbuzz-2.6.4/share:/gnu/store/llccvnpm1dm94d7lndrhs2m6421p45pd-fribidi-1.0.9/share:/gnu/store/wnm4fijksgfgal7xqvi4ismy7qcc2nis-cairo-1.16.0/share:/gnu/store/gpvwv9nff7k9l9nmyyqi9w9bzc8j0186-shared-mime-info-1.15/share:/gnu/store/3x2kak8abb6z2klch72kfff2qxzv00pj-libpng-1.6.37/share:/gnu/store/brfl5rvq1jh93lkcnz25ywaggzxc5xks-python-xcffib-0.6.0/share:/gnu/store/6ja0r94dg3fbsb22p0sqchhvimyw49gd-python-pillow-8.0.1/share:/gnu/store/8gdl9sf6h6bin2i3dhad76z105ayk7xr-python-defusedxml-0.6.0/share:/gnu/store/nqssc5g3s2gw9h8kfv93ykf8g2wf780h-python-pycparser-2.20/share:/gnu/store/b0svsfz2vw2qwlfsi56k8fwbx4fzcfhk-python-six-1.14.0/share:/gnu/store/gfapkk5c6hvl1d94m4sqnhn7f9l5gqyh-linux-libre-headers-5.4.20/share:/gnu/store/mnk5rp12lrnm30471idpdfia8riv0m01-python-wcwidth-0.1.8/share:/gnu/store/jk078364fi37sm2yyrmnla1d6d4bjwb5-python-six-bootstrap-1.14.0/share:/gnu/store/hh397yagghj2nrpwv9cdc6cgqwbrk4yx-python-py-1.8.1/share:/gnu/store/p0wphmjxi2mn1i72m1bq2mbfbq5d706h-python-pluggy-0.13.1/share:/gnu/store/gfinivfp1knczz2lg1d0q5p6jasslal8-python-packaging-bootstrap-20.0/share:/gnu/store/avamm2w7dw3hinrixx09h6dvw8m3mili-python-more-itertools-8.2.0/share:/gnu/store/l72vqwgkc23pvvp00pzmkjqraa9g78wl-python-attrs-bootstrap-19.3.0/share:/gnu/store/09c14l4iag378c706ygyj8apan1xwq83-python-atomicwrites-1.3.0/share:/gnu/store/8nh0hbrr8iaz6qkwavcnzi0824f3xb68-libsepol-3.0/share:/gnu/store/2mbh4bhhmkhm7188c7rqwzbm5lap0cc9-libxrender-0.9.10/share:/gnu/store/qizplwwgqwyq6qmz1i6jlaib5kgzrgwq-icu4c-66.1/share:/gnu/store/avjxs6qgyginkiq6qpk9280zakkaj35h-graphite2-1.3.13/share:/gnu/store/xwl0p4m34bcan0v9vkjkyzwi6znsv4dm-pixman-0.38.4/share:/gnu/store/2hpgzimhi1vg9n8xagvmqh5sf96svz8q-libxext-1.3.4/share:/gnu/store/nab7hhw326cpmpwyc1rgm0q8sk464qry-libx11-1.6.9/share:/gnu/store/mw5p6slda60cw309dfqmfzmna064xp76-python-olefile-0.46/share:/gnu/store/y4n225qk6limj4yxplscppwqcaan49hw-python-pyparsing-2.4.6/share:/gnu/store/wxl57nkbqgamfp73b7v62kk3f1hiv0cz-xorgproto-2019.2/share:/gnu/store/a8gdwnmpryd39jixzy4xs9p4i7gy17qv-libxcb-1.14/share:/gnu/store/lc8irxnwazq340ygkbqh0ask446jzy9k-util-macros-1.19.2/share:/gnu/store/6cdl970wcv4jhvpgbh8sdj54a5gwhmwj-libxdmcp-1.1.3/share:/gnu/store/h7sy4hr7arjknbyy1aq0xwv6fksnzw9n-libxau-1.0.9/share:/gnu/store/klk98l8czl05lvanrr7xl7a9hksac4ak-libpthread-stubs-0.4/share' | |
environment variable `GIO_EXTRA_MODULES' unset | |
environment variable `BASH_LOADABLES_PATH' unset | |
environment variable `C_INCLUDE_PATH' set to `/gnu/store/bf2jmcvrq5qbbnwv8mzxglrkaj2v7232-fontconfig-2.13.1/include:/gnu/store/rmbxm1fg47b347kv1h5fb2w04nxqbsj6-glib-2.62.6/include:/gnu/store/dj4w1pxrdm81wqf2phgbay5i20r8g7wv-pango-1.44.7/include:/gnu/store/hirahvpzx52igjg4z0l4lzfgdfd83bn0-gdk-pixbuf-2.40.0/include:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/include:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/include:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/include:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/include:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/include:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/include:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/include:/gnu/store/q9rm8h9imazsq2c4qiv2yjpvlvliywqb-python-3.8.2/include:/gnu/store/a45p39mgqvfd8kjwibyr0q42k1mw7gmf-util-linux-2.35.1-lib/include:/gnu/store/haaam6v8l4s75mj9xmpb9gc78xk001y9-freetype-2.10.1/include:/gnu/store/imh5xxqw10dql4crlngbbjh4r24raf4j-expat-2.2.9/include:/gnu/store/rykm237xkmq7rl1p0nwass01p090p88x-zlib-1.2.11/include:/gnu/store/sh764z2hm5qcr4cqx4amcipcbkvg76i2-libselinux-3.0/include:/gnu/store/bw15z9kh9c65ycc2vbhl2izwfwfva7p1-libffi-3.3/include:/gnu/store/k0aqiy7yx8n28dvm3f0a04ka5sd8y950-pcre-8.44/include:/gnu/store/igp2w6cmdax5fj0nylr9vf61m65kl4r2-libxft-2.3.3/include:/gnu/store/3jzvmv2an5aw4m0mpg949knrm8r3nwxy-harfbuzz-2.6.4/include:/gnu/store/llccvnpm1dm94d7lndrhs2m6421p45pd-fribidi-1.0.9/include:/gnu/store/wnm4fijksgfgal7xqvi4ismy7qcc2nis-cairo-1.16.0/include:/gnu/store/3x2kak8abb6z2klch72kfff2qxzv00pj-libpng-1.6.37/include:/gnu/store/gfapkk5c6hvl1d94m4sqnhn7f9l5gqyh-linux-libre-headers-5.4.20/include:/gnu/store/8nh0hbrr8iaz6qkwavcnzi0824f3xb68-libsepol-3.0/include:/gnu/store/2mbh4bhhmkhm7188c7rqwzbm5lap0cc9-libxrender-0.9.10/include:/gnu/store/qizplwwgqwyq6qmz1i6jlaib5kgzrgwq-icu4c-66.1/include:/gnu/store/avjxs6qgyginkiq6qpk9280zakkaj35h-graphite2-1.3.13/include:/gnu/store/xwl0p4m34bcan0v9vkjkyzwi6znsv4dm-pixman-0.38.4/include:/gnu/store/2hpgzimhi1vg9n8xagvmqh5sf96svz8q-libxext-1.3.4/include:/gnu/store/nab7hhw326cpmpwyc1rgm0q8sk464qry-libx11-1.6.9/include:/gnu/store/wxl57nkbqgamfp73b7v62kk3f1hiv0cz-xorgproto-2019.2/include:/gnu/store/a8gdwnmpryd39jixzy4xs9p4i7gy17qv-libxcb-1.14/include:/gnu/store/6cdl970wcv4jhvpgbh8sdj54a5gwhmwj-libxdmcp-1.1.3/include:/gnu/store/h7sy4hr7arjknbyy1aq0xwv6fksnzw9n-libxau-1.0.9/include' | |
environment variable `CPLUS_INCLUDE_PATH' set to `/gnu/store/bf2jmcvrq5qbbnwv8mzxglrkaj2v7232-fontconfig-2.13.1/include:/gnu/store/rmbxm1fg47b347kv1h5fb2w04nxqbsj6-glib-2.62.6/include:/gnu/store/dj4w1pxrdm81wqf2phgbay5i20r8g7wv-pango-1.44.7/include:/gnu/store/hirahvpzx52igjg4z0l4lzfgdfd83bn0-gdk-pixbuf-2.40.0/include:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/include:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/include:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/include:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/include:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/include:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/include:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include/c++:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/include:/gnu/store/q9rm8h9imazsq2c4qiv2yjpvlvliywqb-python-3.8.2/include:/gnu/store/a45p39mgqvfd8kjwibyr0q42k1mw7gmf-util-linux-2.35.1-lib/include:/gnu/store/haaam6v8l4s75mj9xmpb9gc78xk001y9-freetype-2.10.1/include:/gnu/store/imh5xxqw10dql4crlngbbjh4r24raf4j-expat-2.2.9/include:/gnu/store/rykm237xkmq7rl1p0nwass01p090p88x-zlib-1.2.11/include:/gnu/store/sh764z2hm5qcr4cqx4amcipcbkvg76i2-libselinux-3.0/include:/gnu/store/bw15z9kh9c65ycc2vbhl2izwfwfva7p1-libffi-3.3/include:/gnu/store/k0aqiy7yx8n28dvm3f0a04ka5sd8y950-pcre-8.44/include:/gnu/store/igp2w6cmdax5fj0nylr9vf61m65kl4r2-libxft-2.3.3/include:/gnu/store/3jzvmv2an5aw4m0mpg949knrm8r3nwxy-harfbuzz-2.6.4/include:/gnu/store/llccvnpm1dm94d7lndrhs2m6421p45pd-fribidi-1.0.9/include:/gnu/store/wnm4fijksgfgal7xqvi4ismy7qcc2nis-cairo-1.16.0/include:/gnu/store/3x2kak8abb6z2klch72kfff2qxzv00pj-libpng-1.6.37/include:/gnu/store/gfapkk5c6hvl1d94m4sqnhn7f9l5gqyh-linux-libre-headers-5.4.20/include:/gnu/store/8nh0hbrr8iaz6qkwavcnzi0824f3xb68-libsepol-3.0/include:/gnu/store/2mbh4bhhmkhm7188c7rqwzbm5lap0cc9-libxrender-0.9.10/include:/gnu/store/qizplwwgqwyq6qmz1i6jlaib5kgzrgwq-icu4c-66.1/include:/gnu/store/avjxs6qgyginkiq6qpk9280zakkaj35h-graphite2-1.3.13/include:/gnu/store/xwl0p4m34bcan0v9vkjkyzwi6znsv4dm-pixman-0.38.4/include:/gnu/store/2hpgzimhi1vg9n8xagvmqh5sf96svz8q-libxext-1.3.4/include:/gnu/store/nab7hhw326cpmpwyc1rgm0q8sk464qry-libx11-1.6.9/include:/gnu/store/wxl57nkbqgamfp73b7v62kk3f1hiv0cz-xorgproto-2019.2/include:/gnu/store/a8gdwnmpryd39jixzy4xs9p4i7gy17qv-libxcb-1.14/include:/gnu/store/6cdl970wcv4jhvpgbh8sdj54a5gwhmwj-libxdmcp-1.1.3/include:/gnu/store/h7sy4hr7arjknbyy1aq0xwv6fksnzw9n-libxau-1.0.9/include' | |
environment variable `LIBRARY_PATH' set to `/gnu/store/jambbwx92axfs36k8j5q0l7pjqnj1pl3-python-pytest-cov-2.8.1/lib:/gnu/store/6pnsqg6sm2dv48bldyqs4c3sa589j9f9-python-pytest-runner-5.2/lib:/gnu/store/bf2jmcvrq5qbbnwv8mzxglrkaj2v7232-fontconfig-2.13.1/lib:/gnu/store/rmbxm1fg47b347kv1h5fb2w04nxqbsj6-glib-2.62.6/lib:/gnu/store/dj4w1pxrdm81wqf2phgbay5i20r8g7wv-pango-1.44.7/lib:/gnu/store/hirahvpzx52igjg4z0l4lzfgdfd83bn0-gdk-pixbuf-2.40.0/lib:/gnu/store/m46j867x71q45cgzcqk8j102ik3l7kza-python-cairocffi-1.2.0/lib:/gnu/store/vh6qqyv578hkdidy1pxk23kv3bkf93cf-python-cairosvg-2.5.0/lib:/gnu/store/2lagn19nyzrhim0zn1c39i90qa60zcja-python-cffi-1.14.0/lib:/gnu/store/768gnalsyq36f3p77wbqdswhhxk7pxmf-python-cssselect2-0.4.1/lib:/gnu/store/0wjnd4in8w95fn93334ljxz5b936ibpd-python-html5lib-1.1/lib:/gnu/store/p3mjf635qhzb8q4kd2fgzmsyl7l9cdd4-python-pyphen-0.10.0/lib:/gnu/store/5i7dnnkis4zfljs75sanpr0jl9ycz6jw-python-tinycss2-1.1.0/lib:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/lib:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/lib:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/lib:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/lib:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/lib:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/lib:/gnu/store/s3dcqzwqaakv1yx37by9chksdbkgih17-glibc-2.31-static/lib:/gnu/store/hwcky7446s952w0mwchhmm211ll07zrq-glibc-utf8-locales-2.31/lib:/gnu/store/q9rm8h9imazsq2c4qiv2yjpvlvliywqb-python-3.8.2/lib:/gnu/store/3bk454z353a42l1l4yaxa6lrl3dh24mv-python-pytest-5.3.5/lib:/gnu/store/9fcmz457dvb4qj6jwmr9ydcdindxhvsl-python-coverage-5.0.3/lib:/gnu/store/a45p39mgqvfd8kjwibyr0q42k1mw7gmf-util-linux-2.35.1-lib/lib:/gnu/store/haaam6v8l4s75mj9xmpb9gc78xk001y9-freetype-2.10.1/lib:/gnu/store/imh5xxqw10dql4crlngbbjh4r24raf4j-expat-2.2.9/lib:/gnu/store/rykm237xkmq7rl1p0nwass01p090p88x-zlib-1.2.11/lib:/gnu/store/sh764z2hm5qcr4cqx4amcipcbkvg76i2-libselinux-3.0/lib:/gnu/store/bw15z9kh9c65ycc2vbhl2izwfwfva7p1-libffi-3.3/lib:/gnu/store/k0aqiy7yx8n28dvm3f0a04ka5sd8y950-pcre-8.44/lib:/gnu/store/igp2w6cmdax5fj0nylr9vf61m65kl4r2-libxft-2.3.3/lib:/gnu/store/3jzvmv2an5aw4m0mpg949knrm8r3nwxy-harfbuzz-2.6.4/lib:/gnu/store/llccvnpm1dm94d7lndrhs2m6421p45pd-fribidi-1.0.9/lib:/gnu/store/wnm4fijksgfgal7xqvi4ismy7qcc2nis-cairo-1.16.0/lib:/gnu/store/3x2kak8abb6z2klch72kfff2qxzv00pj-libpng-1.6.37/lib:/gnu/store/brfl5rvq1jh93lkcnz25ywaggzxc5xks-python-xcffib-0.6.0/lib:/gnu/store/6ja0r94dg3fbsb22p0sqchhvimyw49gd-python-pillow-8.0.1/lib:/gnu/store/8gdl9sf6h6bin2i3dhad76z105ayk7xr-python-defusedxml-0.6.0/lib:/gnu/store/nqssc5g3s2gw9h8kfv93ykf8g2wf780h-python-pycparser-2.20/lib:/gnu/store/p632jxixydya1rh2f1sgwid27np1yvv5-python-webencodings-0.5.1/lib:/gnu/store/b0svsfz2vw2qwlfsi56k8fwbx4fzcfhk-python-six-1.14.0/lib:/gnu/store/mnk5rp12lrnm30471idpdfia8riv0m01-python-wcwidth-0.1.8/lib:/gnu/store/jk078364fi37sm2yyrmnla1d6d4bjwb5-python-six-bootstrap-1.14.0/lib:/gnu/store/hh397yagghj2nrpwv9cdc6cgqwbrk4yx-python-py-1.8.1/lib:/gnu/store/p0wphmjxi2mn1i72m1bq2mbfbq5d706h-python-pluggy-0.13.1/lib:/gnu/store/gfinivfp1knczz2lg1d0q5p6jasslal8-python-packaging-bootstrap-20.0/lib:/gnu/store/avamm2w7dw3hinrixx09h6dvw8m3mili-python-more-itertools-8.2.0/lib:/gnu/store/l72vqwgkc23pvvp00pzmkjqraa9g78wl-python-attrs-bootstrap-19.3.0/lib:/gnu/store/09c14l4iag378c706ygyj8apan1xwq83-python-atomicwrites-1.3.0/lib:/gnu/store/8nh0hbrr8iaz6qkwavcnzi0824f3xb68-libsepol-3.0/lib:/gnu/store/2mbh4bhhmkhm7188c7rqwzbm5lap0cc9-libxrender-0.9.10/lib:/gnu/store/qizplwwgqwyq6qmz1i6jlaib5kgzrgwq-icu4c-66.1/lib:/gnu/store/avjxs6qgyginkiq6qpk9280zakkaj35h-graphite2-1.3.13/lib:/gnu/store/xwl0p4m34bcan0v9vkjkyzwi6znsv4dm-pixman-0.38.4/lib:/gnu/store/2hpgzimhi1vg9n8xagvmqh5sf96svz8q-libxext-1.3.4/lib:/gnu/store/nab7hhw326cpmpwyc1rgm0q8sk464qry-libx11-1.6.9/lib:/gnu/store/mw5p6slda60cw309dfqmfzmna064xp76-python-olefile-0.46/lib:/gnu/store/y4n225qk6limj4yxplscppwqcaan49hw-python-pyparsing-2.4.6/lib:/gnu/store/a8gdwnmpryd39jixzy4xs9p4i7gy17qv-libxcb-1.14/lib:/gnu/store/lc8irxnwazq340ygkbqh0ask446jzy9k-util-macros-1.19.2/lib:/gnu/store/6cdl970wcv4jhvpgbh8sdj54a5gwhmwj-libxdmcp-1.1.3/lib:/gnu/store/h7sy4hr7arjknbyy1aq0xwv6fksnzw9n-libxau-1.0.9/lib:/gnu/store/klk98l8czl05lvanrr7xl7a9hksac4ak-libpthread-stubs-0.4/lib' | |
environment variable `GUIX_LOCPATH' set to `/gnu/store/hwcky7446s952w0mwchhmm211ll07zrq-glibc-utf8-locales-2.31/lib/locale' | |
phase `set-paths' succeeded after 0.0 seconds | |
starting phase `install-locale' | |
using 'en_US.utf8' locale for category "LC_ALL" | |
phase `install-locale' succeeded after 0.0 seconds | |
starting phase `unpack' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/.gitignore' -> `./.gitignore' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/LICENSE' -> `./LICENSE' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/NEWS.rst' -> `./NEWS.rst' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/README.rst' -> `./README.rst' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/setup.cfg' -> `./setup.cfg' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/setup.py' -> `./setup.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/VERSION' -> `./weasyprint/VERSION' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/__init__.py' -> `./weasyprint/__init__.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/__main__.py' -> `./weasyprint/__main__.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/document.py' -> `./weasyprint/document.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/draw.py' -> `./weasyprint/draw.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/fonts.py' -> `./weasyprint/fonts.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/html.py' -> `./weasyprint/html.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/images.py' -> `./weasyprint/images.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/logger.py' -> `./weasyprint/logger.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/pdf.py' -> `./weasyprint/pdf.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/stacking.py' -> `./weasyprint/stacking.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/text.py' -> `./weasyprint/text.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/urls.py' -> `./weasyprint/urls.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tools/navigator.py' -> `./weasyprint/tools/navigator.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tools/renderer.py' -> `./weasyprint/tools/renderer.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tools/__init__.py' -> `./weasyprint/tools/__init__.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/__init__.py' -> `./weasyprint/tests/__init__.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_acid2.py' -> `./weasyprint/tests/test_acid2.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_api.py' -> `./weasyprint/tests/test_api.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_boxes.py' -> `./weasyprint/tests/test_boxes.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_counters.py' -> `./weasyprint/tests/test_counters.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_css.py' -> `./weasyprint/tests/test_css.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_css_descriptors.py' -> `./weasyprint/tests/test_css_descriptors.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_css_validation.py' -> `./weasyprint/tests/test_css_validation.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_float.py' -> `./weasyprint/tests/test_float.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_fonts.py' -> `./weasyprint/tests/test_fonts.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_pdf.py' -> `./weasyprint/tests/test_pdf.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_presentational_hints.py' -> `./weasyprint/tests/test_presentational_hints.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_stacking.py' -> `./weasyprint/tests/test_stacking.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_target.py' -> `./weasyprint/tests/test_target.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_text.py' -> `./weasyprint/tests/test_text.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_tools.py' -> `./weasyprint/tests/test_tools.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_unicode.py' -> `./weasyprint/tests/test_unicode.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_variables.py' -> `./weasyprint/tests/test_variables.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/testing_utils.py' -> `./weasyprint/tests/testing_utils.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_layout/__init__.py' -> `./weasyprint/tests/test_layout/__init__.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_layout/test_block.py' -> `./weasyprint/tests/test_layout/test_block.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_layout/test_column.py' -> `./weasyprint/tests/test_layout/test_column.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_layout/test_flex.py' -> `./weasyprint/tests/test_layout/test_flex.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_layout/test_image.py' -> `./weasyprint/tests/test_layout/test_image.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_layout/test_inline.py' -> `./weasyprint/tests/test_layout/test_inline.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_layout/test_inline_block.py' -> `./weasyprint/tests/test_layout/test_inline_block.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_layout/test_list.py' -> `./weasyprint/tests/test_layout/test_list.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_layout/test_page.py' -> `./weasyprint/tests/test_layout/test_page.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_layout/test_position.py' -> `./weasyprint/tests/test_layout/test_position.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_layout/test_shrink_to_fit.py' -> `./weasyprint/tests/test_layout/test_shrink_to_fit.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_layout/test_table.py' -> `./weasyprint/tests/test_layout/test_table.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/__init__.py' -> `./weasyprint/tests/test_draw/__init__.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_background.py' -> `./weasyprint/tests/test_draw/test_background.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_before_after.py' -> `./weasyprint/tests/test_draw/test_before_after.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_box.py' -> `./weasyprint/tests/test_draw/test_box.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_column.py' -> `./weasyprint/tests/test_draw/test_column.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_current_color.py' -> `./weasyprint/tests/test_draw/test_current_color.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_float.py' -> `./weasyprint/tests/test_draw/test_float.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_gradient.py' -> `./weasyprint/tests/test_draw/test_gradient.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_image.py' -> `./weasyprint/tests/test_draw/test_image.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_list.py' -> `./weasyprint/tests/test_draw/test_list.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_opacity.py' -> `./weasyprint/tests/test_draw/test_opacity.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_overflow.py' -> `./weasyprint/tests/test_draw/test_overflow.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_table.py' -> `./weasyprint/tests/test_draw/test_table.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_text.py' -> `./weasyprint/tests/test_draw/test_text.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_transform.py' -> `./weasyprint/tests/test_draw/test_transform.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/test_draw/test_visibility.py' -> `./weasyprint/tests/test_draw/test_visibility.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/AHEM____.TTF' -> `./weasyprint/tests/resources/AHEM____.TTF' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/acid2-reference.html' -> `./weasyprint/tests/resources/acid2-reference.html' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/acid2-test.html' -> `./weasyprint/tests/resources/acid2-test.html' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/blue.jpg' -> `./weasyprint/tests/resources/blue.jpg' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/doc1.html' -> `./weasyprint/tests/resources/doc1.html' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/doc1_UTF-16BE.html' -> `./weasyprint/tests/resources/doc1_UTF-16BE.html' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/icon.png' -> `./weasyprint/tests/resources/icon.png' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/latin1-test.css' -> `./weasyprint/tests/resources/latin1-test.css' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/logo_small.png' -> `./weasyprint/tests/resources/logo_small.png' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/mini_ua.css' -> `./weasyprint/tests/resources/mini_ua.css' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/pattern.gif' -> `./weasyprint/tests/resources/pattern.gif' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/pattern.palette.png' -> `./weasyprint/tests/resources/pattern.palette.png' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/pattern.png' -> `./weasyprint/tests/resources/pattern.png' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/pattern.svg' -> `./weasyprint/tests/resources/pattern.svg' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/sheet2.css' -> `./weasyprint/tests/resources/sheet2.css' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/user.css' -> `./weasyprint/tests/resources/user.css' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/utf8-test.css' -> `./weasyprint/tests/resources/utf8-test.css' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/weasyprint.otf' -> `./weasyprint/tests/resources/weasyprint.otf' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/really-a-png.svg' -> `./weasyprint/tests/resources/really-a-png.svg' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/really-a-svg.png' -> `./weasyprint/tests/resources/really-a-svg.png' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/tests/resources/sub_directory/sheet1.css' -> `./weasyprint/tests/resources/sub_directory/sheet1.css' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/layout/__init__.py' -> `./weasyprint/layout/__init__.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/layout/absolute.py' -> `./weasyprint/layout/absolute.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/layout/backgrounds.py' -> `./weasyprint/layout/backgrounds.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/layout/blocks.py' -> `./weasyprint/layout/blocks.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/layout/columns.py' -> `./weasyprint/layout/columns.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/layout/flex.py' -> `./weasyprint/layout/flex.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/layout/float.py' -> `./weasyprint/layout/float.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/layout/inlines.py' -> `./weasyprint/layout/inlines.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/layout/min_max.py' -> `./weasyprint/layout/min_max.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/layout/pages.py' -> `./weasyprint/layout/pages.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/layout/percentages.py' -> `./weasyprint/layout/percentages.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/layout/preferred.py' -> `./weasyprint/layout/preferred.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/layout/replaced.py' -> `./weasyprint/layout/replaced.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/layout/tables.py' -> `./weasyprint/layout/tables.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/formatting_structure/boxes.py' -> `./weasyprint/formatting_structure/boxes.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/formatting_structure/build.py' -> `./weasyprint/formatting_structure/build.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/css/__init__.py' -> `./weasyprint/css/__init__.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/css/computed_values.py' -> `./weasyprint/css/computed_values.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/css/counters.py' -> `./weasyprint/css/counters.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/css/html5_ph.css' -> `./weasyprint/css/html5_ph.css' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/css/html5_ua.css' -> `./weasyprint/css/html5_ua.css' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/css/media_queries.py' -> `./weasyprint/css/media_queries.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/css/properties.py' -> `./weasyprint/css/properties.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/css/targets.py' -> `./weasyprint/css/targets.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/css/tests_ua.css' -> `./weasyprint/css/tests_ua.css' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/css/utils.py' -> `./weasyprint/css/utils.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/css/validation/__init__.py' -> `./weasyprint/css/validation/__init__.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/css/validation/descriptors.py' -> `./weasyprint/css/validation/descriptors.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/css/validation/expanders.py' -> `./weasyprint/css/validation/expanders.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/weasyprint/css/validation/properties.py' -> `./weasyprint/css/validation/properties.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/docs/api.rst' -> `./docs/api.rst' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/docs/changelog.rst' -> `./docs/changelog.rst' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/docs/conf.py' -> `./docs/conf.py' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/docs/features.rst' -> `./docs/features.rst' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/docs/hacking.rst' -> `./docs/hacking.rst' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/docs/index.rst' -> `./docs/index.rst' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/docs/install.rst' -> `./docs/install.rst' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/docs/tips-tricks.rst' -> `./docs/tips-tricks.rst' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/docs/tutorial.rst' -> `./docs/tutorial.rst' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/docs/weasyprint-navigator.png' -> `./docs/weasyprint-navigator.png' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/docs/_static/box_model.png' -> `./docs/_static/box_model.png' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/docs/_static/custom.css' -> `./docs/_static/custom.css' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/docs/_static/icon.ico' -> `./docs/_static/icon.ico' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/docs/_static/logo.svg' -> `./docs/_static/logo.svg' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/.github/FUNDING.yml' -> `./.github/FUNDING.yml' | |
`/gnu/store/sc1pvzi68v27j20k0qvrrqvw5maqhggl-weasyprint-52.1-checkout/.github/workflows/tests.yml' -> `./.github/workflows/tests.yml' | |
phase `unpack' succeeded after 0.0 seconds | |
starting phase `disable-linters' | |
phase `disable-linters' succeeded after 0.0 seconds | |
starting phase `patch-library-paths' | |
phase `patch-library-paths' succeeded after 0.0 seconds | |
starting phase `ensure-no-mtimes-pre-1980' | |
phase `ensure-no-mtimes-pre-1980' succeeded after 0.0 seconds | |
starting phase `enable-bytecode-determinism' | |
phase `enable-bytecode-determinism' succeeded after 0.0 seconds | |
starting phase `patch-usr-bin-file' | |
phase `patch-usr-bin-file' succeeded after 0.0 seconds | |
starting phase `patch-source-shebangs' | |
patch-shebang: ./setup.py: changing `/usr/bin/env python' to `/gnu/store/wc4xh9wj49rlbyivxi4lsws6whhzx4ab-python-wrapper-3.8.2/bin/python' | |
phase `patch-source-shebangs' succeeded after 0.0 seconds | |
starting phase `patch-generated-file-shebangs' | |
phase `patch-generated-file-shebangs' succeeded after 0.0 seconds | |
starting phase `build' | |
running "python setup.py" with command "build" and parameters () | |
running build | |
running build_py | |
creating build | |
creating build/lib | |
creating build/lib/weasyprint | |
copying weasyprint/__init__.py -> build/lib/weasyprint | |
copying weasyprint/__main__.py -> build/lib/weasyprint | |
copying weasyprint/document.py -> build/lib/weasyprint | |
copying weasyprint/draw.py -> build/lib/weasyprint | |
copying weasyprint/html.py -> build/lib/weasyprint | |
copying weasyprint/images.py -> build/lib/weasyprint | |
copying weasyprint/logger.py -> build/lib/weasyprint | |
copying weasyprint/pdf.py -> build/lib/weasyprint | |
copying weasyprint/stacking.py -> build/lib/weasyprint | |
copying weasyprint/urls.py -> build/lib/weasyprint | |
copying weasyprint/fonts.py -> build/lib/weasyprint | |
copying weasyprint/text.py -> build/lib/weasyprint | |
creating build/lib/weasyprint/css | |
copying weasyprint/css/__init__.py -> build/lib/weasyprint/css | |
copying weasyprint/css/computed_values.py -> build/lib/weasyprint/css | |
copying weasyprint/css/counters.py -> build/lib/weasyprint/css | |
copying weasyprint/css/media_queries.py -> build/lib/weasyprint/css | |
copying weasyprint/css/properties.py -> build/lib/weasyprint/css | |
copying weasyprint/css/targets.py -> build/lib/weasyprint/css | |
copying weasyprint/css/utils.py -> build/lib/weasyprint/css | |
creating build/lib/weasyprint/css/validation | |
copying weasyprint/css/validation/__init__.py -> build/lib/weasyprint/css/validation | |
copying weasyprint/css/validation/descriptors.py -> build/lib/weasyprint/css/validation | |
copying weasyprint/css/validation/expanders.py -> build/lib/weasyprint/css/validation | |
copying weasyprint/css/validation/properties.py -> build/lib/weasyprint/css/validation | |
package init file 'weasyprint/formatting_structure/__init__.py' not found (or not a regular file) | |
creating build/lib/weasyprint/formatting_structure | |
copying weasyprint/formatting_structure/boxes.py -> build/lib/weasyprint/formatting_structure | |
copying weasyprint/formatting_structure/build.py -> build/lib/weasyprint/formatting_structure | |
creating build/lib/weasyprint/layout | |
copying weasyprint/layout/__init__.py -> build/lib/weasyprint/layout | |
copying weasyprint/layout/absolute.py -> build/lib/weasyprint/layout | |
copying weasyprint/layout/backgrounds.py -> build/lib/weasyprint/layout | |
copying weasyprint/layout/blocks.py -> build/lib/weasyprint/layout | |
copying weasyprint/layout/columns.py -> build/lib/weasyprint/layout | |
copying weasyprint/layout/flex.py -> build/lib/weasyprint/layout | |
copying weasyprint/layout/float.py -> build/lib/weasyprint/layout | |
copying weasyprint/layout/inlines.py -> build/lib/weasyprint/layout | |
copying weasyprint/layout/min_max.py -> build/lib/weasyprint/layout | |
copying weasyprint/layout/pages.py -> build/lib/weasyprint/layout | |
copying weasyprint/layout/percentages.py -> build/lib/weasyprint/layout | |
copying weasyprint/layout/preferred.py -> build/lib/weasyprint/layout | |
copying weasyprint/layout/replaced.py -> build/lib/weasyprint/layout | |
copying weasyprint/layout/tables.py -> build/lib/weasyprint/layout | |
creating build/lib/weasyprint/tests | |
copying weasyprint/tests/__init__.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_acid2.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_api.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_boxes.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_counters.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_css.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_css_descriptors.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_css_validation.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_float.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_fonts.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_pdf.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_presentational_hints.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_stacking.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_target.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_text.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_tools.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_unicode.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/test_variables.py -> build/lib/weasyprint/tests | |
copying weasyprint/tests/testing_utils.py -> build/lib/weasyprint/tests | |
creating build/lib/weasyprint/tools | |
copying weasyprint/tools/navigator.py -> build/lib/weasyprint/tools | |
copying weasyprint/tools/renderer.py -> build/lib/weasyprint/tools | |
copying weasyprint/tools/__init__.py -> build/lib/weasyprint/tools | |
copying weasyprint/VERSION -> build/lib/weasyprint | |
copying weasyprint/css/html5_ph.css -> build/lib/weasyprint/css | |
copying weasyprint/css/html5_ua.css -> build/lib/weasyprint/css | |
copying weasyprint/css/tests_ua.css -> build/lib/weasyprint/css | |
creating build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/AHEM____.TTF -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/acid2-reference.html -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/acid2-test.html -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/blue.jpg -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/doc1.html -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/doc1_UTF-16BE.html -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/icon.png -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/latin1-test.css -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/logo_small.png -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/mini_ua.css -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/pattern.gif -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/pattern.palette.png -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/pattern.png -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/pattern.svg -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/sheet2.css -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/user.css -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/utf8-test.css -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/weasyprint.otf -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/really-a-png.svg -> build/lib/weasyprint/tests/resources | |
copying weasyprint/tests/resources/really-a-svg.png -> build/lib/weasyprint/tests/resources | |
creating build/lib/weasyprint/tests/resources/sub_directory | |
copying weasyprint/tests/resources/sub_directory/sheet1.css -> build/lib/weasyprint/tests/resources/sub_directory | |
phase `build' succeeded after 0.2 seconds | |
starting phase `install' | |
running "python setup.py" with command "install" and parameters ("--prefix=/gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1" "--single-version-externally-managed" "--root=/") | |
running install | |
running build | |
running build_py | |
package init file 'weasyprint/formatting_structure/__init__.py' not found (or not a regular file) | |
running install_lib | |
creating /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1 | |
creating /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib | |
creating /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8 | |
creating /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages | |
creating /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint | |
copying build/lib/weasyprint/__init__.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint | |
copying build/lib/weasyprint/__main__.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint | |
copying build/lib/weasyprint/document.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint | |
copying build/lib/weasyprint/draw.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint | |
copying build/lib/weasyprint/html.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint | |
copying build/lib/weasyprint/images.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint | |
copying build/lib/weasyprint/logger.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint | |
copying build/lib/weasyprint/pdf.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint | |
copying build/lib/weasyprint/stacking.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint | |
copying build/lib/weasyprint/urls.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint | |
copying build/lib/weasyprint/fonts.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint | |
copying build/lib/weasyprint/text.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint | |
creating /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css | |
copying build/lib/weasyprint/css/__init__.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css | |
copying build/lib/weasyprint/css/computed_values.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css | |
copying build/lib/weasyprint/css/counters.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css | |
copying build/lib/weasyprint/css/media_queries.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css | |
copying build/lib/weasyprint/css/properties.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css | |
copying build/lib/weasyprint/css/targets.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css | |
copying build/lib/weasyprint/css/utils.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css | |
creating /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/validation | |
copying build/lib/weasyprint/css/validation/__init__.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/validation | |
copying build/lib/weasyprint/css/validation/descriptors.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/validation | |
copying build/lib/weasyprint/css/validation/expanders.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/validation | |
copying build/lib/weasyprint/css/validation/properties.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/validation | |
copying build/lib/weasyprint/css/html5_ph.css -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css | |
copying build/lib/weasyprint/css/html5_ua.css -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css | |
copying build/lib/weasyprint/css/tests_ua.css -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css | |
creating /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/formatting_structure | |
copying build/lib/weasyprint/formatting_structure/boxes.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/formatting_structure | |
copying build/lib/weasyprint/formatting_structure/build.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/formatting_structure | |
creating /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
copying build/lib/weasyprint/layout/__init__.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
copying build/lib/weasyprint/layout/absolute.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
copying build/lib/weasyprint/layout/backgrounds.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
copying build/lib/weasyprint/layout/blocks.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
copying build/lib/weasyprint/layout/columns.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
copying build/lib/weasyprint/layout/flex.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
copying build/lib/weasyprint/layout/float.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
copying build/lib/weasyprint/layout/inlines.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
copying build/lib/weasyprint/layout/min_max.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
copying build/lib/weasyprint/layout/pages.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
copying build/lib/weasyprint/layout/percentages.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
copying build/lib/weasyprint/layout/preferred.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
copying build/lib/weasyprint/layout/replaced.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
copying build/lib/weasyprint/layout/tables.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout | |
creating /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/__init__.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_acid2.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_api.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_boxes.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_counters.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_css.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_css_descriptors.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_css_validation.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_float.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_fonts.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_pdf.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_presentational_hints.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_stacking.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_target.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_text.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_tools.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_unicode.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/test_variables.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
copying build/lib/weasyprint/tests/testing_utils.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests | |
creating /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/AHEM____.TTF -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/acid2-reference.html -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/acid2-test.html -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/blue.jpg -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/doc1.html -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/doc1_UTF-16BE.html -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/icon.png -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/latin1-test.css -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/logo_small.png -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/mini_ua.css -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/pattern.gif -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/pattern.palette.png -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/pattern.png -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/pattern.svg -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/sheet2.css -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/user.css -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/utf8-test.css -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/weasyprint.otf -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/really-a-png.svg -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
copying build/lib/weasyprint/tests/resources/really-a-svg.png -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources | |
creating /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources/sub_directory | |
copying build/lib/weasyprint/tests/resources/sub_directory/sheet1.css -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/resources/sub_directory | |
creating /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tools | |
copying build/lib/weasyprint/tools/navigator.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tools | |
copying build/lib/weasyprint/tools/renderer.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tools | |
copying build/lib/weasyprint/tools/__init__.py -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tools | |
copying build/lib/weasyprint/VERSION -> /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/__init__.py to __init__.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/__main__.py to __main__.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/document.py to document.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/draw.py to draw.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/html.py to html.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/images.py to images.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/logger.py to logger.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/pdf.py to pdf.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/stacking.py to stacking.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/urls.py to urls.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/fonts.py to fonts.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/text.py to text.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/__init__.py to __init__.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/computed_values.py to computed_values.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/counters.py to counters.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/media_queries.py to media_queries.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/properties.py to properties.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/targets.py to targets.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/utils.py to utils.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/validation/__init__.py to __init__.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/validation/descriptors.py to descriptors.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/validation/expanders.py to expanders.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/css/validation/properties.py to properties.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/formatting_structure/boxes.py to boxes.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/formatting_structure/build.py to build.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout/__init__.py to __init__.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout/absolute.py to absolute.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout/backgrounds.py to backgrounds.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout/blocks.py to blocks.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout/columns.py to columns.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout/flex.py to flex.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout/float.py to float.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout/inlines.py to inlines.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout/min_max.py to min_max.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout/pages.py to pages.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout/percentages.py to percentages.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout/preferred.py to preferred.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout/replaced.py to replaced.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/layout/tables.py to tables.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/__init__.py to __init__.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_acid2.py to test_acid2.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_api.py to test_api.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_boxes.py to test_boxes.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_counters.py to test_counters.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_css.py to test_css.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_css_descriptors.py to test_css_descriptors.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_css_validation.py to test_css_validation.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_float.py to test_float.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_fonts.py to test_fonts.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_pdf.py to test_pdf.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_presentational_hints.py to test_presentational_hints.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_stacking.py to test_stacking.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_target.py to test_target.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_text.py to test_text.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_tools.py to test_tools.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_unicode.py to test_unicode.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/test_variables.py to test_variables.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tests/testing_utils.py to testing_utils.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tools/navigator.py to navigator.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tools/renderer.py to renderer.cpython-38.pyc | |
byte-compiling /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/weasyprint/tools/__init__.py to __init__.cpython-38.pyc | |
running install_egg_info | |
running egg_info | |
creating WeasyPrint.egg-info | |
writing WeasyPrint.egg-info/PKG-INFO | |
writing dependency_links to WeasyPrint.egg-info/dependency_links.txt | |
writing entry points to WeasyPrint.egg-info/entry_points.txt | |
writing requirements to WeasyPrint.egg-info/requires.txt | |
writing top-level names to WeasyPrint.egg-info/top_level.txt | |
writing manifest file 'WeasyPrint.egg-info/SOURCES.txt' | |
reading manifest file 'WeasyPrint.egg-info/SOURCES.txt' | |
writing manifest file 'WeasyPrint.egg-info/SOURCES.txt' | |
Copying WeasyPrint.egg-info to /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/lib/python3.8/site-packages/WeasyPrint-52.1-py3.8.egg-info | |
running install_scripts | |
Installing weasyprint script to /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/bin | |
phase `install' succeeded after 0.3 seconds | |
starting phase `wrap' | |
find-files: /gnu/store/i8qlgyrbicv11kpi5zsdmwb9pq09qqky-weasyprint-52.1/sbin: No such file or directory | |
phase `wrap' succeeded after 0.0 seconds | |
starting phase `check' | |
running "python setup.py" with command "test" and parameters () | |
running pytest | |
running egg_info | |
writing WeasyPrint.egg-info/PKG-INFO | |
writing dependency_links to WeasyPrint.egg-info/dependency_links.txt | |
writing entry points to WeasyPrint.egg-info/entry_points.txt | |
writing requirements to WeasyPrint.egg-info/requires.txt | |
writing top-level names to WeasyPrint.egg-info/top_level.txt | |
package init file 'weasyprint/formatting_structure/__init__.py' not found (or not a regular file) | |
reading manifest file 'WeasyPrint.egg-info/SOURCES.txt' | |
writing manifest file 'WeasyPrint.egg-info/SOURCES.txt' | |
running build_ext | |
============================= test session starts ============================== | |
platform linux -- Python 3.8.2, pytest-5.3.5, py-1.8.1, pluggy-0.13.1 | |
rootdir: /tmp/guix-build-weasyprint-52.1.drv-0/source, inifile: setup.cfg | |
plugins: cov-2.8.1 | |
collected 1307 items | |
weasyprint/tests/test_acid2.py F [ 0%] | |
weasyprint/tests/test_api.py ................... [ 1%] | |
weasyprint/tests/test_boxes.py ......................................... [ 4%] | |
................ [ 5%] | |
weasyprint/tests/test_counters.py ............................. [ 8%] | |
weasyprint/tests/test_css.py ........................................... [ 11%] | |
......................... [ 13%] | |
weasyprint/tests/test_css_descriptors.py ............... [ 14%] | |
weasyprint/tests/test_css_validation.py ................................ [ 16%] | |
........................................................................ [ 22%] | |
.................................................... [ 26%] | |
weasyprint/tests/test_float.py .........................x [ 28%] | |
weasyprint/tests/test_fonts.py ..... [ 28%] | |
weasyprint/tests/test_pdf.py .................................. [ 31%] | |
weasyprint/tests/test_presentational_hints.py ......... [ 32%] | |
weasyprint/tests/test_stacking.py ........ [ 32%] | |
weasyprint/tests/test_target.py ..... [ 33%] | |
weasyprint/tests/test_text.py F.F....................................... [ 36%] | |
.............................. [ 38%] | |
weasyprint/tests/test_tools.py .. [ 38%] | |
weasyprint/tests/test_unicode.py . [ 38%] | |
weasyprint/tests/test_variables.py ..................................... [ 41%] | |
........................................................................ [ 47%] | |
................................................ [ 50%] | |
weasyprint/tests/test_draw/test_background.py ...FFFFFFFFFFFFFFFFFFFFFF. [ 52%] | |
.................. [ 54%] | |
weasyprint/tests/test_draw/test_before_after.py FF. [ 54%] | |
weasyprint/tests/test_draw/test_box.py ..... [ 54%] | |
weasyprint/tests/test_draw/test_column.py .. [ 54%] | |
weasyprint/tests/test_draw/test_current_color.py .... [ 55%] | |
weasyprint/tests/test_draw/test_float.py ............xx [ 56%] | |
weasyprint/tests/test_draw/test_gradient.py ........... [ 57%] | |
weasyprint/tests/test_draw/test_image.py ................... [ 58%] | |
weasyprint/tests/test_draw/test_list.py ... [ 58%] | |
weasyprint/tests/test_draw/test_opacity.py ... [ 59%] | |
weasyprint/tests/test_draw/test_overflow.py ........ [ 59%] | |
weasyprint/tests/test_draw/test_table.py .....................x [ 61%] | |
weasyprint/tests/test_draw/test_text.py ... [ 61%] | |
weasyprint/tests/test_draw/test_transform.py ............. [ 62%] | |
weasyprint/tests/test_draw/test_visibility.py F.F [ 62%] | |
weasyprint/tests/test_layout/test_block.py ............................. [ 65%] | |
................................x.F [ 67%] | |
weasyprint/tests/test_layout/test_column.py ...................... [ 69%] | |
weasyprint/tests/test_layout/test_flex.py .............x............ [ 71%] | |
weasyprint/tests/test_layout/test_image.py .................... [ 72%] | |
weasyprint/tests/test_layout/test_inline.py .xF..........x....FF........ [ 75%] | |
.................... [ 76%] | |
weasyprint/tests/test_layout/test_inline_block.py F. [ 76%] | |
weasyprint/tests/test_layout/test_list.py .......x. [ 77%] | |
weasyprint/tests/test_layout/test_page.py .............................. [ 79%] | |
..x.................F................................F.FFF. [ 84%] | |
weasyprint/tests/test_layout/test_position.py ............. [ 85%] | |
weasyprint/tests/test_layout/test_shrink_to_fit.py ..................... [ 86%] | |
................................................................... [ 91%] | |
weasyprint/tests/test_layout/test_table.py ............................. [ 94%] | |
......................FF...x......F..................................... [ 99%] | |
.... [100%] | |
=================================== 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(): | |
# 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:34: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
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:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - /tmp/guix-build-weasyprint-52.1.drv-0/source/weasyprint/tests/resources/acid2-test.html | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
WARNING weasyprint:__init__.py:824 Invalid or unsupported selector '[class=second two] ', (, 'expected ], got ident') | |
WARNING weasyprint:__init__.py:83 Ignored `error: \}` at 90:74, unknown property. | |
WARNING weasyprint:__init__.py:83 Ignored `m | |
rgin: 2em` at 93:14, unknown property. | |
WARNING weasyprint:__init__.py:824 Invalid or unsupported selector '; | |
.parser ', (, 'expected a compound selector, got literal') | |
WARNING weasyprint:__init__.py:83 Ignored `width: 200` at 95:14, invalid value. | |
WARNING weasyprint:__init__.py:83 Ignored `border: 5em solid red ! error` at 96:14, invalid value. | |
WARNING weasyprint:__init__.py:83 Ignored `background: red pink` at 97:14, invalid value. | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - data:text/css,.picture%20%7B%20background%3A%20none%3B%20%7D | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
ERROR weasyprint:images.py:242 Failed to load image at "file:///tmp/guix-build-weasyprint-52.1.drv-0/source/weasyprint/tests/resources/404" (URLError: ) | |
ERROR weasyprint:images.py:242 Failed to load image at "data:application/x-unknown,ERROR" (Pixbuf error: Unrecognized image file format) | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 2 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - /tmp/guix-build-weasyprint-52.1.drv-0/source/weasyprint/tests/resources/acid2-reference.html | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 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) | |
> 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 | |
../../../source/weasyprint/tests/test_text.py:34: 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) | |
> 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 | |
../../../source/weasyprint/tests/test_text.py:59: AssertionError | |
_ test_background_image[repeat-url(pattern.png)-\n ______________\n ______________\n __rBBBrBBBrB__\n __BBBBBBBBBB__\n __BBBBBBBBBB__\n __BBBBBBBBBB__\n __rBBBrBBBrB__\n __BBBBBBBBBB__\n __BBBBBBBBBB__\n __BBBBBBBBBB__\n __rBBBrBBBrB__\n __BBBBBBBBBB__\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'repeat', css = 'url(pattern.png)' | |
pixels = '\n ______________\n ______________\n __rBBBrBBBrB__\n __BBBBBBBBBB__\n __BBBBBBBBB... __BBBBBBBBBB__\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_repeat', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_repeat: expected rgba(255, 0, 0, 255), got rgba(115, 0, 0, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[repeat_x-url(pattern.png) repeat-x-\n ______________\n ______________\n __rBBBrBBBrB__\n __BBBBBBBBBB__\n __BBBBBBBBBB__\n __BBBBBBBBBB__\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'repeat_x', css = 'url(pattern.png) repeat-x' | |
pixels = '\n ______________\n ______________\n __rBBBrBBBrB__\n __BBBBBBBBBB__\n __BBBBBBBBB... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_repeat_x', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_repeat_x: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[repeat_y-url(pattern.png) repeat-y-\n ______________\n ______________\n __rBBB________\n __BBBB________\n __BBBB________\n __BBBB________\n __rBBB________\n __BBBB________\n __BBBB________\n __BBBB________\n __rBBB________\n __BBBB________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'repeat_y', css = 'url(pattern.png) repeat-y' | |
pixels = '\n ______________\n ______________\n __rBBB________\n __BBBB________\n __BBBB_____... __BBBB________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_repeat_y', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_repeat_y: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[left_top-url(pattern.png) no-repeat 0 0%-\n ______________\n ______________\n __rBBB________\n __BBBB________\n __BBBB________\n __BBBB________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'left_top', css = 'url(pattern.png) no-repeat 0 0%' | |
pixels = '\n ______________\n ______________\n __rBBB________\n __BBBB________\n __BBBB_____... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_left_top', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_left_top: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[center_top-url(pattern.png) no-repeat 50% 0px-\n ______________\n ______________\n _____rBBB_____\n _____BBBB_____\n _____BBBB_____\n _____BBBB_____\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'center_top', css = 'url(pattern.png) no-repeat 50% 0px' | |
pixels = '\n ______________\n ______________\n _____rBBB_____\n _____BBBB_____\n _____BBBB__... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_center_top', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_center_top: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[right_top-url(pattern.png) no-repeat 6px top-\n ______________\n ______________\n ________rBBB__\n ________BBBB__\n ________BBBB__\n ________BBBB__\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'right_top', css = 'url(pattern.png) no-repeat 6px top' | |
pixels = '\n ______________\n ______________\n ________rBBB__\n ________BBBB__\n ________BBB... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_right_top', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_right_top: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[bottom_6_right_0-url(pattern.png) no-repeat bottom 6px right 0-\n ______________\n ______________\n ________rBBB__\n ________BBBB__\n ________BBBB__\n ________BBBB__\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'bottom_6_right_0', css = 'url(pattern.png) no-repeat bottom 6px right 0' | |
pixels = '\n ______________\n ______________\n ________rBBB__\n ________BBBB__\n ________BBB... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_bottom_6_right_0', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_bottom_6_right_0: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[left_center-url(pattern.png) no-repeat left center-\n ______________\n ______________\n ______________\n ______________\n ______________\n __rBBB________\n __BBBB________\n __BBBB________\n __BBBB________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'left_center', css = 'url(pattern.png) no-repeat left center' | |
pixels = '\n ______________\n ______________\n ______________\n ______________\n ___________... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_left_center', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_left_center: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[center_left-url(pattern.png) no-repeat center left-\n ______________\n ______________\n ______________\n ______________\n ______________\n __rBBB________\n __BBBB________\n __BBBB________\n __BBBB________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'center_left', css = 'url(pattern.png) no-repeat center left' | |
pixels = '\n ______________\n ______________\n ______________\n ______________\n ___________... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_center_left', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_center_left: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[center_center-url(pattern.png) no-repeat 3px 3px-\n ______________\n ______________\n ______________\n ______________\n ______________\n _____rBBB_____\n _____BBBB_____\n _____BBBB_____\n _____BBBB_____\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'center_center', css = 'url(pattern.png) no-repeat 3px 3px' | |
pixels = '\n ______________\n ______________\n ______________\n ______________\n ___________... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_center_center', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_center_center: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[right_center-url(pattern.png) no-repeat 100% 50%-\n ______________\n ______________\n ______________\n ______________\n ______________\n ________rBBB__\n ________BBBB__\n ________BBBB__\n ________BBBB__\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'right_center', css = 'url(pattern.png) no-repeat 100% 50%' | |
pixels = '\n ______________\n ______________\n ______________\n ______________\n ___________... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_right_center', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_right_center: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[left_bottom-url(pattern.png) no-repeat 0% bottom-\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n __rBBB________\n __BBBB________\n __BBBB________\n __BBBB________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'left_bottom', css = 'url(pattern.png) no-repeat 0% bottom' | |
pixels = '\n ______________\n ______________\n ______________\n ______________\n ___________... __BBBB________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_left_bottom', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_left_bottom: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[center_bottom-url(pattern.png) no-repeat center 6px-\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n _____rBBB_____\n _____BBBB_____\n _____BBBB_____\n _____BBBB_____\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'center_bottom', css = 'url(pattern.png) no-repeat center 6px' | |
pixels = '\n ______________\n ______________\n ______________\n ______________\n ___________... _____BBBB_____\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_center_bottom', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_center_bottom: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[bottom_center-url(pattern.png) no-repeat bottom center-\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n _____rBBB_____\n _____BBBB_____\n _____BBBB_____\n _____BBBB_____\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'bottom_center', css = 'url(pattern.png) no-repeat bottom center' | |
pixels = '\n ______________\n ______________\n ______________\n ______________\n ___________... _____BBBB_____\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_bottom_center', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_bottom_center: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[right_bottom-url(pattern.png) no-repeat 6px 100%-\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ________rBBB__\n ________BBBB__\n ________BBBB__\n ________BBBB__\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'right_bottom', css = 'url(pattern.png) no-repeat 6px 100%' | |
pixels = '\n ______________\n ______________\n ______________\n ______________\n ___________... ________BBBB__\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_right_bottom', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_right_bottom: expected rgba(255, 0, 0, 255), got rgba(115, 0, 0, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[repeat_x_1px_2px-url(pattern.png) repeat-x 1px 2px-\n ______________\n ______________\n ______________\n ______________\n __BrBBBrBBBr__\n __BBBBBBBBBB__\n __BBBBBBBBBB__\n __BBBBBBBBBB__\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'repeat_x_1px_2px', css = 'url(pattern.png) repeat-x 1px 2px' | |
pixels = '\n ______________\n ______________\n ______________\n ______________\n __BrBBBrBBB... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_repeat_x_1px_2px', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_repeat_x_1px_2px: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[repeat_y_local_2px_1px-url(pattern.png) repeat-y local 2px 1px-\n ______________\n ______________\n ____BBBB______\n ____rBBB______\n ____BBBB______\n ____BBBB______\n ____BBBB______\n ____rBBB______\n ____BBBB______\n ____BBBB______\n ____BBBB______\n ____rBBB______\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'repeat_y_local_2px_1px', css = 'url(pattern.png) repeat-y local 2px 1px' | |
pixels = '\n ______________\n ______________\n ____BBBB______\n ____rBBB______\n ____BBBB___... ____rBBB______\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_repeat_y_local_2px_1px', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_repeat_y_local_2px_1px: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[fixed-url(pattern.png) no-repeat fixed-\n # The image is actually here:\n #######\n ______________\n ______________\n __BB__________\n __BB__________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'fixed', css = 'url(pattern.png) no-repeat fixed' | |
pixels = '\n # The image is actually here:\n #######\n ______________\n ______________\n __B... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_fixed', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_fixed: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[fixed_right-url(pattern.png) no-repeat fixed right 3px-\n # x x x x\n ______________\n ______________\n ______________\n __________rB__ #\n __________BB__ #\n __________BB__ #\n __________BB__ #\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'fixed_right', css = 'url(pattern.png) no-repeat fixed right 3px' | |
pixels = '\n # x x x x\n ______________\n ______________\n ______________\n ... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_fixed_right', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_fixed_right: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[fixed_center_center-url(pattern.png)no-repeat fixed 50%center-\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n _____rBBB_____\n _____BBBB_____\n _____BBBB_____\n _____BBBB_____\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'fixed_center_center', css = 'url(pattern.png)no-repeat fixed 50%center' | |
pixels = '\n ______________\n ______________\n ______________\n ______________\n ___________... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_fixed_center_center', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_fixed_center_center: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[multi_under-url(pattern.png) no-repeat,\n url(pattern.png) no-repeat 2px 1px-\n ______________\n ______________\n __rBBB________\n __BBBBBB______\n __BBBBBB______\n __BBBBBB______\n ____BBBB______\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'multi_under' | |
css = 'url(pattern.png) no-repeat,\n url(pattern.png) no-repeat 2px 1px' | |
pixels = '\n ______________\n ______________\n __rBBB________\n __BBBBBB______\n __BBBBBB___... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_multi_under', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_multi_under: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_ test_background_image[multi_over-url(pattern.png) no-repeat 2px 1px,\n url(pattern.png) no-repeat-\n ______________\n ______________\n __rBBB________\n __BBrBBB______\n __BBBBBB______\n __BBBBBB______\n ____BBBB______\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ______________\n ] _ | |
name = 'multi_over' | |
css = 'url(pattern.png) no-repeat 2px 1px,\n url(pattern.png) no-repeat' | |
pixels = '\n ______________\n ______________\n __rBBB________\n __BBrBBB______\n __BBBBBB___... ______________\n ______________\n ______________\n ______________\n ______________\n ' | |
@assert_no_logs | |
@pytest.mark.parametrize('name, css, pixels', ( | |
('repeat', 'url(pattern.png)', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x', 'url(pattern.png) repeat-x', ''' | |
______________ | |
______________ | |
__rBBBrBBBrB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y', 'url(pattern.png) repeat-y', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
__rBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_top', 'url(pattern.png) no-repeat 0 0%', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_top', 'url(pattern.png) no-repeat 50% 0px', ''' | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_top', 'url(pattern.png) no-repeat 6px top', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_6_right_0', 'url(pattern.png) no-repeat bottom 6px right 0', ''' | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_center', 'url(pattern.png) no-repeat left center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_left', 'url(pattern.png) no-repeat center left', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_center', 'url(pattern.png) no-repeat 3px 3px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_center', 'url(pattern.png) no-repeat 100% 50%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('left_bottom', 'url(pattern.png) no-repeat 0% bottom', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
__rBBB________ | |
__BBBB________ | |
__BBBB________ | |
__BBBB________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('center_bottom', 'url(pattern.png) no-repeat center 6px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('bottom_center', 'url(pattern.png) no-repeat bottom center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('right_bottom', 'url(pattern.png) no-repeat 6px 100%', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
________rBBB__ | |
________BBBB__ | |
________BBBB__ | |
________BBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_x_1px_2px', 'url(pattern.png) repeat-x 1px 2px', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
__BrBBBrBBBr__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
__BBBBBBBBBB__ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('repeat_y_local_2px_1px', 'url(pattern.png) repeat-y local 2px 1px', ''' | |
______________ | |
______________ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
____BBBB______ | |
____BBBB______ | |
____BBBB______ | |
____rBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed', 'url(pattern.png) no-repeat fixed', ''' | |
# The image is actually here: | |
####### | |
______________ | |
______________ | |
__BB__________ | |
__BB__________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_right', 'url(pattern.png) no-repeat fixed right 3px', ''' | |
# x x x x | |
______________ | |
______________ | |
______________ | |
__________rB__ # | |
__________BB__ # | |
__________BB__ # | |
__________BB__ # | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('fixed_center_center', 'url(pattern.png)no-repeat fixed 50%center', ''' | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
_____rBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
_____BBBB_____ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_under', '''url(pattern.png) no-repeat, | |
url(pattern.png) no-repeat 2px 1px''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBBBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
('multi_over', '''url(pattern.png) no-repeat 2px 1px, | |
url(pattern.png) no-repeat''', ''' | |
______________ | |
______________ | |
__rBBB________ | |
__BBrBBB______ | |
__BBBBBB______ | |
__BBBBBB______ | |
____BBBB______ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
______________ | |
'''), | |
)) | |
def test_background_image(name, css, pixels): | |
# pattern.png looks like this: | |
# rBBB | |
# BBBB | |
# BBBB | |
# BBBB | |
> assert_pixels('background_' + name, 14, 16, pixels, ''' | |
html { background: #fff } | |
body { margin: 2px; height: 10px; | |
background: %s } | |
p { background: none } | |
''' % css) | |
../../../source/weasyprint/tests/test_draw/test_background.py:493: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'background_multi_over', width = 14, height = 16 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (11, 9) in background_multi_over: expected rgba(255, 255, 255, 255), got rgba(115, 115, 115, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_____________________________ test_before_after_1 ______________________________ | |
@assert_no_logs | |
def test_before_after_1(): | |
> assert_same_rendering(300, 30, [ | |
('pseudo_before', ''' | |
body { margin: 0; background: #fff } | |
a[href]:before { content: '[' attr(href) '] ' } | |
some content | |
'''), | |
('pseudo_before_reference', ''' | |
body { margin: 0; background: #fff } | |
[some url] some content | |
''') | |
], tolerance=10) | |
../../../source/weasyprint/tests/test_draw/test_before_after.py:15: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:71: in assert_same_rendering | |
_doc, pixels = html_to_pixels( | |
../../../source/weasyprint/tests/test_draw/__init__.py:125: in html_to_pixels | |
pixels = document_to_pixels( | |
../../../source/weasyprint/tests/test_draw/__init__.py:133: in document_to_pixels | |
return image_to_pixels(surface, expected_width, expected_height) | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
surface = | |
width = 300, height = 30 | |
def image_to_pixels(surface, width, height): | |
> assert (surface.get_width(), surface.get_height()) == (width, height) | |
E AssertionError | |
../../../source/weasyprint/tests/test_draw/__init__.py:137: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 2 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_____________________________ test_before_after_2 ______________________________ | |
@assert_no_logs | |
def test_before_after_2(): | |
> assert_same_rendering(500, 30, [ | |
('pseudo_quotes', ''' | |
body { margin: 0; background: #fff; quotes: '«' '»' '“' '”' } | |
q:before { content: open-quote ' '} | |
q:after { content: ' ' close-quote } | |
Lorem ipsum dolor sit amet | |
'''), | |
('pseudo_quotes_reference', ''' | |
body { margin: 0; background: #fff } | |
q:before, q:after { content: none } | |
« Lorem ipsum | |
“ dolor ” | |
sit amet » | |
''') | |
], tolerance=10) | |
../../../source/weasyprint/tests/test_draw/test_before_after.py:36: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:71: in assert_same_rendering | |
_doc, pixels = html_to_pixels( | |
../../../source/weasyprint/tests/test_draw/__init__.py:125: in html_to_pixels | |
pixels = document_to_pixels( | |
../../../source/weasyprint/tests/test_draw/__init__.py:133: in document_to_pixels | |
return image_to_pixels(surface, expected_width, expected_height) | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
surface = | |
width = 500, height = 30 | |
def image_to_pixels(surface, width, height): | |
> assert (surface.get_width(), surface.get_height()) == (width, height) | |
E AssertionError | |
../../../source/weasyprint/tests/test_draw/__init__.py:137: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 2 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
______________________________ test_visibility_1 _______________________________ | |
@assert_no_logs | |
def test_visibility_1(): | |
> assert_pixels('visibility_reference', 12, 7, ''' | |
____________ | |
_rBBB_rBBB__ | |
_BBBB_BBBB__ | |
_BBBB_BBBB__ | |
_BBBB_BBBB__ | |
____________ | |
____________ | |
''', visibility_source % {'extra_css': ''}) | |
../../../source/weasyprint/tests/test_draw/test_visibility.py:27: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'visibility_reference', width = 12, height = 7 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (1, 6) in visibility_reference: expected rgba(0, 0, 255, 255), got rgba(255, 255, 255, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
______________________________ test_visibility_3 _______________________________ | |
@assert_no_logs | |
def test_visibility_3(): | |
> assert_pixels('visibility_mixed', 12, 7, ''' | |
____________ | |
______rBBB__ | |
______BBBB__ | |
______BBBB__ | |
______BBBB__ | |
____________ | |
____________ | |
''', visibility_source % {'extra_css': '''div { visibility: hidden } | |
span { visibility: visible } '''}) | |
../../../source/weasyprint/tests/test_draw/test_visibility.py:53: | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
../../../source/weasyprint/tests/test_draw/__init__.py:57: in assert_pixels | |
assert_pixels_equal( | |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
name = 'visibility_mixed', width = 12, height = 7 | |
raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
expected_raw = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff...ff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' | |
tolerance = 0 | |
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 (1, 6) in visibility_mixed: expected rgba(0, 0, 255, 255), got rgba(255, 255, 255, 255) | |
../../../source/weasyprint/tests/test_draw/__init__.py:160: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:document.py:775 Step 6 - Drawing | |
_______________________ test_box_margin_top_repagination _______________________ | |
@assert_no_logs | |
def test_box_margin_top_repagination(): | |
# Test regression: https://github.com/Kozea/WeasyPrint/issues/943 | |
> page_1, page_2 = parse(''' | |
:root { line-height: 1; font-size: 10px } | |
a::before { content: target-counter(attr(href), page) } | |
div { margin: 20px 0 0; background: yellow } | |
1 | |
1 | |
2 | |
2 | |
title | |
''') | |
E ValueError: too many values to unpack (expected 2) | |
../../../source/weasyprint/tests/test_layout/test_block.py:756: ValueError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 2 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 3 | |
INFO weasyprint.progress:__init__.py:119 Step 5 - Creating layout - Repagination #1 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:pages.py:803 Step 5 - Creating layout - Page 2 (up-to-date) | |
INFO weasyprint.progress:pages.py:803 Step 5 - Creating layout - Page 3 (up-to-date) | |
____________________________ test_breaking_linebox _____________________________ | |
@assert_no_logs | |
def test_breaking_linebox(): | |
page, = parse(''' | |
p { font-size: 13px; | |
width: 300px; | |
font-family: %(fonts)s; | |
background-color: #393939; | |
color: #FFFFFF; | |
line-height: 1; | |
text-decoration: underline overline line-through;} | |
Lorem Ipsum is verysimply | |
dummytext of the printing and. naaaa naaaa naaaa naaaa | |
naaaa naaaa naaaa naaaa naaaa | |
''' % {'fonts': SANS_FONTS}) | |
html, = page.children | |
body, = html.children | |
paragraph, = body.children | |
> assert len(list(paragraph.children)) == 3 | |
E assert 6 == 3 | |
E + where 6 = len([, , , , , ]) | |
E + where [, , , , , ] = list((, , , , , )) | |
E + where (, , , , , ) = .children | |
../../../source/weasyprint/tests/test_layout/test_inline.py:63: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
______________________________ test_linebox_text _______________________________ | |
@assert_no_logs | |
def test_linebox_text(): | |
page, = parse(''' | |
p { width: 165px; font-family:%(fonts)s;} | |
Lorem Ipsumis very coool | |
''' % {'fonts': SANS_FONTS}) | |
html, = page.children | |
body, = html.children | |
paragraph, = body.children | |
lines = list(paragraph.children) | |
> assert len(lines) == 2 | |
E assert 3 == 2 | |
E + where 3 = len([, , ]) | |
../../../source/weasyprint/tests/test_layout/test_inline.py:447: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
____________________________ test_linebox_positions ____________________________ | |
@assert_no_logs | |
def test_linebox_positions(): | |
for width, expected_lines in [(165, 2), (1, 5), (0, 5)]: | |
page = ''' | |
p { width:%(width)spx; font-family:%(fonts)s; | |
line-height: 20px } | |
this is test for Weasyprint | |
''' | |
page, = parse(page % {'fonts': SANS_FONTS, 'width': width}) | |
html, = page.children | |
body, = html.children | |
paragraph, = body.children | |
lines = list(paragraph.children) | |
> assert len(lines) == expected_lines | |
E assert 3 == 2 | |
E + where 3 = len([, , ]) | |
../../../source/weasyprint/tests/test_layout/test_inline.py:470: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
___________________________ test_inline_block_sizes ____________________________ | |
@assert_no_logs | |
def test_inline_block_sizes(): | |
page, = parse(''' | |
body { margin: 0 } | |
div { display: inline-block; } | |
a | |
Ipsum dolor sit amet, | |
consectetur adipiscing elit. | |
Sed sollicitudin nibh | |
et turpis molestie tristique. | |
foo | |
Supercalifragilisticexpialidocious | |
''') | |
html, = page.children | |
assert html.element_tag == 'html' | |
body, = html.children | |
assert body.element_tag == 'body' | |
assert body.width == 200 | |
> line_1, line_2, line_3, line_4 = body.children | |
E ValueError: too many values to unpack (expected 4) | |
../../../source/weasyprint/tests/test_layout/test_inline_block.py:50: ValueError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
________ test_orphans_widows_avoid[orphans: 2; widows: 2-line_counts0] _________ | |
style = 'orphans: 2; widows: 2', line_counts = [3] | |
@assert_no_logs | |
@pytest.mark.parametrize('style, line_counts', ( | |
('orphans: 2; widows: 2', [4, 3]), | |
('orphans: 5; widows: 2', [0, 7]), | |
('orphans: 2; widows: 4', [3, 4]), | |
('orphans: 4; widows: 4', [0, 7]), | |
('orphans: 2; widows: 2; page-break-inside: avoid', [0, 7]), | |
)) | |
def test_orphans_widows_avoid(style, line_counts): | |
pages = render_pages(''' | |
h1 { height: 120px } | |
p { line-height: 20px; | |
width: 1px; /* line break at each word */ | |
%s } | |
Tasty test | |
one two three four five six seven | |
''' % style) | |
for i, page in enumerate(pages): | |
html, = page.children | |
body, = html.children | |
body_children = body.children if i else body.children[1:] # skip h1 | |
count = len(body_children[0].children) if body_children else 0 | |
> assert line_counts.pop(0) == count | |
E assert 4 == 3 | |
E + where 4 = (0) | |
E + where = [3].pop | |
../../../source/weasyprint/tests/test_layout/test_page.py:801: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 2 | |
_______________________ test_margin_boxes_vertical_align _______________________ | |
@assert_no_logs | |
def test_margin_boxes_vertical_align(): | |
# 3 px -> +-----+ | |
# | 1 | | |
# +-----+ | |
# | |
# 43 px -> +-----+ | |
# 53 px -> | 2 | | |
# +-----+ | |
# | |
# 83 px -> +-----+ | |
# | 3 | | |
# 103px -> +-----+ | |
page, = render_pages(''' | |
''') | |
html, top_left, top_center, top_right = page.children | |
line_1, = top_left.children | |
line_2, = top_center.children | |
line_3, = top_right.children | |
assert line_1.position_y == 3 | |
> assert line_2.position_y == 43 | |
E assert 42.75 == 43 | |
E + where 42.75 = .position_y | |
../../../source/weasyprint/tests/test_layout/test_page.py:1212: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
_____________________ test_running_elements[first-texts0] ______________________ | |
argument = 'first', texts = ('', '2-first', '3-first', '3-last', '5') | |
@assert_no_logs | |
@pytest.mark.parametrize('argument, texts', ( | |
# TODO: start doesn’t work because running elements are removed from the | |
# original tree, and the current implentation in | |
# layout.get_running_element_for uses the tree to know if it’s at the | |
# beginning of the page | |
# ('start', ('', '2-first', '2-last', '3-last', '5')), | |
('first', ('', '2-first', '3-first', '3-last', '5')), | |
('last', ('', '2-last', '3-last', '3-last', '5')), | |
('first-except', ('', '', '', '3-last', '')), | |
)) | |
def test_running_elements(argument, texts): | |
pages = render_pages(''' | |
article { break-after: page } | |
h1 { position: running(title) } | |
1 | |
2-first | |
2-last | |
3 | |
3-first | |
3-last | |
5 | |
''' % argument) | |
assert len(pages) == 5 | |
for page, text in zip(pages, texts): | |
html, margin = page.children | |
if margin.children: | |
h1, = margin.children | |
> line, = h1.children | |
E ValueError: too many values to unpack (expected 1) | |
../../../source/weasyprint/tests/test_layout/test_page.py:1312: ValueError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 2 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 3 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 4 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 5 | |
______________________ test_running_elements[last-texts1] ______________________ | |
argument = 'last', texts = ('', '2-last', '3-last', '3-last', '5') | |
@assert_no_logs | |
@pytest.mark.parametrize('argument, texts', ( | |
# TODO: start doesn’t work because running elements are removed from the | |
# original tree, and the current implentation in | |
# layout.get_running_element_for uses the tree to know if it’s at the | |
# beginning of the page | |
# ('start', ('', '2-first', '2-last', '3-last', '5')), | |
('first', ('', '2-first', '3-first', '3-last', '5')), | |
('last', ('', '2-last', '3-last', '3-last', '5')), | |
('first-except', ('', '', '', '3-last', '')), | |
)) | |
def test_running_elements(argument, texts): | |
pages = render_pages(''' | |
article { break-after: page } | |
h1 { position: running(title) } | |
1 | |
2-first | |
2-last | |
3 | |
3-first | |
3-last | |
5 | |
''' % argument) | |
assert len(pages) == 5 | |
for page, text in zip(pages, texts): | |
html, margin = page.children | |
if margin.children: | |
h1, = margin.children | |
> line, = h1.children | |
E ValueError: too many values to unpack (expected 1) | |
../../../source/weasyprint/tests/test_layout/test_page.py:1312: ValueError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 2 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 3 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 4 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 5 | |
__________________ test_running_elements[first-except-texts2] __________________ | |
argument = 'first-except', texts = ('', '', '', '3-last', '') | |
@assert_no_logs | |
@pytest.mark.parametrize('argument, texts', ( | |
# TODO: start doesn’t work because running elements are removed from the | |
# original tree, and the current implentation in | |
# layout.get_running_element_for uses the tree to know if it’s at the | |
# beginning of the page | |
# ('start', ('', '2-first', '2-last', '3-last', '5')), | |
('first', ('', '2-first', '3-first', '3-last', '5')), | |
('last', ('', '2-last', '3-last', '3-last', '5')), | |
('first-except', ('', '', '', '3-last', '')), | |
)) | |
def test_running_elements(argument, texts): | |
pages = render_pages(''' | |
article { break-after: page } | |
h1 { position: running(title) } | |
1 | |
2-first | |
2-last | |
3 | |
3-first | |
3-last | |
5 | |
''' % argument) | |
assert len(pages) == 5 | |
for page, text in zip(pages, texts): | |
html, margin = page.children | |
if margin.children: | |
h1, = margin.children | |
> line, = h1.children | |
E ValueError: too many values to unpack (expected 1) | |
../../../source/weasyprint/tests/test_layout/test_page.py:1312: ValueError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:349 Step 2 - Fetching and parsing CSS - CSS string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 2 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 3 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 4 | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 5 | |
__________________________ test_layout_table_auto_44 ___________________________ | |
@assert_no_logs | |
def test_layout_table_auto_44(): | |
# Cells widths as percentages on normal and colspan cells | |
page, = render_pages(''' | |
a a a a a a a a | |
a a a a a a a a | |
a a a a a a a a | |
a a a a a a a a | |
a a a a a a a a | |
''') | |
html, = page.children | |
body, = html.children | |
div, = body.children | |
table_wrapper, = div.children | |
table, = table_wrapper.children | |
row_group, = table.children | |
row, = row_group.children | |
td_1, td_2, td_3, td_4, td_5 = row.children | |
> assert td_1.width == 10 | |
E assert 17.0 == 10 | |
E + where 17.0 = .width | |
../../../source/weasyprint/tests/test_layout/test_table.py:1368: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
__________________________ test_layout_table_auto_45 ___________________________ | |
@assert_no_logs | |
def test_layout_table_auto_45(): | |
# Cells widths as percentage on multiple lines | |
page, = render_pages(''' | |
a a a a a a a a | |
a a a a a a a a | |
a a a a a a a a | |
a a a a a a a a | |
a a a a a a a a | |
a a a a a a a a | |
a a a a a a a a | |
a a a a a a a a | |
''') | |
html, = page.children | |
body, = html.children | |
div, = body.children | |
table_wrapper, = div.children | |
table, = table_wrapper.children | |
row_group, = table.children | |
row_1, row_2 = row_group.children | |
td_11, td_12, td_13, td_14, td_15 = row_1.children | |
td_21, td_22, td_23 = row_2.children | |
> assert td_11.width == 10 # 31% - 30% | |
E assert 17.0 == 10 | |
E + where 17.0 = .width | |
../../../source/weasyprint/tests/test_layout/test_table.py:1408: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
___________________________ test_table_row_height_1 ____________________________ | |
@assert_no_logs | |
def test_table_row_height_1(): | |
page, = render_pages(''' | |
X | |
X | |
X | |
X | |
X | |
X | |
X | |
''') | |
html, = page.children | |
body, = html.children | |
wrapper, = body.children | |
table, = wrapper.children | |
row_group, = table.children | |
assert wrapper.position_y == 0 | |
assert table.position_y == 3 # 0 + margin-top | |
assert table.height == 620 # sum of row heigths + 5*border-spacing | |
assert wrapper.height == table.height | |
assert row_group.position_y == 103 # 3 + border-spacing | |
assert row_group.height == 420 # 620 - 2*border-spacing | |
> assert [row.height for row in row_group.children] == [ | |
80, 30, 0, 10] | |
E assert [83.0, 30.0, 0, 7.0] == [80, 30, 0, 10] | |
E At index 0 diff: 83.0 != 80 | |
E Use -v to get the full diff | |
../../../source/weasyprint/tests/test_layout/test_table.py:1775: AssertionError | |
------------------------------ Captured log call ------------------------------- | |
INFO weasyprint.progress:__init__.py:103 Step 1 - Fetching and parsing HTML - HTML string | |
INFO weasyprint.progress:__init__.py:64 Step 3 - Applying CSS | |
INFO weasyprint.progress:document.py:380 Step 4 - Creating formatting structure | |
INFO weasyprint.progress:pages.py:794 Step 5 - Creating layout - Page 1 | |
============ 42 failed, 1254 passed, 11 xfailed in 60.38s (0:01:00) ============ | |
command "python" "-c" "import setuptools, tokenize;__file__='setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\\r\\n', '\\n');f.close();exec(compile(code, __file__, 'exec'))" "test" failed with status 1 | |
builder for `/gnu/store/jidwphw1is0mlphmwaspacl26f0krzqv-weasyprint-52.1.drv' failed with exit code 1 | |
@ build-failed /gnu/store/jidwphw1is0mlphmwaspacl26f0krzqv-weasyprint-52.1.drv - 1 builder for `/gnu/store/jidwphw1is0mlphmwaspacl26f0krzqv-weasyprint-52.1.drv' failed with exit code 1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment