Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 56 additions & 1 deletion Tests/test_file_sun.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from __future__ import annotations

import io
import os

import pytest

from PIL import Image, SunImagePlugin
from PIL import Image, SunImagePlugin, _binary

from .helper import assert_image_equal_tofile, assert_image_similar, hopper

Expand Down Expand Up @@ -33,6 +34,60 @@
assert_image_equal_tofile(im, "Tests/images/sunraster.im1.png")


def _sun_header(
depth: int = 0, file_type: int = 0, palette_length: int = 0
) -> io.BytesIO:
return io.BytesIO(
_binary.o32be(0x59A66A95)
+ b"\x00" * 8
+ _binary.o32be(depth)
+ b"\x00" * 4
+ _binary.o32be(file_type)
+ b"\x00" * 4
+ _binary.o32be(palette_length)
)


def test_unsupported_mode_bit_depth() -> None:
with pytest.raises(SyntaxError, match="Unsupported Mode/Bit Depth"):
with SunImagePlugin.SunImageFile(_sun_header()):
pass

Check warning on line 54 in Tests/test_file_sun.py

View check run for this annotation

Codecov / codecov/patch

Tests/test_file_sun.py#L54

Added line #L54 was not covered by tests


def test_unsupported_color_palette_length() -> None:
with pytest.raises(SyntaxError, match="Unsupported Color Palette Length"):
with SunImagePlugin.SunImageFile(_sun_header(depth=1, palette_length=1025)):
pass

Check warning on line 60 in Tests/test_file_sun.py

View check run for this annotation

Codecov / codecov/patch

Tests/test_file_sun.py#L60

Added line #L60 was not covered by tests


def test_unsupported_palette_type() -> None:
with pytest.raises(SyntaxError, match="Unsupported Palette Type"):
with SunImagePlugin.SunImageFile(_sun_header(depth=1, palette_length=1)):
pass

Check warning on line 66 in Tests/test_file_sun.py

View check run for this annotation

Codecov / codecov/patch

Tests/test_file_sun.py#L66

Added line #L66 was not covered by tests


def test_unsupported_file_type() -> None:
with pytest.raises(SyntaxError, match="Unsupported Sun Raster file type"):
with SunImagePlugin.SunImageFile(_sun_header(depth=1, file_type=6)):
pass

Check warning on line 72 in Tests/test_file_sun.py

View check run for this annotation

Codecov / codecov/patch

Tests/test_file_sun.py#L72

Added line #L72 was not covered by tests


@pytest.mark.skipif(
not os.path.exists(EXTRA_DIR), reason="Extra image files not installed"
)
def test_rgbx() -> None:
with open(os.path.join(EXTRA_DIR, "32bpp.ras"), "rb") as fp:
data = fp.read()

# Set file type to 3
data = data[:20] + _binary.o32be(3) + data[24:]

with Image.open(io.BytesIO(data)) as im:
r, g, b = im.split()
im = Image.merge("RGB", (b, g, r))
assert_image_equal_tofile(im, os.path.join(EXTRA_DIR, "32bpp.png"))


@pytest.mark.skipif(
not os.path.exists(EXTRA_DIR), reason="Extra image files not installed"
)
Expand Down
Loading