2021-04-14 15:48:27 +03:00
|
|
|
from io import BytesIO
|
|
|
|
|
2020-01-27 14:46:52 +03:00
|
|
|
import pytest
|
2020-08-07 13:28:33 +03:00
|
|
|
|
2022-02-19 06:41:12 +03:00
|
|
|
from PIL import FitsImagePlugin, FitsStubImagePlugin, Image
|
2022-02-15 03:22:46 +03:00
|
|
|
|
|
|
|
from .helper import assert_image_equal, hopper
|
2017-02-28 22:44:26 +03:00
|
|
|
|
|
|
|
TEST_FILE = "Tests/images/hopper.fits"
|
2015-07-03 08:03:25 +03:00
|
|
|
|
|
|
|
|
2020-01-27 14:46:52 +03:00
|
|
|
def test_open():
|
|
|
|
# Act
|
|
|
|
with Image.open(TEST_FILE) as im:
|
|
|
|
# Assert
|
|
|
|
assert im.format == "FITS"
|
2021-04-14 15:48:27 +03:00
|
|
|
assert im.size == (128, 128)
|
|
|
|
assert im.mode == "L"
|
2020-01-27 14:46:52 +03:00
|
|
|
|
2022-02-15 03:22:46 +03:00
|
|
|
assert_image_equal(im, hopper("L"))
|
|
|
|
|
2017-02-28 22:44:26 +03:00
|
|
|
|
2020-01-27 14:46:52 +03:00
|
|
|
def test_invalid_file():
|
|
|
|
# Arrange
|
|
|
|
invalid_file = "Tests/images/flower.jpg"
|
2017-02-28 22:44:26 +03:00
|
|
|
|
2020-01-27 14:46:52 +03:00
|
|
|
# Act / Assert
|
|
|
|
with pytest.raises(SyntaxError):
|
2022-02-15 03:22:46 +03:00
|
|
|
FitsImagePlugin.FitsImageFile(invalid_file)
|
2017-02-28 22:44:26 +03:00
|
|
|
|
|
|
|
|
2021-04-14 15:48:27 +03:00
|
|
|
def test_truncated_fits():
|
|
|
|
# No END to headers
|
|
|
|
image_data = b"SIMPLE = T" + b" " * 50 + b"TRUNCATE"
|
|
|
|
with pytest.raises(OSError):
|
2022-02-15 03:22:46 +03:00
|
|
|
FitsImagePlugin.FitsImageFile(BytesIO(image_data))
|
2021-04-14 15:48:27 +03:00
|
|
|
|
|
|
|
|
|
|
|
def test_naxis_zero():
|
|
|
|
# This test image has been manually hexedited
|
|
|
|
# to set the number of data axes to zero
|
|
|
|
with pytest.raises(ValueError):
|
|
|
|
with Image.open("Tests/images/hopper_naxis_zero.fits"):
|
|
|
|
pass
|
2022-02-19 06:41:12 +03:00
|
|
|
|
|
|
|
|
|
|
|
def test_stub_deprecated():
|
|
|
|
class Handler:
|
|
|
|
opened = False
|
|
|
|
loaded = False
|
|
|
|
|
|
|
|
def open(self, im):
|
|
|
|
self.opened = True
|
|
|
|
|
|
|
|
def load(self, im):
|
|
|
|
self.loaded = True
|
|
|
|
return Image.new("RGB", (1, 1))
|
|
|
|
|
|
|
|
handler = Handler()
|
|
|
|
with pytest.warns(DeprecationWarning):
|
|
|
|
FitsStubImagePlugin.register_handler(handler)
|
|
|
|
|
|
|
|
with Image.open(TEST_FILE) as im:
|
|
|
|
assert im.format == "FITS"
|
|
|
|
assert im.size == (128, 128)
|
|
|
|
assert im.mode == "L"
|
|
|
|
|
|
|
|
assert handler.opened
|
|
|
|
assert not handler.loaded
|
|
|
|
|
|
|
|
im.load()
|
|
|
|
assert handler.loaded
|
|
|
|
|
|
|
|
FitsStubImagePlugin._handler = None
|
|
|
|
Image.register_open(
|
|
|
|
FitsImagePlugin.FitsImageFile.format,
|
|
|
|
FitsImagePlugin.FitsImageFile,
|
|
|
|
FitsImagePlugin._accept,
|
|
|
|
)
|