meerk40t / svgelements

SVG Parsing for Elements, Paths, and other SVG Objects.
MIT License
135 stars 29 forks source link

test_image_preserveaspectratio[_default] fail #242

Open GaetanLepage opened 1 year ago

GaetanLepage commented 1 year ago

Those two tests fail both on master and 1.9.6 (which is the same at the time of writing.

============================================================================== short test summary info ===============================================================================
FAILED test/test_image.py::TestElementImage::test_image_preserveaspectratio - AssertionError: Tuples differ: (0.0, 0.0, 0.0, 0.0) != (0.0, 0.0, 123, 321)
FAILED test/test_image.py::TestElementImage::test_image_preserveaspectratio_default - AssertionError: Tuples differ: (2.5, 0.0, 7.5, 5.0) != (0.0, 0.0, 0.0, 0.0)
===================================================================== 2 failed, 423 passed, 2 warnings in 45.94s =====================================================================
tatarize commented 1 year ago

What OS and Python version. The automated testing says it's passing and I can't currently get the test to fail.

GaetanLepage commented 1 year ago

This occurs while packaging svgelements to nixpkgs. Hence, the environment is a bit special. Here is the relevant PR: https://github.com/NixOS/nixpkgs/pull/256101/files

I am not able to reproduce the failure in a classic venv-based environment.

GaetanLepage commented 1 year ago

Actually, I am able to reproduce the test failure in a normal environment:

Logs:

=============================================================== FAILURES ================================================================
____________________________________________ TestElementImage.test_image_preserveaspectratio ____________________________________________

self = <test.test_image.TestElementImage testMethod=test_image_preserveaspectratio>

    def test_image_preserveaspectratio(self):
        """
        "none" stretches to whatever width and height were given.
        """
        q = io.StringIO(
            u'''
            <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 360 360" version="1.1">'
            <image width="123" height="321" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAEFklEQVR4nO3dsW7bQBRFwSjw//8yU6UJYDgil9xdnZnalp6LewhBhV/HcRy/gKTfsw8A5hEACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACPuafUDd6/X68WeO43jgEooE4GH/M/iffkcQGEUAHnJm+D+9lhBwlQDcbOTwv3ttIeAsAbjJncP/7r2EgHf5FuAGT45/hfdlXwIw2OwRzn5/9iIAA60yvlXuYH0CMMhqo1vtHtYkAAOsOrZV72IdAnDR6iNb/T7mEoALdhnXLnfyPAGAMAE4aben6m738gwBgDABOGHXp+mud3MfAYAwAXjT7k/R3e9nLAGAMAGAMAGAMAF4w6d8fv6Uv4PrBADCBADCBADCBADCBADCBADCBADCBADCBOANn/Kfdz7l7+A6AYAwAYAwAYAwAXjT7p+fd7+fsQQAwgTghF2forvezX0EAMIE4KTdnqa73cszBADCBOCCXZ6qu9zJ8wTgotXHtfp9zCUAA6w6slXvYh0CMMhqY1vtHtYkAAOtMrpV7mB9AjDY7PHNfn/2IgA3mDVC4+ddX7MP+FR/x/jEf+ExfM4SgJvdGQLD5yoBeMjIEBg+owjAw/4d7/8EweC5iwBMZtzM5FsACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACPsDhkRyDUVGTB8AAAAASUVORK5CYII="/>
            </svg>
            ''')
        svg = SVG.parse(q)
        m = list(svg.elements())
        a = m[1]
        a.load()
        self.assertEqual(type(a), Image)
>       self.assertEqual(a.bbox(), (0.0, 0.0, 123, 321))
E       AssertionError: Tuples differ: (0.0, 0.0, 0.0, 0.0) != (0.0, 0.0, 123, 321)
E       
E       First differing element 2:
E       0.0
E       123
E       
E       - (0.0, 0.0, 0.0, 0.0)
E       + (0.0, 0.0, 123, 321)

test/test_image.py:50: AssertionError
________________________________________ TestElementImage.test_image_preserveaspectratio_default ________________________________________

self = <test.test_image.TestElementImage testMethod=test_image_preserveaspectratio_default>

    def test_image_preserveaspectratio_default(self):
        """
        Square image, at 5/10 it's centered along the width putting it 5x5 image translateX(2.5)
        """
        q = io.StringIO(
            u'''
            <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 360 360" version="1.1">'
            <image width="10" height="5" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAEFklEQVR4nO3dsW7bQBRFwSjw//8yU6UJYDgil9xdnZnalp6LewhBhV/HcRy/gKTfsw8A5hEACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACPuafUDd6/X68WeO43jgEooE4GH/M/iffkcQGEUAHnJm+D+9lhBwlQDcbOTwv3ttIeAsAbjJncP/7r2EgHf5FuAGT45/hfdlXwIw2OwRzn5/9iIAA60yvlXuYH0CMMhqo1vtHtYkAAOsOrZV72IdAnDR6iNb/T7mEoALdhnXLnfyPAGAMAE4aben6m738gwBgDABOGHXp+mud3MfAYAwAXjT7k/R3e9nLAGAMAGAMAGAMAF4w6d8fv6Uv4PrBADCBADCBADCBADCBADCBADCBADCBADCBOANn/Kfdz7l7+A6AYAwAYAwAYAwAXjT7p+fd7+fsQQAwgTghF2forvezX0EAMIE4KTdnqa73cszBADCBOCCXZ6qu9zJ8wTgotXHtfp9zCUAA6w6slXvYh0CMMhqY1vtHtYkAAOtMrpV7mB9AjDY7PHNfn/2IgA3mDVC4+ddX7MP+FR/x/jEf+ExfM4SgJvdGQLD5yoBeMjIEBg+owjAw/4d7/8EweC5iwBMZtzM5FsACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACPsDhkRyDUVGTB8AAAAASUVORK5CYII="/>
            </svg>
            ''')
        svg = SVG.parse(q)
        m = list(svg.elements())
        a = m[1]
        a.load()
        self.assertEqual(type(a), Image)
>       self.assertEqual((2.5, 0.0, 7.5, 5.0), a.bbox())
E       AssertionError: Tuples differ: (2.5, 0.0, 7.5, 5.0) != (0.0, 0.0, 0.0, 0.0)
E       
E       First differing element 0:
E       2.5
E       0.0
E       
E       - (2.5, 0.0, 7.5, 5.0)
E       + (0.0, 0.0, 0.0, 0.0)

test/test_image.py:67: AssertionError
GaetanLepage commented 1 year ago

Interesting fact: If I run the test with my globally installed pytest, it works fine:


galepage in 🌐 alya in svgelements (4fe33a4) [?]  3.10.12 (venv) 
✦ ❮ ~/.local/bin/pytest test/test_image.py
Test session starts (platform: linux, Python 3.10.12, pytest 7.4.0, pytest-sugar 0.9.4)
rootdir: /scratch/alya/galepage/temp/svgelements
plugins: sugar-0.9.4, anyio-3.5.0, forked-1.4.0, xdist-2.5.0, cov-3.0.0
collecting ... 
 test/test_image.py ✓✓✓✓                                                                                                  100% ██████████

Results (0.09s):
       4 passed

galepage in 🌐 alya in svgelements (4fe33a4) [?]  3.10.12 (venv) 
✦ ❮ ./venv/bin/pytest test/test_image.py 
========================================================== test session starts ==========================================================
platform linux -- Python 3.10.12, pytest-7.4.2, pluggy-1.3.0
rootdir: /scratch/alya/galepage/temp/svgelements
collected 4 items                                                                                                                       

test/test_image.py ..FF                                                                                                           [100%]

=============================================================== FAILURES ================================================================
...
======================================================== short test summary info ========================================================
FAILED test/test_image.py::TestElementImage::test_image_preserveaspectratio - AssertionError: Tuples differ: (0.0, 0.0, 0.0, 0.0) != (0.0, 0.0, 123, 321)
FAILED test/test_image.py::TestElementImage::test_image_preserveaspectratio_default - AssertionError: Tuples differ: (2.5, 0.0, 7.5, 5.0) != (0.0, 0.0, 0.0, 0.0)
====================================================== 2 failed, 2 passed in 0.05s ======================================================
GaetanLepage commented 1 year ago

Ok, so the issue was that I did not have pillow installed in my environment. I would suggest you to add scipy, numpy and pillow to the test dependencies of the python project. Indeed, they are all required to run the tests succesfully.

tatarize commented 1 year ago

Okay. Well do. -- Repopened until I have done that.